[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