[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