[jbpm-commits] JBoss JBPM SVN: r1881 - in jbossbpm/spec/trunk/modules: ri/src/main/java/org/jboss/bpm/model/internal and 1 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Wed Aug 13 09:59:53 EDT 2008
Author: thomas.diesler at jboss.com
Date: 2008-08-13 09:59:52 -0400 (Wed, 13 Aug 2008)
New Revision: 1881
Modified:
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/client/internal/ProcessManagerImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/client/internal/RunnableToken.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ExclusiveGatewayImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/FlowObjectImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/GatewayImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ParallelGatewayImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessImpl.java
jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveMergeTest.java
Log:
Add FlowObject.reset()
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/client/internal/ProcessManagerImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/client/internal/ProcessManagerImpl.java 2008-08-13 13:22:03 UTC (rev 1880)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/client/internal/ProcessManagerImpl.java 2008-08-13 13:59:52 UTC (rev 1881)
@@ -29,6 +29,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.jboss.bpm.BPMException;
import org.jboss.bpm.ProcessTimeoutException;
import org.jboss.bpm.client.DialectHandler;
import org.jboss.bpm.client.DialectRegistry;
@@ -69,11 +70,7 @@
public void startProcess(ObjectName procID, Attachments att)
{
- Process proc = getProcessByID(procID);
- if (proc == null)
- throw new IllegalStateException("Cannot obtain process: " + procID);
-
- // Start the process in a thread
+ Process proc = getProcessStrict(procID);
ExecutionManager exm = ExecutionManager.locateExecutionManager();
exm.startProcess(proc, att);
}
@@ -81,7 +78,7 @@
@Override
public ProcessStatus waitForEnd(ObjectName procID, long timeout)
{
- Process proc = getProcessByID(procID);
+ Process proc = getProcessStrict(procID);
ProcessImpl procImpl = (ProcessImpl)proc;
ProcessStatus status = proc.getProcessStatus();
@@ -107,7 +104,7 @@
if (rte == null)
return status;
else
- throw rte;
+ throw new BPMException("Process aborted", rte);
}
Thread.sleep(100);
now = System.currentTimeMillis();
@@ -121,4 +118,12 @@
// Throw timeout exception if it took too long
throw new ProcessTimeoutException("Process timeout for: " + procID);
}
+
+ private Process getProcessStrict(ObjectName procID)
+ {
+ Process proc = getProcessByID(procID);
+ if (proc == null)
+ throw new IllegalStateException("Cannot obtain process: " + procID);
+ return proc;
+ }
}
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/client/internal/RunnableToken.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/client/internal/RunnableToken.java 2008-08-13 13:22:03 UTC (rev 1880)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/client/internal/RunnableToken.java 2008-08-13 13:59:52 UTC (rev 1881)
@@ -91,19 +91,25 @@
// Synchronize execution of the target and the flow handler
synchronized (rtProc)
{
- // Execute the FlowObject
try
{
+ // Execute the FlowObject
signalManager.throwSignal(procImpl.getName(), sigHandler.getEnterSignal());
target.execute(token);
+
+ // Transfer the token to the FlowHandler
+ flowHandler.execute(scheduler, token);
}
+ catch(RuntimeException rte)
+ {
+ target.reset();
+ throw rte;
+ }
finally
{
signalManager.throwSignal(procImpl.getName(), sigHandler.getExitSignal());
}
- // Transfer the token to the FlowHandler
- flowHandler.execute(scheduler, token);
}
tokStatus = token.getTokenStatus();
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ExclusiveGatewayImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ExclusiveGatewayImpl.java 2008-08-13 13:22:03 UTC (rev 1880)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ExclusiveGatewayImpl.java 2008-08-13 13:59:52 UTC (rev 1881)
@@ -120,7 +120,7 @@
// Reset the gateway
if (outstandingFlows.size() == 0)
{
- resetGateway();
+ reset();
}
}
};
@@ -129,9 +129,9 @@
}
@Override
- protected void resetGateway()
+ public void reset()
{
- super.resetGateway();
+ super.reset();
outstandingFlows = null;
}
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/FlowObjectImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/FlowObjectImpl.java 2008-08-13 13:22:03 UTC (rev 1880)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/FlowObjectImpl.java 2008-08-13 13:59:52 UTC (rev 1881)
@@ -109,6 +109,11 @@
{
// noting to do
}
+
+ public void reset()
+ {
+ // noting to do
+ }
@Override
protected void initialize(Process proc)
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/GatewayImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/GatewayImpl.java 2008-08-13 13:22:03 UTC (rev 1880)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/GatewayImpl.java 2008-08-13 13:59:52 UTC (rev 1881)
@@ -133,9 +133,10 @@
receivedTokens.add(token);
}
- // Reset the gateway
- protected void resetGateway()
+ @Override
+ public void reset()
{
+ super.reset();
expectedFlows = null;
receivedTokens = null;
}
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ParallelGatewayImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ParallelGatewayImpl.java 2008-08-13 13:22:03 UTC (rev 1880)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ParallelGatewayImpl.java 2008-08-13 13:59:52 UTC (rev 1881)
@@ -150,7 +150,7 @@
}
// Reset the gateway
- resetGateway();
+ reset();
}
}
};
@@ -159,9 +159,9 @@
}
@Override
- protected void resetGateway()
+ public void reset()
{
- super.resetGateway();
+ super.reset();
outstandingFlows = null;
mergeTokens = null;
}
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessImpl.java 2008-08-13 13:22:03 UTC (rev 1880)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessImpl.java 2008-08-13 13:59:52 UTC (rev 1881)
@@ -33,6 +33,8 @@
import javax.management.ObjectName;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.jboss.bpm.InvalidProcessException;
import org.jboss.bpm.NotImplementedException;
import org.jboss.bpm.client.ProcessManager;
@@ -58,6 +60,9 @@
@SuppressWarnings("serial")
public class ProcessImpl extends SupportingElementImpl implements Process, MutablePropertySupport
{
+ // provide logging
+ private static final Log log = LogFactory.getLog(ProcessImpl.class);
+
// The required process name
private String name;
// The list of associated flow objects
@@ -197,9 +202,12 @@
{
ProcessManager pm = ProcessManager.locateProcessManager();
- if (getProcessStatus() != ProcessStatus.Ready)
- throw new IllegalStateException("Cannot start process in state: " + getProcessStatus());
+ if (status == ProcessStatus.Aborted || status == ProcessStatus.Completed)
+ resetProcess();
+ if (status != ProcessStatus.Ready)
+ throw new IllegalStateException("Cannot start process in state: " + status);
+
// Register the process if needed
if (pm.getProcessByID(getID()) == null)
{
@@ -211,6 +219,18 @@
return getID();
}
+ private void resetProcess()
+ {
+ log.debug("Reset process: " + this);
+ for (FlowObject fo : flowObjects)
+ {
+ FlowObjectImpl foImpl = (FlowObjectImpl)fo;
+ foImpl.reset();
+ }
+ status = ProcessStatus.Ready;
+ runtimeException = null;
+ }
+
public void waitForEnd()
{
ProcessManager pm = ProcessManager.locateProcessManager();
@@ -310,10 +330,11 @@
if (getFlowObjects(EndEvent.class).size() == 0)
throw new InvalidProcessException("Process does not have end events");
- // Set the associated process
- for (FlowObject aux : flowObjects)
+ // Initialize the flow objects
+ for (FlowObject fo : flowObjects)
{
- ((FlowObjectImpl)aux).initialize(this);
+ FlowObjectImpl foImpl = (FlowObjectImpl)fo;
+ foImpl.initialize(this);
}
status = ProcessStatus.Ready;
Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveMergeTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveMergeTest.java 2008-08-13 13:22:03 UTC (rev 1880)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveMergeTest.java 2008-08-13 13:59:52 UTC (rev 1881)
@@ -51,18 +51,18 @@
{
Process proc = getProcess();
proc.startProcess();
-
- // Add a signal listener that sends the other start trigger signal
+
+ // Add a signal listener that sends the other start trigger signal
SignalManager signalManager = SignalManager.locateSignalManager();
Signal startTrigger = new Signal(getName(), SignalType.SYSTEM_START_TRIGGER, "B");
signalManager.addSignalListener(getName(), new MergeListener(getName(), startTrigger));
-
- // Send start trigger signal
+
+ // Send start trigger signal
signalManager.throwSignal(proc.getName(), new Signal(getName(), SignalType.SYSTEM_START_TRIGGER, "A"));
-
+
// Wait for the process to end
proc.waitForEnd();
-
+
// Verify the result
assertEquals("TaskA", TaskC.taskValue);
}
@@ -71,22 +71,62 @@
{
Process proc = getProcess();
proc.startProcess();
-
- // Add a signal listener that sends the other start trigger signal
+
+ // Add a signal listener that sends the other start trigger signal
SignalManager signalManager = SignalManager.locateSignalManager();
Signal startTrigger = new Signal(getName(), SignalType.SYSTEM_START_TRIGGER, "A");
signalManager.addSignalListener(getName(), new MergeListener(getName(), startTrigger));
-
- // Send start trigger signal
+
+ // Send start trigger signal
signalManager.throwSignal(proc.getName(), new Signal(getName(), SignalType.SYSTEM_START_TRIGGER, "B"));
-
+
// Wait for the process to end
proc.waitForEnd();
-
+
// Verify the result
assertEquals("TaskB", TaskC.taskValue);
}
+ public void testInvalidToken() throws Exception
+ {
+ Process proc = getProcess();
+ proc.startProcess();
+
+ // Add a signal listener that sends the other start trigger signal
+ SignalManager signalManager = SignalManager.locateSignalManager();
+ Signal startTrigger = new Signal(getName(), SignalType.SYSTEM_START_TRIGGER, "A");
+ signalManager.addSignalListener(getName(), new MergeListener(getName(), startTrigger));
+
+ // Send start trigger signal
+ signalManager.throwSignal(proc.getName(), new Signal(getName(), SignalType.SYSTEM_START_TRIGGER, "A"));
+
+ try
+ {
+ proc.waitForEnd();
+ fail("Expected: Unexpected token from: SequenceFlow[TaskA->Merge]");
+ }
+ catch (RuntimeException rte)
+ {
+ // expected
+ }
+
+ // Restart the process
+ proc.startProcess();
+
+ // Add a signal listener that sends the other start trigger signal
+ startTrigger = new Signal(getName(), SignalType.SYSTEM_START_TRIGGER, "B");
+ signalManager.addSignalListener(getName(), new MergeListener(getName(), startTrigger));
+
+ // Send start trigger signal
+ signalManager.throwSignal(proc.getName(), new Signal(getName(), SignalType.SYSTEM_START_TRIGGER, "A"));
+
+ // Wait for the process to end
+ proc.waitForEnd();
+
+ // Verify the result
+ assertEquals("TaskA", TaskC.taskValue);
+ }
+
private Process getProcess()
{
ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
@@ -107,7 +147,7 @@
{
private String fromRef;
private Signal nextSignal;
-
+
public MergeListener(String fromRef, Signal nextSignal)
{
this.fromRef = fromRef;
@@ -127,7 +167,7 @@
}
}
}
-
+
@SuppressWarnings("serial")
public static class TaskA implements ExecutionHandler
{
@@ -137,7 +177,7 @@
exContext.addAttachment("taskValue", "TaskA");
}
}
-
+
@SuppressWarnings("serial")
public static class TaskB implements ExecutionHandler
{
@@ -147,11 +187,12 @@
exContext.addAttachment("taskValue", "TaskB");
}
}
-
+
@SuppressWarnings("serial")
public static class TaskC implements ExecutionHandler
{
public static Object taskValue;
+
public void execute(Token token)
{
ExecutionContext exContext = token.getExecutionContext();
More information about the jbpm-commits
mailing list