-
1. Re: understand asynchronous continuations
tom.baeyens Nov 9, 2006 1:46 AM (in response to gujing011)when invoking the signal method, the process will start executing and this method only returns after the process has entered a new wait state. potentially this means that many nodes are executed in the mean time.
all of this is inside 1 transaction of the caller of the signal method.
asynchronous continuations lets you execute the process till a certain point (the node marked with async=true) in the caller's transaction. then jbpm will take care of resuming the execution in a separate transaction. this involves sending an asynchronous message in the caller's transaction to a job executor. the job executor will start a new tx and resume the execution starting by execting the node with async=true
let us know if this explanation is better then in the user guide, then we update it :-) -
2. Re: understand asynchronous continuations
gujing011 Nov 9, 2006 3:43 AM (in response to gujing011)thanks for the reply, does that mean asynchronous continuations is useful for the node typed Node, not for the node typed state because state node is only a wait state?
-
3. Re: understand asynchronous continuations
tom.baeyens Nov 9, 2006 5:14 AM (in response to gujing011)correct.
-
4. Re: understand asynchronous continuations
gujing011 Nov 13, 2006 3:04 AM (in response to gujing011)now i am continue to my test.
i want to know how to activate a message executor?<process-definition name="sub"> <start-state name="start"> <transition to='auto' /> </start-state> <node name="auto" async='true' > <action class="example.processmodel.NodeExecuteHandler" /> <transition name="endtran" to='end' /> </node> <end-state name="end" /> </process-definition>
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext(); jbpmContext.deployProcessDefinition(processDefinition); ///////////////////////////////// Token token= processInstance.getRootToken(); System.out.println(token.getNode().getName());//START token.signal(); System.out.println(token.getNode().getName());//AUTO jbpmContext.save(processInstance); jbpmContext.close();
public class NodeExecuteHandler implements ActionHandler { public void execute(ExecutionContext executionContext) throws Exception { // TODO Auto-generated method stub System.out.println("NodeExecuteHandler"); executionContext.setVariable("bianliang","value1"); executionContext.leaveNode("endtran"); } }
It seems the example.processmodel.NodeExecuteHandler has not been execute as i could not see the system out.And i looked up in the database table jbpm.jbpm_message and saw
1, 'N', 'CMD_EXECUTOR', '', 0, 1, '', , 2, '',
the config:static JbpmConfiguration jbpmConfiguration = null; static { // An example configuration file such as this can be found in // 'src/config.files'. Typically the configuration information is in the // resource file 'jbpm.cfg.xml', but here we pass in the configuration // information as an XML string. // First we create a JbpmConfiguration statically. One JbpmConfiguration // can be used for all threads in the system, that is why we can safely // make it static. jbpmConfiguration = JbpmConfiguration.parseXmlString( "<jbpm-configuration>" + // A jbpm-context mechanism separates the jbpm core // engine from the services that jbpm uses from // the environment. " <jbpm-context>" + " <service name='persistence' " + " factory='org.jbpm.persistence.db.DbPersistenceServiceFactory' />" + " <service name='message' " + " factory='org.jbpm.msg.db.DbMessageServiceFactory' />" + " </jbpm-context>" + // Also all the resource files that are used by jbpm are // referenced from the jbpm.cfg.xml " <string name='resource.hibernate.cfg.xml' " + " value='hibernate.cfg.xml' />" + " <string name='resource.business.calendar' " + " value='org/jbpm/calendar/jbpm.business.calendar.properties' />" + " <string name='resource.default.modules' " + " value='org/jbpm/graph/def/jbpm.default.modules.properties' />" + " <string name='resource.converter' " + " value='org/jbpm/db/hibernate/jbpm.converter.properties' />" + " <string name='resource.action.types' " + " value='org/jbpm/graph/action/action.types.xml' />" + " <string name='resource.node.types' " + " value='org/jbpm/graph/node/node.types.xml' />" + " <string name='resource.varmapping' " + " value='org/jbpm/context/exe/jbpm.varmapping.xml' />" + "</jbpm-configuration>" ); }
but how to config a command executor?both in pure java application and in
application server. thanks for help~