Author: tom.baeyens(a)jboss.com
Date: 2008-10-02 05:14:53 -0400 (Thu, 02 Oct 2008)
New Revision: 2459
Modified:
jbpm3/trunk/modules/core/src/main/java/org/jbpm/command/CancelProcessInstanceCommand.java
jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/GraphSession.java
jbpm3/trunk/modules/core/src/main/resources/org/jbpm/db/hibernate.queries.hbm.xml
jbpm3/trunk/modules/core/src/test/java/org/jbpm/graph/node/ProcessStateDbTest.java
Log:
[JBPM-1735] Cleanup ProcessStateDbTest
Modified:
jbpm3/trunk/modules/core/src/main/java/org/jbpm/command/CancelProcessInstanceCommand.java
===================================================================
---
jbpm3/trunk/modules/core/src/main/java/org/jbpm/command/CancelProcessInstanceCommand.java 2008-10-02
08:47:31 UTC (rev 2458)
+++
jbpm3/trunk/modules/core/src/main/java/org/jbpm/command/CancelProcessInstanceCommand.java 2008-10-02
09:14:53 UTC (rev 2459)
@@ -18,11 +18,6 @@
private long processId;
- /**
- * recursivly cancel subprocesses?
- */
- boolean cancelSubProcesses = false;
-
public CancelProcessInstanceCommand() {
}
@@ -57,9 +52,6 @@
pi.end();
- if (cancelSubProcesses)
- cancelSubProcesses(processIdToCancel);
-
log.info("finished process cancellation");
} catch (RuntimeException ex) {
log.error("problems while cancel process", ex);
@@ -67,32 +59,6 @@
}
}
- /**
- * cancel all sub processes of the process with the given id calls
- * "cancelProcess" recursivly until all processes are ended
- *
- * @param processId
- */
- protected void cancelSubProcesses(long processId) {
- Query q = jbpmContext.getSession().getNamedQuery(
- "GraphSession.findSubProcessInstances");
- q.setLong("instanceId", processId);
- Iterator iter = q.list().iterator();
- while (iter.hasNext()) {
- ProcessInstance pi = (ProcessInstance) iter.next();
- log.info("cancel sub process instance #" + pi.getId());
- cancelProcess(pi.getId());
- }
- }
-
- public boolean isCancelSubProcesses() {
- return cancelSubProcesses;
- }
-
- public void setCancelSubProcesses(boolean cancelSubProcesses) {
- this.cancelSubProcesses = cancelSubProcesses;
- }
-
public long getProcessId() {
return processId;
}
Modified: jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/GraphSession.java
===================================================================
--- jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/GraphSession.java 2008-10-02
08:47:31 UTC (rev 2458)
+++ jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/GraphSession.java 2008-10-02
09:14:53 UTC (rev 2459)
@@ -37,6 +37,7 @@
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
+import org.jbpm.graph.node.ProcessState;
/**
* are the graph related database operations.
@@ -233,6 +234,13 @@
}
}
+ List referencingProcessStates = findReferencingProcessStates(processDefinition);
+ Iterator iter = referencingProcessStates.iterator();
+ while (iter.hasNext()) {
+ ProcessState processState = (ProcessState) iter.next();
+ processState.setSubProcessDefinition(null);
+ }
+
// then delete the process definition
session.delete(processDefinition);
@@ -243,6 +251,12 @@
}
}
+ protected List findReferencingProcessStates(ProcessDefinition subProcessDefinition) {
+ Query query =
session.getNamedQuery("GraphSession.findReferencingProcessStates");
+ query.setEntity("subProcessDefinition", subProcessDefinition);
+ return query.list();
+ }
+
// process instances ////////////////////////////////////////////////////////
/**
@@ -370,12 +384,14 @@
Query query =
session.getNamedQuery("GraphSession.findTokensForProcessInstance");
query.setEntity("processInstance", processInstance);
List tokens = query.list();
-
- // deleteSubProcesses
- Iterator iter = tokens.iterator();
- while (iter.hasNext()) {
- Token token = (Token) iter.next();
- deleteSubProcesses(token);
+
+ if (!tokens.isEmpty()) {
+ // deleteSubProcesses
+ Iterator iter = tokens.iterator();
+ while (iter.hasNext()) {
+ Token token = (Token) iter.next();
+ deleteSubProcesses(token);
+ }
}
// jobs
@@ -395,13 +411,15 @@
query.setParameterList("taskInstanceIds", taskInstanceIds);
}
- // delete the logs for all the process instance's tokens
- query = session.getNamedQuery("GraphSession.selectLogsForTokens");
- query.setParameterList("tokens", tokens);
- List logs = query.list();
- iter = logs.iterator();
- while (iter.hasNext()) {
- session.delete(iter.next());
+ if (!tokens.isEmpty()) {
+ // delete the logs for all the process instance's tokens
+ query = session.getNamedQuery("GraphSession.selectLogsForTokens");
+ query.setParameterList("tokens", tokens);
+ List logs = query.list();
+ Iterator iter = logs.iterator();
+ while (iter.hasNext()) {
+ session.delete(iter.next());
+ }
}
// then delete the process instance
@@ -429,6 +447,7 @@
subProcessInstance.setSuperProcessToken(null);
token.setSubProcessInstance(null);
deleteProcessInstance(subProcessInstance);
+ session.flush();
}
if (token.getChildren()!=null) {
Modified:
jbpm3/trunk/modules/core/src/main/resources/org/jbpm/db/hibernate.queries.hbm.xml
===================================================================
---
jbpm3/trunk/modules/core/src/main/resources/org/jbpm/db/hibernate.queries.hbm.xml 2008-10-02
08:47:31 UTC (rev 2458)
+++
jbpm3/trunk/modules/core/src/main/resources/org/jbpm/db/hibernate.queries.hbm.xml 2008-10-02
09:14:53 UTC (rev 2459)
@@ -74,6 +74,14 @@
order by pi.start desc
]]>
</query>
+
+ <query name="GraphSession.findReferencingProcessStates">
+ <![CDATA[
+ select processState
+ from org.jbpm.graph.node.ProcessState as processState
+ where processState.subProcessDefinition = :subProcessDefinition
+ ]]>
+ </query>
<!-- related to ProcessInstance -->
<!-- ########################## -->
@@ -124,7 +132,6 @@
order by pi.start desc
]]>
</query>
-
<query name="GraphSession.findTokensForProcessInstance">
<![CDATA[
Modified:
jbpm3/trunk/modules/core/src/test/java/org/jbpm/graph/node/ProcessStateDbTest.java
===================================================================
---
jbpm3/trunk/modules/core/src/test/java/org/jbpm/graph/node/ProcessStateDbTest.java 2008-10-02
08:47:31 UTC (rev 2458)
+++
jbpm3/trunk/modules/core/src/test/java/org/jbpm/graph/node/ProcessStateDbTest.java 2008-10-02
09:14:53 UTC (rev 2459)
@@ -49,6 +49,7 @@
}
finally
{
+ newTransaction();
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
}
}
@@ -78,6 +79,7 @@
}
finally
{
+ newTransaction();
jbpmContext.getGraphSession().deleteProcessDefinition(superProcessDefinition.getId());
jbpmContext.getGraphSession().deleteProcessDefinition(subProcessDefinition.getId());
}
@@ -101,6 +103,7 @@
}
finally
{
+ newTransaction();
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
}
}
@@ -185,6 +188,7 @@
}
finally
{
+ newTransaction();
jbpmContext.getGraphSession().deleteProcessDefinition(superProcessDefinition.getId());
jbpmContext.getGraphSession().deleteProcessDefinition(subProcessDefinition.getId());
}
@@ -213,6 +217,7 @@
}
finally
{
+ newTransaction();
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinitionOne.getId());
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinitionTwo.getId());
}
@@ -243,6 +248,7 @@
}
finally
{
+ newTransaction();
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinitionOne.getId());
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinitionTwo.getId());
}
@@ -250,12 +256,6 @@
public void testRecursiveProcessDefinition()
{
- if (true)
- {
- System.out.println("FIXME [JBPM-1735]: Cleanup ProcessStateDbTest");
- return;
- }
-
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
"<process-definition name='recursive process'>" +
" <start-state>" +
@@ -298,10 +298,12 @@
superProcessInstance =
graphSession.loadProcessInstance(superProcessInstance.getId());
assertTrue(subProcessInstance.hasEnded());
- assertTrue(superProcessInstance.hasEnded());
+ assertTrue(superProcessInstance.hasEnded());
+
}
finally
{
+ newTransaction();
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
}
}
@@ -331,17 +333,21 @@
" <state name='wait' />" +
"</process-definition>");
jbpmContext.deployProcessDefinition(superProcessDefinition);
+
+ ProcessInstance superProcessInstance = null;
+ ProcessInstance subProcessInstance = null;
+
try
{
newTransaction();
- ProcessInstance processInstance =
jbpmContext.newProcessInstanceForUpdate("superprocess");
- processInstance.signal();
+ superProcessInstance =
jbpmContext.newProcessInstanceForUpdate("superprocess");
+ superProcessInstance.signal();
newTransaction();
- long subProcessInstanceId =
processInstance.getRootToken().getSubProcessInstance().getId();
- ProcessInstance subProcessInstance =
jbpmContext.loadProcessInstance(subProcessInstanceId);
+ long subProcessInstanceId =
superProcessInstance.getRootToken().getSubProcessInstance().getId();
+ subProcessInstance = jbpmContext.loadProcessInstance(subProcessInstanceId);
subProcessInstance.signal();
jbpmContext.save(subProcessInstance);
@@ -356,12 +362,13 @@
ProcessStateLog processStateLog = (ProcessStateLog) processStateLogs.get(0);
assertEquals(subProcessInstanceId,
processStateLog.getSubProcessInstance().getId());
- assertEquals(processInstance.getId(),
processStateLog.getToken().getProcessInstance().getId());
+ assertEquals(superProcessInstance.getId(),
processStateLog.getToken().getProcessInstance().getId());
}
finally
{
-
jbpmContext.getGraphSession().deleteProcessDefinition(superProcessDefinition.getId());
-
jbpmContext.getGraphSession().deleteProcessDefinition(subProcessDefinition.getId());
+ newTransaction();
+ graphSession.deleteProcessDefinition(subProcessDefinition.getId());
+ graphSession.deleteProcessDefinition(superProcessDefinition.getId());
}
}
@@ -474,6 +481,7 @@
}
finally
{
+ newTransaction();
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinitionOne.getId());
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinitionTwo.getId());
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinitionThree.getId());
@@ -482,12 +490,6 @@
public void testUnboundSubProcess()
{
- if (true)
- {
- System.out.println("FIXME [JBPM-1735]: Cleanup ProcessStateDbTest");
- return;
- }
-
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
"<process-definition name='superprocess'>" +
" <start-state name='start'>" +
@@ -519,6 +521,7 @@
}
finally
{
+ newTransaction();
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
}
}