[jbpm-commits] JBoss JBPM SVN: r1608 - in api/trunk/modules: api/src/main/java/org/jboss/bpm/model and 5 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Sun Jul 13 12:37:22 EDT 2008


Author: thomas.diesler at jboss.com
Date: 2008-07-13 12:37:21 -0400 (Sun, 13 Jul 2008)
New Revision: 1608

Added:
   api/trunk/modules/api/src/test/java/org/jboss/bpm/pattern/parallelsplit/
   api/trunk/modules/api/src/test/java/org/jboss/bpm/pattern/parallelsplit/ParallelSplitTest.java
   api/trunk/modules/testsuite/src/test/resources/jbpm-beans.xml
Modified:
   api/trunk/modules/api/src/main/java/org/jboss/bpm/client/SignalManager.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/EndEvent.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Gateway.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ItermediateEvent.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ParallelGateway.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Process.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Signal.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/StartEvent.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/SubProcess.java
   api/trunk/modules/api/src/test/java/org/jboss/bpm/pattern/sequence/SequenceTest.java
   api/trunk/modules/testsuite/pom.xml
Log:
Add ParallelSplit

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/client/SignalManager.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/client/SignalManager.java	2008-07-13 15:46:45 UTC (rev 1607)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/client/SignalManager.java	2008-07-13 16:37:21 UTC (rev 1608)
@@ -109,7 +109,7 @@
   public void throwSignal(Signal signal)
   {
     log.debug("throwSignal: " + signal);
-    String procName = signal.getProcess().getName();
+    String procName = signal.getProcessName();
     Set<SignalListener> set = listeners.get(procName);
     if (set != null)
     {

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/EndEvent.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/EndEvent.java	2008-07-13 15:46:45 UTC (rev 1607)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/EndEvent.java	2008-07-13 16:37:21 UTC (rev 1608)
@@ -108,16 +108,17 @@
 
   public SignalHandler getDefaultSignalHandler()
   {
+    final FlowObject end = this;
     return new SignalHandler()
     {
       public Signal getEnterSignal()
       {
-        return new Signal(getProcess(), Signal.Type.ENTER_END_EVENT);
+        return new Signal(end, Signal.Type.ENTER_END_EVENT);
       }
 
       public Signal getExitSignal()
       {
-        return new Signal(getProcess(), Signal.Type.EXIT_END_EVENT);
+        return new Signal(end, Signal.Type.EXIT_END_EVENT);
       }
     };
   }

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Gateway.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Gateway.java	2008-07-13 15:46:45 UTC (rev 1607)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Gateway.java	2008-07-13 16:37:21 UTC (rev 1608)
@@ -35,32 +35,30 @@
 import org.jboss.bpm.runtime.Token;
 
 /**
- * Gateways are modelling elements that are used to control how Sequence Flow interact as they converge and diverge within a Process. 
- * If the flow does not need to be controlled, then a Gateway is not needed. 
+ * Gateways are modelling elements that are used to control how Sequence Flow interact as they converge and diverge within a Process. If the flow does not need to be
+ * controlled, then a Gateway is not needed.
  * 
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
- at XmlType(name="Gateway")
+ at XmlType(name = "Gateway")
 public abstract class Gateway extends AbstractGateway implements NamedFlowObject, Executable
 {
   // provide logging
   private static final Log log = LogFactory.getLog(Gateway.class);
-  
+
   @XmlTransient
   protected List<Flow> inFlows = new ArrayList<Flow>();
-  
+
   /**
-   * Construct an anonymous Gateway
-   * Note, this MUST NOT leak into the public API.
+   * Construct an anonymous Gateway Note, this MUST NOT leak into the public API.
    */
   protected Gateway()
   {
   }
 
   /**
-   * Construct a Gateway with a given name
-   * Note, this MUST NOT leak into the public API.
+   * Construct a Gateway with a given name Note, this MUST NOT leak into the public API.
    */
   protected Gateway(String name)
   {
@@ -71,7 +69,7 @@
   {
     outFlows.add(flow);
   }
-  
+
   public List<Flow> getInFlows()
   {
     return Collections.unmodifiableList(inFlows);
@@ -81,7 +79,7 @@
   {
     this.inFlows.add(inFlow);
   }
-  
+
   @XmlTransient
   public FlowHandler getDefaultFlowHandler()
   {
@@ -99,16 +97,17 @@
 
   public SignalHandler getDefaultSignalHandler()
   {
+    final FlowObject gateway = this;
     return new SignalHandler()
     {
       public Signal getEnterSignal()
       {
-        return new Signal(getProcess(), Signal.Type.ENTER_GATEWAY);
+        return new Signal(gateway, Signal.Type.ENTER_GATEWAY);
       }
 
       public Signal getExitSignal()
       {
-        return new Signal(getProcess(), Signal.Type.EXIT_GATEWAY);
+        return new Signal(gateway, Signal.Type.EXIT_GATEWAY);
       }
     };
   }
@@ -125,4 +124,4 @@
       }
     };
   }
-  }
\ No newline at end of file
+}
\ No newline at end of file

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ItermediateEvent.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ItermediateEvent.java	2008-07-13 15:46:45 UTC (rev 1607)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ItermediateEvent.java	2008-07-13 16:37:21 UTC (rev 1608)
@@ -103,16 +103,17 @@
 
   public SignalHandler getDefaultSignalHandler()
   {
+    final FlowObject event = this;
     return new SignalHandler()
     {
       public Signal getEnterSignal()
       {
-        return new Signal(getProcess(), Signal.Type.ENTER_EVENT);
+        return new Signal(event, Signal.Type.ENTER_EVENT);
       }
 
       public Signal getExitSignal()
       {
-        return new Signal(getProcess(), Signal.Type.EXIT_EVENT);
+        return new Signal(event, Signal.Type.EXIT_EVENT);
       }
     };
   }

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ParallelGateway.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ParallelGateway.java	2008-07-13 15:46:45 UTC (rev 1607)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ParallelGateway.java	2008-07-13 16:37:21 UTC (rev 1608)
@@ -23,7 +23,9 @@
 
 import javax.xml.bind.annotation.XmlType;
 
