Index: modules/test-db/src/test/java/org/jbpm/test/task/TaskAfterJoinTest.java
===================================================================
--- modules/test-db/src/test/java/org/jbpm/test/task/TaskAfterJoinTest.java (revision 0)
+++ modules/test-db/src/test/java/org/jbpm/test/task/TaskAfterJoinTest.java (revision 0)
@@ -0,0 +1,74 @@
+
+package org.jbpm.test.task;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.jbpm.api.ProcessInstance;
+import org.jbpm.test.JbpmTestCase;
+
+
+public class TaskAfterJoinTest extends JbpmTestCase {
+ protected static final String PROCESS_XML = ""
+ + ""
+ + " "
+ + " "
+ + " "
+ + " "
+ + " "
+ + " "
+ + " "
+ + " "
+ + " "
+ + " "
+ + " "
+ + " "
+ + " "
+ + " "
+ + " "
+ + " "
+ + " "
+ + " "
+ + " "
+ + " "
+ + "";
+
+ public void testTask() {
+ deployJpdlXmlString(PROCESS_XML);
+
+ 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("state2");
+ expectedActivityNames.add("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));
+ }
+}