[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