import java.util.HashSet; import java.util.Set; import org.jbpm.api.ProcessInstance; import org.jbpm.test.JbpmTestCase; public class TaskAfterJoinTest extends JbpmTestCase { String deploymentId; protected void setUp() throws Exception { super.setUp(); deploymentId = repositoryService.createDeployment() .addResourceFromClasspath("process.jpdl.xml") .deploy(); } protected void tearDown() throws Exception { repositoryService.deleteDeploymentCascade(deploymentId); super.tearDown(); } public void test() { ProcessInstance processInstance = executionService.startProcessInstanceByKey("TaskAfterJoinTest"); String pid = processInstance.getId(); Set expectedActivityNames = new HashSet(); expectedActivityNames.add("state1"); expectedActivityNames.add("state2"); assertEquals(expectedActivityNames, processInstance.findActiveActivityNames()); assertNotNull(processInstance.findActiveExecutionIn("state1")); assertNotNull(processInstance.findActiveExecutionIn("state2")); String state1Id = processInstance.findActiveExecutionIn("state1").getId(); processInstance = executionService.signalExecutionById(state1Id); expectedActivityNames.remove("state1"); assertEquals(expectedActivityNames, processInstance.findActiveActivityNames()); assertNotNull(processInstance.findActiveExecutionIn("state2")); String state2Id = processInstance.findActiveExecutionIn("state2").getId(); // HERE - it raises NullPointerException processInstance = executionService.signalExecutionById(state2Id); expectedActivityNames.remove("state1"); expectedActivityNames.remove("task1"); assertEquals(expectedActivityNames, processInstance.findActiveActivityNames()); assertNotNull(processInstance.findActiveExecutionIn("task1")); String task1Id = processInstance.findActiveExecutionIn("task1").getId(); processInstance = executionService.signalExecutionById(task1Id); assertNull("execution "+pid+" should not exist", executionService.findExecutionById(pid)); } }