task is not blocking after save of process-instance
torhar Apr 27, 2006 5:56 PMHi all,
i wrote a little test which refers to the following process-definition:
<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="standardprocess"> <start-state name="start"> <transition name="start" to="task"></transition> </start-state> <end-state name="end"></end-state> <task-node name="task" create-tasks="true"> <task name="dummytask" blocking="true"></task> <transition name="stop" to="end"></transition> </task-node> </process-definition>
In my test-class i create a new process-instance, call a signal on the root-token and save the process-instance. So the root-token of the persistent process-instance remains in the task-node and a blocking task-instance has been created automatically. After reloading the process-instance and calling a signal again, the root-token leaves the task-node, although the blocking task-instance has not been ended. In my opinion the root-token is not allowed to leave the task node. So i started the debugger and stepped into the leave()-method of TaskNode and find out that the check tmi.hasBlockingTaskInstances(executionContext.getToken()) fails, because the token-instance in execution-context an the token-instance in the (persistent) task-instance differ. What i mean is taskInstance.getToken()!=executionContext.getToken(), because the token in the task-instance is a hibernate proxy and the token in the execution-context is a "real" token). My test-class is as follows:
import junit.framework.TestCase;
import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
public class StandardprocessTest extends TestCase {
JbpmConfiguration jbpmConfiguration = null;
ProcessDefinition processDefinition = null;
ProcessInstance processInstance = null;
protected void setUp() throws Exception {
jbpmConfiguration = JbpmConfiguration.getInstance();
jbpmConfiguration.createSchema();
processDefinition = ProcessDefinition
.parseXmlResource("standardprocess.par/processdefinition.xml");
}
protected void tearDown() throws Exception {
}
public void testStandardprocess() {
long processInstanceId;
JbpmContext jbpmContext1 = jbpmConfiguration.createJbpmContext();
try {
jbpmContext1.deployProcessDefinition(processDefinition);
processInstance = jbpmContext1
.newProcessInstanceForUpdate("standardprocess");
assertNotNull(processInstance);
processInstanceId = processInstance.getId();
processInstance.signal();
} finally {
// Implicit save
jbpmContext1.close();
}
JbpmContext jbpmContext2 = jbpmConfiguration.createJbpmContext();
try {
jbpmContext2.deployProcessDefinition(processDefinition);
processInstance = jbpmContext2
.loadProcessInstanceForUpdate(processInstanceId);
assertNotNull(processInstance);
assertEquals("task", processInstance.getRootToken().getNode()
.getName());
// Should not be allowed
processInstance.signal();
} finally {
// Implicit save
jbpmContext2.close();
}
}
}Any suggestions?
Thanks,
Torsten