+import org.jboss.bpm.runtime.Token;
 
+
 // $Id$
 
 /**
@@ -52,6 +54,23 @@
     super(name);
   }
   
+  /**
+   * The DefaultFlowHandler adds all out flows to the queue
+   */
+  @Override
+  public FlowHandler getDefaultFlowHandler()
+  {
+    return new FlowHandler()
+    {
+      @Override
+      public void transfer(Token token)
+      {
+        for(Flow outFlow : getOutFlows())
+          token.addTailFlow(outFlow);
+      }
+    };
+  }
+
   public String toString()
   {
     return "ParallelGateway[" + getName() + "]";

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Process.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Process.java	2008-07-13 15:46:45 UTC (rev 1607)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Process.java	2008-07-13 16:37:21 UTC (rev 1608)
@@ -59,6 +59,7 @@
    */
   protected Process()
   {
+    setProcess(this);
   }
 
   /**
@@ -68,6 +69,7 @@
   protected Process(String name)
   {
     super(name);
+    setProcess(this);
   }
 
   /**
@@ -200,4 +202,9 @@
 
     processState = ProcessState.INITIALIZED;
   }
+
+  public String toString()
+  {
+    return "Process[" + getName() + "]";
+  }
 }
\ No newline at end of file

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Signal.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Signal.java	2008-07-13 15:46:45 UTC (rev 1607)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Signal.java	2008-07-13 16:37:21 UTC (rev 1608)
@@ -51,30 +51,31 @@
     USER_SIGNAL
   }
 
-  private Process proc;
   private Type type;
+  private FlowObject flowObject;
   private String message;
 
   /** Create the signal for a given process */
-  public Signal(Process proc, Type type)
+  public Signal(FlowObject flowObject, Type type)
   {
-    this.proc = proc;
+    this.flowObject = flowObject;
     this.type = type;
+    validateSignal();
   }
 
   /** Create the signal for a given process */
-  public Signal(Process proc, Type type, String message)
+  public Signal(FlowObject flowObject, Type type, String message)
   {
-    this.proc = proc;
+    this.flowObject = flowObject;
     this.type = type;
     this.message = message;
-    
+    validateSignal();
   }
 
-  /** Get the proccess */
-  public Process getProcess()
+  /** Get the proccess name */
+  public String getProcessName()
   {
-    return proc;
+    return flowObject.getProcess().getName();
   }
 
   public Type getType()
@@ -82,14 +83,31 @@
     return type;
   }
 
