[jbpm-users] [jBPM Users] - Re: JBPM Nested Fork/Joins Doesn't seem to work

romain_l-m do-not-reply at jboss.com
Wed Sep 9 12:30:54 EDT 2009


Hi philsegal, kukeltje and others,

I think I misunderstand this topic.

Could you, please, read my process definition and test case ? Sorry for not using assert() correctly, I currently can't remove the println() from my code. The questions I ask are in the test case comments.

Thanks in advance for your help. I was not able to find any JIRA information. This forum thread seems to be related to my problem.

=== Process ================================== 

  | <?xml version="1.0" encoding="UTF-8"?>
  | <process key="test1" name="test1" xmlns="http://jbpm.org/4.0/jpdl">
  |    <start name="start1">
  |       <transition name="to fork1" to="fork1"/>
  |    </start>
  |    <fork name="fork1">
  |       <transition name="to task1" to="task1"/>
  |       <transition name="to task2" to="task2"/>
  |    </fork>
  |    <task name="task2">
  |       <transition name="to join2" to="join2"/>
  |    </task>
  |    <task name="task1">
  |       <transition name="to fork2" to="fork2"/>
  |    </task>
  |    <fork name="fork2">
  |       <transition name="to task1.1" to="task1.1"/>
  |       <transition name="to task1.2" to="task1.2"/>
  |    </fork>
  |    <taskname="task1.1">
  |       <transition name="to join1" to="join1"/>
  |    </task>
  |    <task name="task1.2">
  |       <transition name="to join1" to="join1"/>
  |    </task>
  |    <join name="join1">
  |       <transition name="to join2" to="join2"/>
  |    </join>
  |    <join name="join2">
  |       <transition name="to end1" to="end1"/>
  |    </join>
  |    <end name="end1"/>
  | </process>
  | 

=== API =================================== 

  | // test case which extends JbpmTestCase
  | public void testTaskConcurrency() {
  | 	repositoryService.createDeployment().addResourceFromClasspath("test1.jpdl.xml").deploy();
  | 	
  | 	ProcessInstance processInstance = executionService.startProcessInstanceByKey("test1");
  | 	String processInstanceId = processInstance.getId();
  | 	System.out.println("Process started:");
  | 	for (Task taskTemp : taskService.createTaskQuery().processInstanceId(processInstanceId).list()) {
  | 		System.out.println(String.format("> Task '%s' with execution '%s'", taskTemp.getActivityName(), taskTemp.getExecutionId()));
  | 	}
  | 	/* Output (ok):
  | 	 * > Task 'task1' with execution 'test1.1.to task1'
  | 	 * > Task 'task2' with execution 'test1.1.to task2'
  | 	 */
  | 	
  | 	Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).activityName("task1").uniqueResult();
  | 	taskService.completeTask(task.getId());
  | 	System.out.println("task1 completed:");
  | 	for (Task taskTemp : taskService.createTaskQuery().processInstanceId(processInstanceId).list()) {
  | 		System.out.println(String.format("> Task '%s' with execution '%s'", taskTemp.getActivityName(), taskTemp.getExecutionId()));
  | 	}
  | 	/* Output (strange):
  | 	 * > Task 'task2' with execution 'test1.1.to task2'
  | 	 * > Task 'task1.1' with execution 'test1.1.to task1.1'
  | 	 * > Task 'task1.2' with execution 'test1.1.to task1.2'
  | 	 * > Task 'task1.1' with execution 'test1.1.to task1'
  | 	 */
  | 	/* Questions:
  | 	 * Why do I have 2 different 'task1.1' (with different execution id)?
  | 	 * Which one should I complete?
  | 	 * Imagine task1 is not a task but a subprocess, this subprocess would be started twice. Is it normal?
  | 	 */
  | 	
  | 	// I cannot use the uniqueResult() method (the task I want to get is not unique)
  | 	task = taskService.createTaskQuery().processInstanceId(processInstanceId).activityName("task1.1").list().get(0);
  | 	taskService.completeTask(task.getId());
  | 	System.out.println("task1.1 completed:");
  | 	for (Task taskTemp : taskService.createTaskQuery().processInstanceId(processInstanceId).list()) {
  | 		System.out.println(String.format("> Task '%s' with execution '%s'", taskTemp.getActivityName(), taskTemp.getExecutionId()));
  | 	}
  | 	/* Output (still strange):
  | 	 * > Task 'task2' with execution 'test1.1.to task2'
  | 	 * > Task 'task1.1' with execution 'test1.1.to task1.1'
  | 	 * > Task 'task1.2' with execution 'test1.1.to task1.2'
  | 	 */
  | 	
  | 	task = taskService.createTaskQuery().processInstanceId(processInstanceId).activityName("task1.2").uniqueResult();
  | 	taskService.completeTask(task.getId());
  | 	System.out.println("task1.2 completed:");
  | 	for (Task taskTemp : taskService.createTaskQuery().processInstanceId(processInstanceId).list()) {
  | 		System.out.println(String.format("> Task '%s' with execution '%s'", taskTemp.getActivityName(), taskTemp.getExecutionId()));
  | 	}
  | 	/* Output (still strange):
  | 	 * > Task 'task2' with execution 'test1.1.to task2'
  | 	 * > Task 'task1.1' with execution 'test1.1.to task1.1'
  | 	 */
  | 	/* Question:
  | 	 * I reached the first join, why do I still see the second 'task1.1'?
  | 	 */
  | 	
  | 	task = taskService.createTaskQuery().processInstanceId(processInstanceId).activityName("task2").uniqueResult();
  | 	taskService.completeTask(task.getId());
  | 	System.out.println("task2 completed:");
  | 	for (Task taskTemp : taskService.createTaskQuery().processInstanceId(processInstanceId).list()) {
  | 		System.out.println(String.format("> Task '%s' with execution '%s'", taskTemp.getActivityName(), taskTemp.getExecutionId()));
  | 	}
  | 	/* Output (ok):
  | 	 * [nothing]
  | 	 */
  | }
  | 

=== Environment ==============================
- jBPM Version : 4.1
- Database : MySQL 5.1
- JDK : 1.6.0_15
- Container : java -version
- Configuration : default jbpm.cfg.xml
- Libraries : default librairies 

View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4254229#4254229

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4254229


More information about the jbpm-users mailing list