[jbpm-commits] JBoss JBPM SVN: r3377 - in jbpm4/trunk: modules/api/src/main/java/org/jbpm and 10 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Sat Dec 13 16:09:18 EST 2008
Author: tom.baeyens at jboss.com
Date: 2008-12-13 16:09:18 -0500 (Sat, 13 Dec 2008)
New Revision: 3377
Modified:
jbpm4/trunk/modules/api/src/main/java/org/jbpm/Execution.java
jbpm4/trunk/modules/api/src/main/java/org/jbpm/activity/ActivityExecution.java
jbpm4/trunk/modules/api/src/main/java/org/jbpm/model/OpenExecution.java
jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/concurrency/graphbased/ConcurrencyGraphBasedTest.java
jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/concurrency/graphbased/process.jpdl.xml
jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/exclusive/conditions/process.jpdl.xml
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/activity/ForkActivity.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/activity/JoinActivity.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/FindExecutionsCmd.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/api/basicfeatures/ScopeVariableDeclarationTest.java
jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/api/basicfeatures/TransitionBasedConcurrencyTest.java
jbpm4/trunk/modules/test-base/src/main/java/org/jbpm/test/DbTestCase.java
jbpm4/trunk/pom.xml
Log:
added fork and join
Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/Execution.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/Execution.java 2008-12-13 11:40:49 UTC (rev 3376)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/Execution.java 2008-12-13 21:09:18 UTC (rev 3377)
@@ -131,6 +131,9 @@
/** the <a href="#state">state</a> of this execution. */
String getState();
+ /** is this a process instance */
+ boolean isProcessInstance();
+
/** is this execution active ? This is the inverse of {@link #isLocked()}. */
boolean isActive();
Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/activity/ActivityExecution.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/activity/ActivityExecution.java 2008-12-13 11:40:49 UTC (rev 3376)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/activity/ActivityExecution.java 2008-12-13 21:09:18 UTC (rev 3377)
@@ -129,11 +129,11 @@
// reposition the execution in another node /////////////////////////////////
/** position this execution in the destination node. */
- void move(Node destination);
+ void setNode(Node destination);
/** position the given execution in the destination node */
- void move(Node destination, Execution execution);
-
+ void setNode(Node destination, Execution execution);
+
// managing the parent-child relation ///////////////////////////////////////
/** creates a child execution. See
@@ -218,7 +218,7 @@
/** ends the given execution and all it's child executions with a user defined
* status. */
void end(OpenExecution executionToEnd, String state);
-
+
// firing events ////////////////////////////////////////////////////////////
/** fires the event on the given eventSource and then propagates the event
Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/model/OpenExecution.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/model/OpenExecution.java 2008-12-13 11:40:49 UTC (rev 3376)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/model/OpenExecution.java 2008-12-13 21:09:18 UTC (rev 3377)
@@ -52,6 +52,9 @@
/** the current node */
Node getNode();
+
+ /** update the state */
+ void setState(String state);
/** the related sub process execution. */
OpenExecution getSubProcessInstance();
Modified: jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/concurrency/graphbased/ConcurrencyGraphBasedTest.java
===================================================================
--- jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/concurrency/graphbased/ConcurrencyGraphBasedTest.java 2008-12-13 11:40:49 UTC (rev 3376)
+++ jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/concurrency/graphbased/ConcurrencyGraphBasedTest.java 2008-12-13 21:09:18 UTC (rev 3377)
@@ -22,8 +22,6 @@
package org.jbpm.examples.concurrency.graphbased;
import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
import java.util.Set;
import org.jbpm.Execution;
@@ -39,39 +37,55 @@
deployJpdlResource("org/jbpm/examples/concurrency/graphbased/process.jpdl.xml");
Execution processInstance = executionService.startExecutionByKey("ConcurrencyGraphBased");
-
- List<Execution> executions = executionService.findExecutions(processInstance.getId());
- Map<String, Execution> executionNodesMap = getExecutionsNodesMap(executions);
+ String pid = processInstance.getId();
- Set<String> nodeNames = new HashSet<String>(executionNodesMap.keySet());
Set<String> expectedNodeNames = new HashSet<String>();
- expectedNodeNames.add("fork");
expectedNodeNames.add("send invoice");
expectedNodeNames.add("load truck");
expectedNodeNames.add("print shipping documents");
- assertEquals(expectedNodeNames, nodeNames);
- assertFalse(executionNodesMap.get("fork").isActive());
- assertTrue(executionNodesMap.get("load truck").isActive());
- assertTrue(executionNodesMap.get("print shipping documents").isActive());
+ assertEquals(expectedNodeNames, getNodeNames(pid));
- Execution sendInvoiceExecution = executionNodesMap.get("send invoice");
- assertTrue(sendInvoiceExecution.isActive());
+ assertTrue(findExecution(pid, "send invoice").isActive());
+ assertTrue(findExecution(pid, "load truck").isActive());
+ assertTrue(findExecution(pid, "print shipping documents").isActive());
- /*
+ String sendInvoiceExecutionId = findExecution(pid, "send invoice").getId();
+ executionService.signalExecutionById(sendInvoiceExecutionId);
- executionService.signalExecutionById(sendInvoiceExecution.getId());
+ expectedNodeNames.remove("send invoice");
+ expectedNodeNames.add("final join");
+ assertEquals(expectedNodeNames, getNodeNames(pid));
- executions = executionService.findExecutions(processInstance.getId());
- executionNodesMap = getExecutionsNodesMap(executions);
+ assertTrue(findExecution(pid, "load truck").isActive());
+ assertTrue(findExecution(pid, "print shipping documents").isActive());
+ assertFalse(findExecution(pid, "final join").isActive());
- expectedNodeNames.remove("send invoice");
+ String loadTruckExecutionId = findExecution(pid, "load truck").getId();
+ executionService.signalExecutionById(loadTruckExecutionId);
- assertEquals(expectedNodeNames, nodeNames);
- assertFalse(executionNodesMap.get("fork").isActive());
- assertTrue(executionNodesMap.get("load truck").isActive());
- assertTrue(executionNodesMap.get("print shipping documents").isActive());
- */
+ expectedNodeNames.remove("load truck");
+ expectedNodeNames.add("shipping join");
+ assertEquals(expectedNodeNames, getNodeNames(pid));
+
+ assertTrue(findExecution(pid, "print shipping documents").isActive());
+ assertFalse(findExecution(pid, "final join").isActive());
+
+ String printShippingDocumentsId = findExecution(pid, "print shipping documents").getId();
+ executionService.signalExecutionById(printShippingDocumentsId);
+
+ expectedNodeNames.remove("print shipping documents");
+ expectedNodeNames.remove("shipping join");
+ expectedNodeNames.add("drive truck to destination");
+ assertEquals(expectedNodeNames, getNodeNames(pid));
+
+ assertTrue(findExecution(pid, "drive truck to destination").isActive());
+ assertFalse(findExecution(pid, "final join").isActive());
+
+ String driveTruckExecutionId = findExecution(pid, "drive truck to destination").getId();
+ executionService.signalExecutionById(driveTruckExecutionId);
+
+ assertNull(executionService.findExecution(pid));
}
}
Modified: jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/concurrency/graphbased/process.jpdl.xml
===================================================================
--- jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/concurrency/graphbased/process.jpdl.xml 2008-12-13 11:40:49 UTC (rev 3376)
+++ jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/concurrency/graphbased/process.jpdl.xml 2008-12-13 21:09:18 UTC (rev 3377)
@@ -17,14 +17,14 @@
</state>
<state name="load truck">
- <flow to="intermediate join" />
+ <flow to="shipping join" />
</state>
<state name="print shipping documents">
- <flow to="intermediate join" />
+ <flow to="shipping join" />
</state>
- <join name="intermediate join">
+ <join name="shipping join">
<flow to="drive truck to destination" />
</join>
Modified: jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/exclusive/conditions/process.jpdl.xml
===================================================================
--- jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/exclusive/conditions/process.jpdl.xml 2008-12-13 11:40:49 UTC (rev 3376)
+++ jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/exclusive/conditions/process.jpdl.xml 2008-12-13 21:09:18 UTC (rev 3377)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8" xmlns="http://jbpm.org/4/jpdl"?>
+<?xml version="1.0" encoding="UTF-8"?>
-<process name="ExclusiveConditions" >
+<process name="ExclusiveConditions" xmlns="http://jbpm.org/4/jpdl">
<start>
<flow to="evaluate document" />
Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/activity/ForkActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/activity/ForkActivity.java 2008-12-13 11:40:49 UTC (rev 3376)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/activity/ForkActivity.java 2008-12-13 21:09:18 UTC (rev 3377)
@@ -26,6 +26,7 @@
import org.jbpm.Execution;
import org.jbpm.activity.ActivityExecution;
import org.jbpm.model.Node;
+import org.jbpm.model.OpenExecution;
import org.jbpm.model.Transition;
@@ -37,7 +38,8 @@
private static final long serialVersionUID = 1L;
public void execute(ActivityExecution execution) throws Exception {
- Execution processInstance = execution.getProcessInstance();
+ OpenExecution processInstance = execution.getProcessInstance();
+
Node node = execution.getNode();
List<Transition> outgoingTransitions = node.getOutgoingTransitions();
@@ -49,5 +51,10 @@
Execution childExecution = execution.createExecution(childExecutionName, processInstance);
execution.take(outgoingTransition, childExecution);
}
+
+ // if this was the first fork
+ if (execution.isProcessInstance()) {
+ execution.setNode(null);
+ }
}
}
Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/activity/JoinActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/activity/JoinActivity.java 2008-12-13 11:40:49 UTC (rev 3376)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/activity/JoinActivity.java 2008-12-13 21:09:18 UTC (rev 3377)
@@ -42,13 +42,14 @@
public void execute(ActivityExecution execution) throws Exception {
// end the child execution execution
// this will also remove the execution from it's parent
- execution.end();
+ execution.setState(Execution.STATE_INACTIVE);
+ execution.waitForSignal();
Node join = execution.getNode();
List<OpenExecution> joinedExecutions = findJoinedExecutions(execution, join);
if (isComplete(joinedExecutions, join)) {
- removeJoinedExecutions(joinedExecutions, execution);
+ endJoinedExecutions(joinedExecutions, execution);
OpenExecution processInstance = execution.getProcessInstance();
@@ -61,7 +62,7 @@
outgoingExecution = execution.createExecution(processInstance);
}
- execution.move(join, outgoingExecution);
+ execution.setNode(join, outgoingExecution);
Transition transition = join.getDefaultTransition();
execution.take(transition, outgoingExecution);
}
@@ -91,9 +92,9 @@
return (executionsToJoin==joinedExecutions.size());
}
- void removeJoinedExecutions(List<OpenExecution> joinedExecutions, ActivityExecution execution) {
+ void endJoinedExecutions(List<OpenExecution> joinedExecutions, ActivityExecution execution) {
for (OpenExecution joinedExecution: joinedExecutions) {
- execution.removeExecution(joinedExecution, joinedExecution.getParent());
+ execution.end(joinedExecution);
}
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/FindExecutionsCmd.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/FindExecutionsCmd.java 2008-12-13 11:40:49 UTC (rev 3376)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/FindExecutionsCmd.java 2008-12-13 21:09:18 UTC (rev 3377)
@@ -30,6 +30,7 @@
import org.jbpm.client.ClientExecution;
import org.jbpm.cmd.Command;
import org.jbpm.env.Environment;
+import org.jbpm.model.Node;
import org.jbpm.model.OpenExecution;
import org.jbpm.session.PvmDbSession;
@@ -67,7 +68,10 @@
// initialize node relation. this is necessary for the method
// Execution.getNodeName()
- execution.getNode().getName();
+ Node node = execution.getNode();
+ if (node!=null) {
+ node.getName();
+ }
Collection<OpenExecution> childExecutions = execution.getExecutions();
if (childExecutions!=null) {
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java 2008-12-13 11:40:49 UTC (rev 3376)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java 2008-12-13 21:09:18 UTC (rev 3377)
@@ -270,7 +270,6 @@
getParent().setPreviousNode(getPreviousNode());
end();
- parent.removeExecution(this);
return parent;
}
@@ -320,10 +319,14 @@
}
}
- lock(state);
+ setState(state);
this.propagation = Propagation.EXPLICIT;
- if (parent==null) {
+
+ if (parent!=null) {
+ parent.removeExecution(this);
+
+ } else { // this is a process instance
fire(Event.PROCESS_END, processDefinition);
if (superProcessExecution!=null) {
log.trace(toString()+" signals super process execution");
@@ -515,12 +518,11 @@
}
}
- public void move(Node destination, Execution execution) {
- ((ExecutionImpl)execution).move(destination);
+ public void setNode(Node destination, Execution execution) {
+ ((ExecutionImpl)execution).setNode(destination);
}
- public void move(Node destination) {
- checkLock();
+ public void setNode(Node destination) {
setNode((NodeImpl) destination);
}
@@ -986,6 +988,10 @@
}
// getters and setters /////////////////////////////////////////////////////////
+
+ public boolean isProcessInstance() {
+ return parent==null;
+ }
public List<Comment> getComments() {
if (comments==null) {
Modified: jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/api/basicfeatures/ScopeVariableDeclarationTest.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/api/basicfeatures/ScopeVariableDeclarationTest.java 2008-12-13 11:40:49 UTC (rev 3376)
+++ jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/api/basicfeatures/ScopeVariableDeclarationTest.java 2008-12-13 21:09:18 UTC (rev 3377)
@@ -37,8 +37,7 @@
/**
* @author Tom Baeyens
*/
-public class ScopeVariableDeclarationTest extends JbpmTestCase
-{
+public class ScopeVariableDeclarationTest extends JbpmTestCase {
public static class WaitState implements ExternalActivity {
private static final long serialVersionUID = 1L;
Modified: jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/api/basicfeatures/TransitionBasedConcurrencyTest.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/api/basicfeatures/TransitionBasedConcurrencyTest.java 2008-12-13 11:40:49 UTC (rev 3376)
+++ jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/api/basicfeatures/TransitionBasedConcurrencyTest.java 2008-12-13 21:09:18 UTC (rev 3377)
@@ -23,12 +23,13 @@
*
* @author Tom Baeyens
*/
-public class TransitionBasedConcurrencyTest extends JbpmTestCase
-{
+public class TransitionBasedConcurrencyTest extends JbpmTestCase {
public static class Fork implements Activity {
private static final long serialVersionUID = 1L;
public void execute(ActivityExecution execution) {
+ OpenExecution processInstance = execution.getProcessInstance();
+
Node node = execution.getNode();
List<Transition> outgoingTransitions = node.getOutgoingTransitions();
@@ -37,9 +38,14 @@
// launch a concurrent path of execution
String childExecutionName = outgoingTransition.getName();
// creating the execution will cause the execution to become inactive
- Execution childExecution = execution.createExecution(childExecutionName);
+ Execution childExecution = execution.createExecution(childExecutionName, processInstance);
execution.take(outgoingTransition, childExecution);
}
+
+ // if this was the first fork
+ if (execution.isProcessInstance()) {
+ execution.setNode(null);
+ }
}
}
@@ -48,13 +54,15 @@
public void execute(ActivityExecution execution) throws Exception {
// end the child execution execution
// this will also remove the execution from it's parent
- execution.end();
+ execution.setState(Execution.STATE_INACTIVE);
+ execution.waitForSignal();
Node join = execution.getNode();
List<OpenExecution> joinedExecutions = findJoinedExecutions(execution, join);
if (isComplete(joinedExecutions, join)) {
- remove(joinedExecutions, execution);
+ endJoinedExecutions(joinedExecutions, execution);
+
OpenExecution processInstance = execution.getProcessInstance();
Execution outgoingExecution = null;
@@ -66,7 +74,7 @@
outgoingExecution = execution.createExecution(processInstance);
}
- execution.move(join, outgoingExecution);
+ execution.setNode(join, outgoingExecution);
Transition transition = join.getDefaultTransition();
execution.take(transition, outgoingExecution);
}
@@ -96,9 +104,9 @@
return (executionsToJoin==joinedExecutions.size());
}
- void remove(List<OpenExecution> joinedExecutions, ActivityExecution execution) {
+ void endJoinedExecutions(List<OpenExecution> joinedExecutions, ActivityExecution execution) {
for (OpenExecution joinedExecution: joinedExecutions) {
- execution.removeExecution(joinedExecution, joinedExecution.getParent());
+ execution.end(joinedExecution);
}
}
}
@@ -130,7 +138,7 @@
ClientExecution main = processDefinition.startProcessInstance();
- assertEquals("fork", main.getNode().getName());
+ assertNull("fork", main.getNode());
assertEquals(Execution.STATE_INACTIVE, main.getState());
Execution billing = main.getExecution("billing");
@@ -148,12 +156,11 @@
main.signal(billing);
- assertEquals("fork", main.getNodeName());
+ assertNull(main.getNodeName());
assertEquals("join", billing.getNodeName());
- assertTrue(billing.isEnded());
assertEquals("ship", shipping.getNodeName());
- assertFalse(shipping.isEnded());
- assertTrue(billing.isEnded());
+ assertEquals(Execution.STATE_ACTIVE, shipping.getState());
+ assertEquals(Execution.STATE_INACTIVE, billing.getState());
assertEquals(Execution.STATE_INACTIVE, main.getState());
main.signal(shipping);
Modified: jbpm4/trunk/modules/test-base/src/main/java/org/jbpm/test/DbTestCase.java
===================================================================
--- jbpm4/trunk/modules/test-base/src/main/java/org/jbpm/test/DbTestCase.java 2008-12-13 11:40:49 UTC (rev 3376)
+++ jbpm4/trunk/modules/test-base/src/main/java/org/jbpm/test/DbTestCase.java 2008-12-13 21:09:18 UTC (rev 3377)
@@ -23,6 +23,7 @@
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -138,13 +139,28 @@
taskService.saveTask(task);
}
- public Map<String, Execution> getExecutionsNodesMap(List<Execution> executions) {
- Map<String,Execution> executionsMap = new HashMap<String, Execution>();
+ public HashSet<String> getNodeNames(String processInstanceId) {
+ HashSet<String> nodeNames = new HashSet<String>();
+ List<Execution> executions = executionService.findExecutions(processInstanceId);
for (Execution execution: executions) {
- executionsMap.put(execution.getNodeName(), execution);
+ String nodeName = execution.getNodeName();
+ if (nodeName!=null) {
+ nodeNames.add(nodeName);
+ }
}
- return executionsMap;
+ return nodeNames;
}
+
+ public Execution findExecution(String processInstanceId, String nodeName) {
+ List<Execution> executions = executionService.findExecutions(processInstanceId);
+ for (Execution execution: executions) {
+ if (nodeName.equals(execution.getNodeName())) {
+ return execution;
+ }
+ }
+
+ return null;
+ }
}
Modified: jbpm4/trunk/pom.xml
===================================================================
--- jbpm4/trunk/pom.xml 2008-12-13 11:40:49 UTC (rev 3376)
+++ jbpm4/trunk/pom.xml 2008-12-13 21:09:18 UTC (rev 3377)
@@ -33,6 +33,7 @@
<!-- Modules -->
<modules>
<module>modules/api</module>
+ <module>modules/examples</module>
<module>modules/jpdl</module>
<module>modules/log</module>
<module>modules/pvm</module>
@@ -278,7 +279,6 @@
<module>modules/db</module>
<module>modules/devguide</module>
<module>modules/distro</module>
- <module>modules/examples</module>
<module>modules/userguide</module>
</modules>
<build>
More information about the jbpm-commits
mailing list