I've made an all-in-one unit test to demo this problem. The basic idea behind is during the execution of one process instance, each node shall be active before being signaled and inactive after. The code will print out all remaining active activities.
But after signaling B.1.1, the resulting output is anonymous wrote : After signaling B.1.1, actives are [B.1.1, B.1.2, B.1.1.1, B.2] which is clearly not desirable, and the program broke afterwards. package org.jbpm.examples.concurrency.graphbased; | import java.util.ArrayList; | import java.util.List; | import org.jbpm.api.Execution; | import org.jbpm.api.ProcessInstance; | import org.jbpm.test.JbpmTestCase; | | public class ForkTest extends JbpmTestCase { | String deployID = null; | private String processDefinitionKey = "TestFork"; | | private String getJPDL(){ | String jpdl = String.format( | "<process name='%s' xmlns='http://jbpm.org/4.0/jpdl'>" | +"" | +"<start g='211,16,92,52'>" | +"<transition name='to A' to='A' g='-31,-22'/>" | +"</start>" | +"" | +"<end g='172,848,48,48' name='end'/>" | +"<state name='A' g='211,100,92,52'>" | +"<transition name='to B' to='B' g='-31,-22'/>" | +"</state>" | +"<state name='B' g='211,184,92,52'>" | +"<transition name='to fork1' to='fork1' g='-56,-22'/>" | +"</state>" | +"<fork name='fork1' g='233,268,48,48'>" | +"<transition name='to B.1' to='B.1' g='-43,-22'/>" | +"<transition name='to B.2' to='B.2' g='-43,-22'/>" | +"</fork>" | +"<state name='B.1' g='149,348,92,52'>" | +"<transition name='to fork2' to='fork2' g='-56,-22'/>" | +"</state>" | +"<state name='B.2' g='273,348,92,52'>" | +"<transition name='to B.2.1' to='B.2.1' g='-63,-22'/>" | +"</state>" | +"<fork name='fork2' g='140,432,92,52'>" | +"<transition name='to B.1.1' to='B.1.1' g='-55,-22'/>" | +"<transition name='to B.1.2' to='B.1.2' g='-55,-22'/>" | +"</fork>" | +"<state name='B.1.1' g='16,516,92,52'>" | +"<transition name='to B.1.1.1' to='B.1.1.1' g='-63,-22'/>" | +"</state>" | +"<state name='B.1.2' g='140,516,92,52'>" | +"<transition name='to fork3' to='fork3' g='-56,-22'/>" | +"</state>" | +"<fork name='fork3' g='140,600,92,52'>" | +"<transition name='to B.1.2.1' to='B.1.2.1' g='-67,-22'/>" | +"<transition name='to B.1.2.2' to='B.1.2.2' g='-67,-22'/>" | +"</fork>" | +"<state name='B.1.2.1' g='89,684,92,52'>" | +"<transition name='to join1' to='join1' g='-54,-22'/>" | +"</state>" | +"<state name='B.1.2.2' g='213,684,92,52'>" | +"<transition name='to join1' to='join1' g='-54,-22'/>" | +"</state>" | +"<join name='join1' g='172,768,48,48'>" | +"<transition name='to end' to='end' g='-46,-22'/>" | +"</join>" | +"<state name='B.1.1.1' g='16,600,92,52'>" | +"<transition name='to join1' to='join1' g='90,771:-54,-22'/>" | +"</state>" | +"<state name='B.2.1' g='279,432,92,52'>" | +"<transition name='to B.2.1.1' to='B.2.1.1' g='-63,-22'/>" | +"</state>" | +"<state name='B.2.1.1' g='285,516,92,52'>" | +"<transition name='to join1' to='join1' g='354,801:-54,-22'/>" | +"</state>" | +"" | +"</process>", processDefinitionKey); | | return jpdl; | } | | protected void setUp() throws Exception { | super.setUp(); | String jpdl = getJPDL(); | deployID = repositoryService.createDeployment().addResourceFromString("test_fork.jpdl.xml", jpdl).deploy(); | } | | protected void tearDown() throws Exception { | repositoryService.deleteDeployment(deployID); | | super.tearDown(); | } | | public void testConcurrencyGraphBased() { | ProcessInstance processInstance = executionService.startProcessInstanceByKey(processDefinitionKey); | List<String> path = new ArrayList<String>(); | path.add("A"); | path.add("B"); | path.add("B.1"); | path.add("B.1.1"); | path.add("B.1.1.1"); | path.add("B.1.2"); | path.add("B.1.2.1"); | path.add("B.1.2.2"); | | for (String activityName : path){ | assertNotNull(processInstance.findActiveExecutionIn(activityName)); | Execution execution = processInstance.findActiveExecutionIn(activityName); | processInstance = executionService.signalExecutionById(execution.getId()); | System.out.println(String.format("After signaling %s, actives are %s", activityName, processInstance.findActiveActivityNames())); | assertNull(processInstance.findActiveExecutionIn(activityName)); | } | } | } View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4255354#4255354 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4255354 _______________________________________________ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user