Comment puis-je accéder à un printemps fève en Or JavaDelegate?
Je vais essayer d'obtenir un Printemps simple exemple de travailler avec Or de 5,5, et d'avoir quelques ennuis. Je suis en utilisant le moteur de traitement est configuré avec des activités répartie en vertu de l' %activiti_home%/apps/apache-tomcat-6.0.32/webapps/or-repos.
J'ai modifié le printemps de fichier de config pour qu'il effectue un include de mon custom printemps fichier de configuration:
<import resource="classpath*:applicationContext*.xml"/>
J'ai déployé mon applicationContext.xml fichier de l'or-repos/WEB-INF/classes de dossier.
Or commence bien, et je vois le Système..println dans mon haricot constructeur, donc je sais que ma source config est en cours de lecture et le haricot est en cours de construction. J'ai créé un printemps bean pour la classe qui implémente JavaDelegate et injecté mon bean, et il vient toujours null.
Ici, est mon de Printemps Config:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<bean id="myBean" class="org.bpmn.examples.MyBean"/>
<bean id="taskBean" class="org.bpmn.examples.GetBeanTest">
<property name="myBean" ref="myBean"/>
</bean>
</beans>
Voici mon Haricot:
package org.bpmn.examples;
import java.io.Serializable;
public class MyBean implements Serializable {
public MyBean() {
super();
System.out.println("<========================== myBean ===========================>");
System.out.println("<========================== myBean ===========================>");
System.out.println("<========================== myBean ===========================>");
}
/**
*
*/
private static final long serialVersionUID = -2867207654072787909L;
Long id;
String description;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
Ici est ma classe qui implémente l'JavaDelegate:
package org.bpmn.examples;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.JavaDelegate;
public class GetBeanTest implements JavaDelegate {
private MyBean myBean;
@Override
public void execute(DelegateExecution execution) throws Exception {
if(myBean == null){
System.out.println("Bean was null!");
}else{
System.out.println("Bean is valid!");
}
}
public void setMyBean(MyBean myBean) {
this.myBean = myBean;
}
}
Tout cela semble assez simple pour moi, cependant, je pense que le problème est que l'Or n'est pas l'aide d'un ressort de haricot dans la classe qui est appelée sur mon JavaService tâche, c'est la création d'une nouvelle instance.
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
<process id="TestSpringConfig" name="TestSpringConfig">
<documentation>Place documentation for the 'TestSpringConfig' process here.</documentation>
<startEvent id="startevent1" name="Start"></startEvent>
<serviceTask id="servicetask1" name="BeanTest" activiti:class="org.bpmn.examples.GetBeanTest"></serviceTask>
<endEvent id="endevent1" name="End"></endEvent>
<sequenceFlow id="flow1" name="" sourceRef="startevent1" targetRef="servicetask1"></sequenceFlow>
<sequenceFlow id="flow2" name="" sourceRef="servicetask1" targetRef="endevent1"></sequenceFlow>
</process>
</definitions>
Comment puis-je obtenir une référence à un Printemps Bean soit simple, comme je l'ai ici, ou celui qui a été configuré comme une Entité JPA?
Tout/Toutes les réponses appréciés!
6.28.2011
Mise à jour:
En essayant de changer l'or-reste d'application pour utiliser le SpringProcessEngineConfiguration au lieu de la version autonome de StandaloneProcessEngineConfiguration, j'ai changé le activiti-cfg.xml fichier dans le activiti-cfg.jar fichier et au redémarrage de Tomcat.
- Je modifier le fichier xml pour ressembler à ceci:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="org.h2.Driver" />
<property name="url" value="jdbc:h2:tcp://localhost/activiti" />
<property name="username" value="sa" />
<property name="password" value="" />
</bean>
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"/>
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<property name="dataSource" ref="dataSource" />
<property name="transactionManager" ref="transactionManager" />
<property name="databaseSchemaUpdate" value="true" />
<property name="jobExecutorActivate" value="false" />
</bean>
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
<bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
<bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" />
<bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
<bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
<bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />
</beans>
Quand j'ai redémarré le serveur Tomcat sans exceptions apparaissent, cependant lorsque je soulève Explorer et essayez de vous connecter, j'obtiens l'Exception suivante:
INFO: Server startup in 12011 ms
10:32:02,338 ERROR [extensions.webscripts.AbstractRuntime] Exception from executeScript - redirecting to status template error: 05280000 Wrapped Exception (with status template): null
org.springframework.extensions.webscripts.WebScriptException: 05280000 Wrapped Exception (with status template): null
at org.springframework.extensions.webscripts.AbstractWebScript.createStatusException(AbstractWebScript.java:742)
at org.springframework.extensions.webscripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:167)
OriginalL'auteur Griff | 2011-06-24
Vous devez vous connecter pour publier un commentaire.
L'un de mes projet utilise en Or avec le printemps. Je pense que JavaDelagate peut être le problème. Vous pouvez appeler à partir d'or de la tâche du service de chaque printemps, le haricot de cette façon:
bean définition:
or xml:
Vous pouvez également passer des paramètres aux fonctions par exemple des variables de processus:
J'ai toujours utiliser des tâches de service de cette façon, et n'ai pas de problème avec singleton haricots.
Espérons que cela aide. Veuillez prendre un commentaire, si je n'ai pas compris votre problème.
Mise à JOUR:
Mon projet utilise en or comme un moteur de workflow intégré. Or utilise le même applicationContext avec ma webapp.
Mon processus de configuration du moteur:
Aussi, êtes-vous à l'aide de l'or-reste moteur de processus et le déploiement de vos classes via un fichier Jar dans l'application, ou êtes-vous créer votre propre moteur de processus?
J'ai mis à jour ma réponse. Veuillez vérifier mon processus de configuration du moteur. exampleBean est un simple Spring bean, pas implémente JavaDelegate. Vous pouvez appeler le haricot méthodes d'or avec l'expression que j'ai écrit dans mon exemple.
Vous pouvez toujours accéder à vos processus et à des tâches avec la sortie de la boîte en Or des outils tels que l'Explorateur et la Sonde?
Je ne suis pas à l'aide de ces outils, parce que je pense que ces applications ne sont pas aussi stable encore et je ne pouvais pas intégrer de la sonde de base de données mssql. Je l'ai utiliser qu'une seule Sonde de fonction (redémarrage échoué or les emplois), que j'ai mis en œuvre manuellement. J'ai dû mettre à jour uniquement les numéros de réessayer dans l'un des or les tables.
OriginalL'auteur lepike
Je suis en utilisant
@Autocâblés
à apporter dans mes dépendances. Depuis le JavaDelegate n'est pas instancié par le Printemps, je m'appel
dans le constructeur de mon Délégué de la super-classe, qui injecte toutes les dépendances dans le Délégué. Vous pourriez vous demander où trouver de l'applicationContext de, http://sujitpal.blogspot.com/2007/03/accessing-spring-beans-from-legacy-code.html vous donne la réponse.
OriginalL'auteur Urobe
Ma conjecture ist que l'or sera en effet toujours créer une nouvelle instance parce que l'or n'est pas conscient du fait qu'il doit récupérer une instance à partir du printemps conteneur.
Si vous n'avez pas coché cette ressource encore:
http://www.activiti.org/userguide/index.html#springintegration
c'est peut-être ce dont vous avez besoin (c'est à dire ProcessEngineFactoryBean)
Je pense que vous avez vraiment besoin de prendre en or Printemps-conscient, ce qui signifie: Or ne doit pas contrôler le cycle de vie de votre processus de Haricots, mais doit récupérer les instances du Printemps conteneur. Je suis désolé d'entendre que les exemples ne sont pas de tout expliquer en détail. Qu'entendez-vous par 'est l'outil de gestion de l'identité configuration"? Pouvez-vous poster plus de détails?
Ce que j'essaie de faire est d'utiliser l'or-reste d'application, et d'ajouter ma propre beans spring de sorte que je peux réutiliser les outils (Explorer et Sonde). J'ai changé le activiti-cfg.xml fichier dans le reste d'application pour utiliser le SpringProcessEngineConfiguration au lieu de la StandaloneProcessEngineConfiguration, je ne pouvais pas la connexion à l'Explorateur ou de la sonde, il jeta un NPE pour le service d'identité. Il semble que certaines peuvent nécessiter une configuration supplémentaire à dire le moteur de traitement comment authentifier un utilisateur?
Voir mise à jour de la question ci-dessus pour ce que j'ai essayé.
OriginalL'auteur mkro