Thanks for the reply! Here is my processdefinition.
| <?xml version="1.0" encoding="UTF-8"?> | | <process-definition | xmlns="urn:jbpm.org:jpdl-3.1" | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xsi:schemaLocation="http://jbpm.org/3/jpdl http://jbpm.org/xsd/jpdl-3.1.xsd" | name="test"> | <start-state name="start"> | <transition name="toFirstState" to="FirstState"></transition> | </start-state> | <state name="FirstState"> | <transition name="toNode" to="node1"></transition> | | </state> | <end-state name="end1"></end-state> | <node async="false" name="node1"> | <action name="test" class="de.uniSiegen.crm.server.workflow.action.TestActivity" /> | | <transition name="toSecondState" to="SecondState"></transition> | </node> | <state name="SecondState"> | <transition name="toEnd" to="end1"></transition> | </state> | </process-definition> | | And this is my actionhandler, which just should simulate a long process calculation. public class TestActivity implements ActionHandler { | Logger logger = ServiceLocator.getLogger(WorkflowBean.class); | public void execute(ExecutionContext arg0) throws Exception { | // TODO Auto-generated method stub | | Node node = arg0.getNode(); | node.leave(arg0); | | Object o = new Object(); | synchronized (o) { | o.wait(10000); | | } | logger.info("###########################################################################"); | logger.info("# TESTACTIVITY !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#"); | logger.info("###########################################################################"); | | } | | } If behavior of the process without async = "true" is : | processinstance.signal("toNode"); | after calling the signal, the client waits 10 seconds until the node has executed the action... In the next step i ask the processinstance for the name of the actual node. | System.out.println("Node of the process :" + processinstance.getRootToken().getNode().getName() ); | After waiting 10 seconds, the output ist : SecondState So, the process has needed 10 seconds for the execution and automatically enter the SecondState. That is exactly, what i have expected. If i change the processdefinition for asynchron execution ( async = "true" ) the behavior is this: processintance.signal("toNode"); the token enters the node. System.out.println("Node of the process : " + processinstance.getRootToken().getNode().getName()); at once, without waiting 10 seconds for the execution of the node, the name of the node is released. So, the client thread does not wait for the execution. But the output of the system.out is: node1 After reading this part of the documentation: anonymous wrote : | Note that the jbpm client code can now commit the transaction. The sending of the message should be done in the same transaction as the process updates. So the net result of the transaction is that the token has moved to the next node (which has not yet been executed) and a org.jbpm.command.ExecuteNodeCommand-message has been sent on the asynchronous messaging system to the jBPM Command Executor. i thought, that the processinstance should at once move to the SecondState, without waiting for the action of the node, and therefore i expected SecondState as output of the System.out. My question: Have i understood the documentation wrong and the output: node1 is, right? Or is there an error in my code and the actual node of the processinstance should be SecondState? Thanks asmo View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4000433#4000433 Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4000433 _______________________________________________ jboss-user mailing list [email protected] https://lists.jboss.org/mailman/listinfo/jboss-user
