[jboss-user] [jBPM] New message: "Strange Fork Behavior"
Andre Muniz
do-not-reply at jboss.com
Wed Jan 20 12:36:40 EST 2010
User development,
A new message was posted in the thread "Strange Fork Behavior":
http://community.jboss.org/message/521151#521151
Author : Andre Muniz
Profile : http://community.jboss.org/people/andre.muniz
Message:
--------------------------------------------------------------
Hi!
I'm getting an unexpected behavior on the following test process:
http://community.jboss.org/servlet/JiveServlet/showImage/1815/forkTest.jpg
When task2 is completed and the execution reaches fork2, JBPM 4.3 is duplicating task3, and I'm getting 3 pending tasks instead of two.
Here is the unit test for this process.
package test2;
import java.util.List;
import org.jbpm.api.task.Task;
import org.jbpm.test.JbpmTestCase;
public class ForkTest extends JbpmTestCase {
/** Deployment id. */
String deploymentId;
/**
* Set up.
* @throws Exception exception
*/
protected void setUp() throws Exception {
super.setUp();
// XML definition
StringBuilder jpdl = new StringBuilder();
jpdl.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
jpdl.append("<process key=\"forkTest\" name=\"Fork Test\" xmlns=\"http://jbpm.org/4.3/jpdl\">");
jpdl.append(" <start g=\"7,137,48,48\" name=\"Lease Termination\">");
jpdl.append(" <transition g=\"-43,-18\" name=\"to fork1\" to=\"fork1\"/>");
jpdl.append(" </start>");
jpdl.append(" <end g=\"841,83,48,48\" name=\"end1\"/>");
jpdl.append(" <fork g=\"118,140,48,48\" name=\"fork1\">");
jpdl.append(" <transition g=\"-44,-18\" name=\"to task1\" to=\"task1\"/>");
jpdl.append(" <transition g=\"-44,-18\" name=\"to task2\" to=\"task2\"/>");
jpdl.append(" </fork>");
jpdl.append(" <task candidate-groups=\"leasing\" g=\"231,71,92,52\" name=\"task1\">");
jpdl.append(" <transition name=\"to join2\" to=\"join2\" g=\"-41,-18\"/>");
jpdl.append(" </task>");
jpdl.append(" <task candidate-groups=\"leasing\" g=\"230,225,92,52\" name=\"task2\">");
jpdl.append(" <transition name=\"to fork2\" to=\"fork2\" g=\"-43,-18\"/>");
jpdl.append(" </task>");
jpdl.append(" <task candidate-groups=\"leasing\" g=\"507,188,92,52\" name=\"task3\">");
jpdl.append(" <transition g=\"-41,-18\" name=\"to join1\" to=\"join1\"/>");
jpdl.append(" </task>");
jpdl.append(" <task candidate-groups=\"leasing\" g=\"511,306,92,52\" name=\"task4\">");
jpdl.append(" <transition g=\"-41,-18\" name=\"to join1\" to=\"join1\"/>");
jpdl.append(" </task>");
jpdl.append(" <join g=\"653,244,48,48\" name=\"join1\">");
jpdl.append(" <transition g=\"-44,-18\" name=\"to task5\" to=\"task5\"/>");
jpdl.append(" </join>");
jpdl.append(" <task candidate-groups=\"leasing\" g=\"781,237,92,52\" name=\"task5\">");
jpdl.append(" <transition g=\"-41,-18\" name=\"to join2\" to=\"join2\"/>");
jpdl.append(" </task>");
jpdl.append(" <join g=\"674,80,48,48\" name=\"join2\">");
jpdl.append(" <transition g=\"-42,-18\" name=\"to end1\" to=\"end1\"/>");
jpdl.append(" </join>");
jpdl.append(" <fork g=\"402,232,48,48\" name=\"fork2\">");
jpdl.append(" <transition g=\"-44,-18\" name=\"to task3\" to=\"task3\"/>");
jpdl.append(" <transition g=\"-44,-18\" name=\"to task4\" to=\"task4\"/>");
jpdl.append(" </fork>");
jpdl.append("</process>");
// Deploys the process
deploymentId =
repositoryService.createDeployment().addResourceFromString("forkTest.jpdl.xml", jpdl.toString())
.deploy();
}
/**
* Tear down.
* @throws Exception exception
*/
protected void tearDown() throws Exception {
repositoryService.deleteDeploymentCascade(deploymentId);
super.tearDown();
}
/**
* Tests the process.
*/
public void testProcess() {
// Starts a new process instance
executionService.startProcessInstanceByKey("forkTest");
// Collection to store the pending tasks
List < Task > taskList = null;
// Sets if it's to check the number of tasks after the fork2 (2 tasks - task3 and task4)
boolean checkNumberOfTasks = false;
// Loop
do {
// Gets the pending tasks
taskList = taskService.createTaskQuery().list();
// If it's to check the number of tasks, do it
if (checkNumberOfTasks) {
assertEquals(2, taskList.size());
break;
}
// Iterates the tasks list
for (Task t : taskList) {
// If the execution reaches the task2, changes the boolean, so the next iteration checks the number of tasks
if ("task2".equals(t.getName()))
checkNumberOfTasks = true;
// Completes the task
taskService.completeTask(t.getId());
}
} while (taskList != null && taskList.size() > 0);
}
}
Does anyone have any idea what is going on? Thanks!
--------------------------------------------------------------
To reply to this message visit the message page: http://community.jboss.org/message/521151#521151
More information about the jboss-user
mailing list