package org.jbpm.db;
import org.jbpm.context.exe.ContextInstance;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
public class DeleteProcessInstanceDbTest extends AbstractDbTestCase {
public void testDeleteProcessInstance() {
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString("<process-definition name='make fondue'>"
+ " <start-state>"
+ " <transition to='buy cheese' />"
+ " </start-state>"
+ " <state name='buy cheese' />"
+ "</process-definition>");
deployProcessDefinition(processDefinition);
ProcessInstance processInstance = jbpmContext.newProcessInstance("make fondue");
processInstance.signal();
processInstance = saveAndReload(processInstance);
jbpmContext.getGraphSession().deleteProcessInstance(processInstance);
newTransaction();
assertDeleted(processInstance);
}
public void testDeleteProcessInstanceWithTask() {
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString("<process-definition name='make fondue'>"
+ " <start-state>"
+ " <transition to='buy cheese' />"
+ " </start-state>"
+ " <task-node name='buy cheese'>"
+ " <task />"
+ " </task-node>"
+ "</process-definition>");
deployProcessDefinition(processDefinition);
ProcessInstance processInstance = jbpmContext.newProcessInstance("make fondue");
processInstance.signal();
processInstance = saveAndReload(processInstance);
jbpmContext.getGraphSession().deleteProcessInstance(processInstance);
newTransaction();
assertDeleted(processInstance);
}
public void testDeleteProcessInstanceWithSubProcessInstance() {
ProcessDefinition buyCheese = ProcessDefinition.parseXmlString("<process-definition name='buy cheese'>"
+ " <start-state>"
+ " <transition to='find shop' />"
+ " </start-state>"
+ " <state name='find shop' />"
+ "</process-definition>");
deployProcessDefinition(buyCheese);
ProcessDefinition makeFondue = ProcessDefinition.parseXmlString("<process-definition name='make fondue'>"
+ " <start-state>"
+ " <transition to='buy cheese' />"
+ " </start-state>"
+ " <process-state name='buy cheese'>"
+ " <sub-process name='buy cheese' />"
+ " </process-state>"
+ "</process-definition>");
deployProcessDefinition(makeFondue);
ProcessInstance processInstance = jbpmContext.newProcessInstance("make fondue");
processInstance.signal();
processInstance = saveAndReload(processInstance);
jbpmContext.getGraphSession().deleteProcessInstance(processInstance);
newTransaction();
assertDeleted(processInstance.getRootToken().getProcessInstance());
assertDeleted(processInstance);
}
public void testDeleteProcessInstanceWithConcurrentPathsOfExecution() {
ProcessDefinition makeFondue = ProcessDefinition.parseXmlString("<process-definition name='make fondue'>"
+ " <start-state>"
+ " <transition to='fork' />"
+ " </start-state>"
+ " <fork name='fork'>"
+ " <transition name='cheese' to='buy cheese' />"
+ " <transition name='bread' to='bake bread' />"
+ " </fork>"
+ " <state name='buy cheese' />"
+ " <state name='bake bread' />"
+ "</process-definition>");
deployProcessDefinition(makeFondue);
ProcessInstance processInstance = jbpmContext.newProcessInstance("make fondue");
ContextInstance contextInstance = processInstance.getContextInstance();
contextInstance.setVariable("a", "asterix");
contextInstance.setVariable("b", "obelix");
processInstance.signal();
Token cheese = processInstance.getRootToken().getChild("cheese");
contextInstance.setVariable("a", "mik", cheese);
contextInstance.setVariable("b", "mak", cheese);
contextInstance.setVariable("c", "mon", cheese);
Token bread = processInstance.getRootToken().getChild("bread");
contextInstance.setVariable("a", "jip", bread);
contextInstance.setVariable("b", "janneke", bread);
processInstance = saveAndReload(processInstance);
jbpmContext.getGraphSession().deleteProcessInstance(processInstance);
newTransaction();
assertDeleted(processInstance);
}
private void assertDeleted(ProcessInstance processInstance) {
long processInstanceId = processInstance.getId();
assertNull("process instance not deleted: " + processInstanceId,
graphSession.getProcessInstance(processInstanceId));
}
}