Esteban Aliverti [http://community.jboss.org/people/eaa] created the discussion

"Re: How to make a process instance go on with jBPM5?"

To view the discussion, visit: http://community.jboss.org/message/600431#600431

--------------------------------------------------------------
In jBPM5, when you start a process, it executes all the nodes it can. If you 
don't have any wait-state, then the process will be completed when the 
session.startProcess() method returns. 
There are 3 ways (somebody please correct me if I'm forgeting someone) to 
define wait-points:
1. Asyncronous WorkItemHandlers in your Service Task Nodes:
When you define a Service Task in your process, you need to assign a handler 
for it. This handler could be synchronous or asynchronous. It will be 
synchronous only if you invoque workItemManager.completeWorkItem() inside 
handler's executeWorkItem() method. The only difference with asynchnornous 
handlers is that they don't complete the work item inside. They delegate this 
behaviour to an external mechanism. 
When the process finds a Service Task Node, its executes the associated 
handler. If the handler conpletes the work item, the execution continues. If 
the handler doesn't complete the work item, the process reaches a wait-state 
(if there are no more parallel paths to continue with). When the process 
reaches a wait-state, it state is persisted (if you are using persistence, of 
course  :p ).
Asynchronous work item handlers are good for (time) expensive calls to external 
systems. If you don't know how long the external sytem will take to respond, 
then you could use an asynchronous work item handler. The process will call the 
external system, everythng is going to be persisted and you can even dispose 
you ksession and stop the Thread that performed the startProcess() call. You 
still need to have a mechanism for continue the execution of the process when 
the external system ends. You will need at least the id of the ksession and the 
id of the work item to be able to restore you ksession ( 
JPAKnowledgeService.loadStatefulKnowledgeSession() ) and to complete the work 
item ( ksession.getWorkItemManager().completeWorkItem()). The 
completeWorkItem() method wil execute as many nodes as it can until it reaches 
a new wait-point or until the process finishes.
2. Human Task Nodes: Human tasks are handled like asynchronous Work Items by 
jBPM5. jBPM5 already comes with a WorkItemHandler implementation for Human 
Tasks: WSHumanTaskHandler. This handler will communicate with a Task Service 
(also provided by jBPM5) and create a new Task in it. Then, it will wait for 
someone (using Human Client API) to complete/cancel the task.
3. External Events: You can define external events handlers in your process 
using an intermediateCatchEvent. Then, from outside your process you can signal 
the event using ksession.signalEvent() method. If you combine a 
intermediateCatchEvent with a converging parallel gateway, you get a wait-state.

I have a set of simple tests that show some of the things I have mentioned 
here. You can download and try them from here:
 https://github.com/esteban-aliverti/JBPM-Samples 
https://github.com/esteban-aliverti/JBPM-Samples

Best Regards,
--------------------------------------------------------------

Reply to this message by going to Community
[http://community.jboss.org/message/600431#600431]

Start a new discussion in jBPM at Community
[http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2034]

_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to