+  public String getSource()
+  {
+    return flowObject.toString();
+  }
+
   public String getMessage()
   {
     return message;
   }
 
+  private void validateSignal()
+  {
+    if (flowObject == null)
+      throw new IllegalArgumentException("FlowObject cannot be null");
+    if (type == null)
+      throw new IllegalArgumentException("SignalType cannot be null");
+  }
+
   public String toString()
   {
-    StringBuilder string = new StringBuilder(type + "[" + proc.getName());
+    StringBuilder string = new StringBuilder(type + "[" + getProcessName());
+    if (flowObject instanceof Process == false)
+    {
+      string.append(":" + flowObject);
+    }
     if (message != null)
     {
       string.append(":" + message);

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/StartEvent.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/StartEvent.java	2008-07-13 15:46:45 UTC (rev 1607)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/StartEvent.java	2008-07-13 16:37:21 UTC (rev 1608)
@@ -68,16 +68,17 @@
 
   public SignalHandler getDefaultSignalHandler()
   {
+    final FlowObject start = this;
     return new SignalHandler()
     {
       public Signal getEnterSignal()
       {
-        return new Signal(getProcess(), Signal.Type.ENTER_START_EVENT);
+        return new Signal(start, Signal.Type.ENTER_START_EVENT);
       }
 
       public Signal getExitSignal()
       {
-        return new Signal(getProcess(), Signal.Type.EXIT_START_EVENT);
+        return new Signal(start, Signal.Type.EXIT_START_EVENT);
       }
     };
   }

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/SubProcess.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/SubProcess.java	2008-07-13 15:46:45 UTC (rev 1607)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/SubProcess.java	2008-07-13 16:37:21 UTC (rev 1608)
@@ -88,16 +88,17 @@
 
   public SignalHandler getDefaultSignalHandler()
   {
+    final FlowObject subproc = this;
     return new SignalHandler()
     {
       public Signal getEnterSignal()
       {
-        return new Signal(getProcess(), Signal.Type.ENTER_SUB_PROCESS);
+        return new Signal(subproc, Signal.Type.ENTER_SUB_PROCESS);
       }
 
       public Signal getExitSignal()
       {
-        return new Signal(getProcess(), Signal.Type.EXIT_SUB_PROCESS);
+        return new Signal(subproc, Signal.Type.EXIT_SUB_PROCESS);
       }
     };
   }

Added: api/trunk/modules/api/src/test/java/org/jboss/bpm/pattern/parallelsplit/ParallelSplitTest.java
===================================================================
--- api/trunk/modules/api/src/test/java/org/jboss/bpm/pattern/parallelsplit/ParallelSplitTest.java	                        (rev 0)
+++ api/trunk/modules/api/src/test/java/org/jboss/bpm/pattern/parallelsplit/ParallelSplitTest.java	2008-07-13 16:37:21 UTC (rev 1608)
@@ -0,0 +1,90 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.bpm.pattern.parallelsplit;
+
+// $Id$
+
+import java.util.List;
+import java.util.concurrent.Future;
+
+import org.jboss.bpm.MockEngineTestCase;
+import org.jboss.bpm.client.ProcessManager;
+import org.jboss.bpm.client.SignalManager;
+import org.jboss.bpm.model.Process;
+import org.jboss.bpm.model.ProcessBuilder;
+import org.jboss.bpm.model.Result;
+import org.jboss.bpm.model.Signal;
+
+/**
+ * A point in the workflow process where a single thread of control splits 
+ * into multiple threads of control which can be executed in parallel, 
+ * thus allowing activities to be executed simultaneously or in any order. 
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 03-Jul-2008
+ */
+public class ParallelSplitTest extends MockEngineTestCase
+{
+  @Override
+  protected void setUp() throws Exception
+  {
+    super.setUp();
+    SignalManager em = SignalManager.locateSignalManager();
+    em.addListener(getName(), this);
+  }
+
+  /**
+   * The ParallelGateway uses non threaded SequenceFlows 
+   */
+  public void testNonThreadedSplit() throws Exception 
+  {
+    Process proc = new ProcessBuilder(getName()).addStartEvent().addSequenceFlow("gateway").addParallelGateway("gateway").
+    addSequenceFlow("endA").addSequenceFlow("endB").addEndEvent("endA").addEndEvent("endB").getProcess();
+    
+    // Create a Process through the ProcessManager
+    ProcessManager pm = ProcessManager.locateProcessManager();
+    pm.registerProcess(proc);
+    
+    // Start the Process
+    Future<Result> end = proc.startProcess();
+    Result result = end.get();
+    
+    // Validate the Result
+    assertNotNull("Result expected", result);
+    assertEquals("No attachments expected", 0, result.getAttachments().getAttachmentKeys().size());
+    
+    // Validate received signals
+    List<Signal> signals = getSignals();
+    assertEquals(Signal.Type.ENTER_PROCESS, signals.get(0).getType());
+    assertEquals(Signal.Type.ENTER_START_EVENT, signals.get(1).getType());
+    assertEquals(Signal.Type.EXIT_START_EVENT, signals.get(2).getType());
+    assertEquals(Signal.Type.ENTER_GATEWAY, signals.get(3).getType());
+    assertEquals(Signal.Type.EXIT_GATEWAY, signals.get(4).getType());
+    assertEquals(Signal.Type.ENTER_END_EVENT, signals.get(5).getType());
+    assertEquals("EndEvent[endA]", signals.get(5).getSource());
+    assertEquals(Signal.Type.EXIT_END_EVENT, signals.get(6).getType());
+    assertEquals(Signal.Type.ENTER_END_EVENT, signals.get(7).getType());
+    assertEquals("EndEvent[endB]", signals.get(7).getSource());
+    assertEquals(Signal.Type.EXIT_END_EVENT, signals.get(8).getType());
+    assertEquals(Signal.Type.EXIT_PROCESS, signals.get(9).getType());
+  }
+}


Property changes on: api/trunk/modules/api/src/test/java/org/jboss/bpm/pattern/parallelsplit/ParallelSplitTest.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: api/trunk/modules/api/src/test/java/org/jboss/bpm/pattern/sequence/SequenceTest.java
===================================================================
--- api/trunk/modules/api/src/test/java/org/jboss/bpm/pattern/sequence/SequenceTest.java	2008-07-13 15:46:45 UTC (rev 1607)
+++ api/trunk/modules/api/src/test/java/org/jboss/bpm/pattern/sequence/SequenceTest.java	2008-07-13 16:37:21 UTC (rev 1608)
@@ -35,7 +35,8 @@
 import org.jboss.bpm.model.Signal;
 
 /**
- * Test the basic sequence
+ * An activity in a workflow process is enabled after the completion 
+ * of another activity in the same process. 
  * 
  * @author thomas.diesler at jboss.com
  * @since 03-Jul-2008
@@ -53,7 +54,7 @@
   /**
    * Test a basic sequence
    */
-  public void testBasicSequence() throws Exception 
+  public void testSequence() throws Exception 
   {
     Process proc = new ProcessBuilder(getName()).addStartEvent().addSequenceFlow("task").addTask("task").
     addSequenceFlow("end").addEndEvent("end").getProcess();

Modified: api/trunk/modules/testsuite/pom.xml
===================================================================
--- api/trunk/modules/testsuite/pom.xml	2008-07-13 15:46:45 UTC (rev 1607)
+++ api/trunk/modules/testsuite/pom.xml	2008-07-13 16:37:21 UTC (rev 1608)
@@ -110,46 +110,5 @@
 
   <!-- Profiles -->
   <profiles>
-    <!--
-      Name: jbpm3
-      Desc: Execute tests against jBPM3 integration 
-    -->
-    <profile>
-      <id>jbpm3</id>
-      <dependencies>
-        <dependency>
-          <groupId>org.jboss.jbpm</groupId>
-          <artifactId>jbpm-jpdl-core</artifactId>
-          <version>${jboss.jbpm3.version}</version>
-          <scope>test</scope>
-        </dependency>
-        <dependency>
-          <groupId>org.jboss.jbpm</groupId>
-          <artifactId>jbpm-jpdl-core</artifactId>
-          <version>${jboss.jbpm3.version}</version>
-          <classifier>config</classifier>
-          <scope>test</scope>
-        </dependency>
-      </dependencies>
-      <build>
-        <plugins>
-          <plugin>
-            <artifactId>maven-surefire-plugin</artifactId>
-            <configuration>
-              <systemProperties>
-                <property>
-                  <name>jbpm.dialect</name>
-                  <value>jbpm32</value>
-                </property>
-                <property>
-                  <name>log4j.output.dir</name>
-                  <value>${project.build.directory}</value>
-                </property>
-              </systemProperties>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
   </profiles>
 </project>
\ No newline at end of file

Added: api/trunk/modules/testsuite/src/test/resources/jbpm-beans.xml
===================================================================
--- api/trunk/modules/testsuite/src/test/resources/jbpm-beans.xml	                        (rev 0)
+++ api/trunk/modules/testsuite/src/test/resources/jbpm-beans.xml	2008-07-13 16:37:21 UTC (rev 1608)
@@ -0,0 +1,28 @@
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+ 
+  <!-- The Kernel Locator -->
+  <bean name="KernelLocator" class="org.jboss.kernel.plugins.util.KernelLocator"/>
+  
+  <!-- The process engine -->
+  <bean name="jBPMProcessEngine" class="org.jboss.bpm.client.internal.ProcessEngineImpl">
+    <property name="processManager"><inject bean="jBPMProcessManager"/></property>
+    <property name="executionManager"><inject bean="jBPMExecutionManager"/></property>
+    <property name="signalManager"><inject bean="jBPMSignalManager"/></property>
+  </bean>
+
+  <!-- The process manager -->
+  <bean name="jBPMProcessManager" class="org.jboss.bpm.client.internal.ProcessManagerImpl">
+    <property name="processEngine"><inject bean="jBPMProcessEngine" state="Instantiated"/></property>
+  </bean>
+
+  <!-- The execution manager -->
+  <bean name="jBPMExecutionManager" class="org.jboss.bpm.client.internal.ExecutionManagerImpl">
+    <property name="processEngine"><inject bean="jBPMProcessEngine" state="Instantiated"/></property>
+  </bean>
+
+  <!-- The execution manager -->
+  <bean name="jBPMSignalManager" class="org.jboss.bpm.client.internal.SignalManagerImpl">
+    <property name="processEngine"><inject bean="jBPMProcessEngine" state="Instantiated"/></property>
+  </bean>
+  
+</deployment>
\ No newline at end of file


Property changes on: api/trunk/modules/testsuite/src/test/resources/jbpm-beans.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF




More information about the jbpm-commits mailing list