[jboss-user] [JBoss jBPM] - Re: JBPM TaskCreation at RunTime
abbasshah
do-not-reply at jboss.com
Tue Jul 18 15:56:57 EDT 2006
Hope it is clear now
<process-definition xmlns='' name='TestProcess'>
| <start-state name='start'>
| <transition name='' to='setup'>< /transition>
| </start-state>
| <node name='setup'>
| <action class='com.sample.SetupProcessActionHandler'/>
| <transition name='' to='TNODE1'>< /transition>
| </node>
|
| <task-node name='TNODE1' signal='never' create-tasks='false'>
| <event type='node-enter'>
| <action class='com.sample.testTask.OnNodeEnter'/>
| </event>
| <task name='TASK_EAT'>
| <event type='task-create'>
| <action class='com.sample.testTask.OnTaskCreation'/>
| </event>
| <event type='task-end'>
| <action class='com.sample.testTask.OnComplete'/>
| </event>
| </task>
|
| <task name='TASK_DRINK'>
| <event type='task-create'>
| <action class='com.sample.testTask.OnTaskCreation'/>
| </event>
| <event type='task-end'>
| <action class='com.sample.testTask.OnComplete'/>
| </event>
| </task>
|
| <transition name='' to='TNODE2'>< /transition>
| </task-node>
|
| <task-node name='TNODE2' signal='never' create-tasks='false'>
| <event type='node-enter'>
| <action class='com.sample.testTask.OnNodeEnter2'/>
| </event>
|
| <task name='TASK_SLEEP'>
| <event type='task-create'>
| <action class='com.sample.testTask.OnTaskCreation'/>
| </event>
| <event type='task-end'>
| <action class='com.sample.testTask.OnComplete'/>
| </event>
| </task>
| <transition name='' to='end'>< /transition>
| </task-node>
|
| <node name='loopback'>
| <transition name='' to='TNODE1'></transition>
| </node>
|
| <end-state name='end'></end-state>
|
| </process-definition>
anonymous wrote : TNODE1 Task Creation Handler
public class OnNodeEnter implements ActionHandler {
|
| public void execute(ExecutionContext executionContext) throws Exception {
| System.out.println("OnNodeEnter-->- Start");
|
| Token token = executionContext.getToken();
| TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();
| TaskNode taskNode = (TaskNode) executionContext.getNode();
|
|
| Task doEAT = taskNode.getTask("TASK_EAT");
| tmi.createTaskInstance(doEAT, token);
|
| Task doDrink = taskNode.getTask("TASK_DRINK");
| tmi.createTaskInstance(doDrink, token);
|
| System.out.println("OnNodeEnter-->- END");
| }
| }
anonymous wrote : TNODE2 Task Creation Handler
| public class OnNodeEnter2 implements ActionHandler {
|
| public void execute(ExecutionContext executionContext) throws Exception {
| System.out.println("OnNodeEnter2-->- Start");
|
| Token token = executionContext.getToken();
| TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();
| TaskNode taskNode = (TaskNode) executionContext.getNode();
|
| Task doSleep = taskNode.getTask("TASK_SLEEP");
| tmi.createTaskInstance(doSleep, token);
|
| System.out.println("OnNodeEnter2-->- END");
| }
| }
anonymous wrote : ActionHandler on task-create event on all tasks
public class OnTaskCreation implements ActionHandler {
| public void execute(ExecutionContext executionContext) throws Exception {
| System.out.println("--> TaskInstacne Id ="+executionContext.getTaskInstance().getName());
| System.out.println("--> TaskInstacne Id ="+executionContext.getTaskInstance().getId());
| }
| }
anonymous wrote : Process Exceution and TASK_EAT ending
Following test is within transaction and in the end i rollback transaction, so that in case of exception nothing is populated in tables.
public void testRunTimeTaskCreation() {
| try {
| loadProcessDefinition(processDef);
|
| Long processInstanceId = createNewProcessInstance();
| ProcessInstance processInstance = findProcessInstance(processInstanceId);
|
| Collection<TaskInstance> tasks = processInstance.getTaskMgmtInstance().getTaskInstances();
|
| // only complete TASK_EAT which get created once process is created
|
| for (TaskInstance task : tasks) {
| System.out.println("----------Task name = "+task.getName());
| if (task.getName().equals("TASK_EAT")) {
|
| assignAndStart(task);
| task.end(); // end the task and transit to TNODE2, leave TASK_DIRNK as it is (uncompleted)
| break;
| }
| }
| } catch (Exception e) {
| e.printStackTrace();
| fail();
| }
|
| }
|
anonymous wrote : OnCreation Actionhandler is giving following out put, if above test is run all togather in same transaction.
:
TaskInstacne Name = TASK_EAT
TaskInstacne Id = 700
TaskInstacne Name = TASK_DRINK
TaskInstacne Id = 701
.....
TaskInstacne Name = TASK_SLEEP
TaskInstacne Id = 0
anonymous wrote : if above test is divided in two test , 1. create process and commit trans then , 2. complete TASK_EAT is perform in different within separate trans output is.
:
TaskInstacne Name = TASK_EAT
TaskInstacne Id = 702
TaskInstacne Name = TASK_DRINK
TaskInstacne Id = 703
.
.
.
TaskInstacne Name = TASK_SLEEP
TaskInstacne Id = 704
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3958942#3958942
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3958942
More information about the jboss-user
mailing list