[jbpm-commits] JBoss JBPM SVN: r1946 - in jbossbpm/spec/trunk/modules: dialects/api10/src/test/resources/include and 5 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Wed Aug 20 18:09:13 EDT 2008
Author: thomas.diesler at jboss.com
Date: 2008-08-20 18:09:12 -0400 (Wed, 20 Aug 2008)
New Revision: 1946
Modified:
jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/client/ProcessManager.java
jbossbpm/spec/trunk/modules/dialects/api10/src/test/resources/include/proc-api10.xml
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/client/ExecutionManagerImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ProcessImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/RuntimeProcessImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/SequenceFlowImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/TokenExecutorImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/runtime/TokenImpl.java
jbossbpm/spec/trunk/modules/ri/src/test/java/org/jboss/bpm/runtime/ExecutionManagerTest.java
jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/engine/EngineShutdownTest.java
Log:
Fix sync issues
Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/client/ProcessManager.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/client/ProcessManager.java 2008-08-20 19:39:22 UTC (rev 1945)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/client/ProcessManager.java 2008-08-20 22:09:12 UTC (rev 1946)
@@ -41,7 +41,6 @@
import org.apache.commons.logging.LogFactory;
import org.jboss.bpm.EngineShutdownException;
import org.jboss.bpm.model.Process;
-import org.jboss.bpm.runtime.Attachments;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -157,31 +156,6 @@
procs.remove(proc.getID());
}
- /**
- * Start a Process with a given process id.
- */
- public void startProcess(ObjectName procID, Attachments att)
- {
- if (ProcessEngine.locateProcessEngine().isPrepareForShutdown())
- throw new EngineShutdownException("Cannot start a process while engine is shutting down");
-
- Process proc = getProcessStrict(procID);
- ExecutionManager exm = ExecutionManager.locateExecutionManager();
- exm.startProcess(proc, att);
- }
-
- private Process getProcessStrict(ObjectName procID)
- {
- Process proc = getProcessByID(procID);
- if (proc == null)
- {
- IllegalStateException rte = new IllegalStateException("Cannot obtain process: " + procID);
- log.error(rte);
- throw rte;
- }
- return proc;
- }
-
private String getNamespaceURI(InputStream inStream)
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
Modified: jbossbpm/spec/trunk/modules/dialects/api10/src/test/resources/include/proc-api10.xml
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/test/resources/include/proc-api10.xml 2008-08-20 19:39:22 UTC (rev 1945)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/test/resources/include/proc-api10.xml 2008-08-20 22:09:12 UTC (rev 1946)
@@ -1,4 +1,4 @@
-<ns2:process name="testReceiveTaskWithMessageRef" xmlns:ns2="urn:bpm.jboss:pdl-0.1">
+<ns2:process name="ProcessIncludeTest" xmlns:ns2="urn:bpm.jboss:pdl-0.1">
<include namespace="urn:bpm.jboss:pdl-0.1" location="include/proc-include-api10.xml"/>
<start>
<seqflow to="A" />
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/client/ExecutionManagerImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/client/ExecutionManagerImpl.java 2008-08-20 19:39:22 UTC (rev 1945)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/client/ExecutionManagerImpl.java 2008-08-20 22:09:12 UTC (rev 1946)
@@ -48,7 +48,6 @@
import org.jboss.bpm.ri.model.impl.ProcessImpl;
import org.jboss.bpm.ri.model.impl.RuntimeProcessImpl;
import org.jboss.bpm.ri.model.impl.SequenceFlowImpl;
-import org.jboss.bpm.ri.model.impl.TokenExecutorImpl;
import org.jboss.bpm.ri.runtime.DelegatingToken;
import org.jboss.bpm.ri.runtime.MutableToken;
import org.jboss.bpm.ri.runtime.RuntimeProcess;
@@ -77,7 +76,9 @@
{
// Get the None Start Event if there is one and start the initial flow
StartEvent start = getNoneStartEvent(proc);
- if (start != null)
+ if (start == null)
+ startProcessPrepare(proc);
+ else
startProcessInternal(start, att);
}
@@ -100,27 +101,21 @@
}
Process proc = start.getProcess();
- ProcessImpl procImpl = (ProcessImpl)proc;
RuntimeProcess rtProc = getRuntimeProcess(proc, false);
boolean startProcessThread = (rtProc == null);
+
+ // Prepare for start
+ startProcessPrepare(proc);
- // Reset the process if already terminated
- if (isProcessTerminated(proc))
- procImpl.resetProcess();
+ // Create initial Token
+ TokenImpl initialToken = new TokenImpl(att);
+ InitialFlow initialFlow = new InitialFlow(start);
+ initialToken.setFlow(initialFlow);
- ProcessStatus procStatus = proc.getProcessStatus();
- if (procStatus != ProcessStatus.Ready)
- throw new IllegalStateException("Cannot start process in state: " + procStatus);
-
- // Register the process if needed
- ProcessManager pm = ProcessManager.locateProcessManager();
- if (pm.getProcessByID(proc.getID()) == null)
- pm.registerProcess(proc);
-
+ // Register the initial Token
rtProc = getRuntimeProcess(proc, true);
TokenExecutor tokenExecutor = rtProc.getTokenExecutor();
- TokenImpl initialToken = new TokenImpl(att);
- tokenExecutor.create(initialToken, new InitialFlow(start));
+ tokenExecutor.create(initialToken, initialFlow);
// Start a new process thread
if (startProcessThread)
@@ -152,6 +147,23 @@
tokenExecutor.start(initialToken);
}
+ private void startProcessPrepare(Process proc)
+ {
+ // Reset the process if already terminated
+ ProcessImpl procImpl = (ProcessImpl)proc;
+ if (isProcessTerminated(proc))
+ procImpl.resetProcess();
+
+ ProcessStatus procStatus = proc.getProcessStatus();
+ if (procStatus != ProcessStatus.Ready && procStatus != ProcessStatus.Active)
+ throw new IllegalStateException("Cannot start process in state: " + procStatus);
+
+ // Register the process if needed
+ ProcessManager pm = ProcessManager.locateProcessManager();
+ if (pm.getProcessByID(proc.getID()) == null)
+ pm.registerProcess(proc);
+ }
+
public ProcessStatus waitForEnd(Process proc)
{
return waitForEndInternal(proc, 0);
@@ -219,6 +231,16 @@
{
log.warn(ex);
}
+ finally
+ {
+ // Unregister the process if not done already
+ // this could happen when the Process never received a start signal
+ // and then we get here because of a ProcessTimeoutException
+ ProcessManager procManager = ProcessManager.locateProcessManager();
+ if (procManager.getProcessByID(proc.getID()) != null)
+ procManager.unregisterProcess(proc);
+ }
+
status = proc.getProcessStatus();
return status;
@@ -253,8 +275,7 @@
rtProcess = runtimeProcesses.get(proc.getID());
if (rtProcess == null && createNew)
{
- TokenExecutorImpl tokenExecutor = new TokenExecutorImpl();
- rtProcess = new RuntimeProcessImpl(proc, tokenExecutor);
+ rtProcess = new RuntimeProcessImpl(proc);
runtimeProcesses.put(proc.getID(), rtProcess);
}
}
@@ -333,7 +354,9 @@
}
log.debug("End execution thread [proc=" + procName + ",status=" + proc.getProcessStatus() + "]");
- procImpl.setProcessStatus(ProcessStatus.Completed);
+
+ if (proc.getProcessStatus() == ProcessStatus.Active)
+ procImpl.setProcessStatus(ProcessStatus.Completed);
}
}
finally
@@ -342,13 +365,13 @@
synchronized (proc)
{
+ ProcessManager procManager = ProcessManager.locateProcessManager();
+ procManager.unregisterProcess(proc);
+ runtimeProcesses.remove(procID);
+
// Notify that the process has now ended
log.debug("Notify: " + proc);
proc.notifyAll();
-
- ProcessManager procManager = ProcessManager.locateProcessManager();
- procManager.unregisterProcess(proc);
- runtimeProcesses.remove(procID);
}
}
}
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ProcessImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ProcessImpl.java 2008-08-20 19:39:22 UTC (rev 1945)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ProcessImpl.java 2008-08-20 22:09:12 UTC (rev 1946)
@@ -31,10 +31,9 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.jboss.bpm.BPMException;
import org.jboss.bpm.InvalidProcessException;
import org.jboss.bpm.NotImplementedException;
-import org.jboss.bpm.ProcessTimeoutException;
+import org.jboss.bpm.client.ExecutionManager;
import org.jboss.bpm.client.ProcessManager;
import org.jboss.bpm.model.Assignment;
import org.jboss.bpm.model.Constants;
@@ -48,7 +47,6 @@
import org.jboss.bpm.model.Process;
import org.jboss.bpm.model.Property;
import org.jboss.bpm.model.StartEvent;
-import org.jboss.bpm.ri.client.ProcessManagerImpl;
import org.jboss.bpm.runtime.Attachments;
import org.jboss.util.id.UID;
@@ -199,30 +197,21 @@
public ObjectName startProcess()
{
- return startProcess(null);
+ return startProcessInternal(null);
}
public ObjectName startProcess(Attachments att)
{
- ProcessManager pm = ProcessManager.locateProcessManager();
+ return startProcessInternal(att);
+ }
- 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)
- {
- ProcessManagerImpl pmImpl = (ProcessManagerImpl)pm;
- pmImpl.registerProcess(this);
- }
-
- pm.startProcess(getID(), att);
+ private ObjectName startProcessInternal(Attachments att)
+ {
+ ExecutionManager em = ExecutionManager.locateExecutionManager();
+ em.startProcess(this, att);
return getID();
}
-
+
public void resetProcess()
{
log.debug("Reset process: " + this);
@@ -252,69 +241,10 @@
*/
private ProcessStatus waitForEndInternal(long timeout)
{
- if (status != ProcessStatus.Ready && status != ProcessStatus.Active)
- throw new IllegalStateException("Cannot wait for process in state: " + status);
-
- // Wait a little for the process to end
- boolean forever = (timeout < 1);
- long now = System.currentTimeMillis();
- long until = now + timeout;
- try
- {
- while (forever || now < until)
- {
- synchronized (this)
- {
- if (isProcessTerminated())
- {
- if (runtimeException != null)
- {
- throw new BPMException("Process aborted", runtimeException);
- }
- else
- {
- break;
- }
- }
-
- // Start waiting to get notified
- long waitTimeout = forever ? 0 : until - now;
- log.debug("Start Waiting: " + waitTimeout + "ms");
- wait(waitTimeout);
- log.debug("Stop Waiting");
- }
- now = System.currentTimeMillis();
- }
-
- // Throw timeout exception if it took too long
- if (isProcessTerminated() == false)
- {
- RuntimeException rte = new ProcessTimeoutException("Process timeout after " + timeout + "ms for: " + getID());
- setRuntimeException(rte);
- log.error(rte);
- throw rte;
- }
- }
- catch (InterruptedException ex)
- {
- log.warn(ex);
- }
- finally
- {
- // Unregister the process
- ProcessManager procManager = ProcessManager.locateProcessManager();
- if (procManager.getProcessByID(getID()) != null)
- procManager.unregisterProcess(this);
- }
-
- return status;
+ ExecutionManager em = ExecutionManager.locateExecutionManager();
+ return em.waitForEnd(this, timeout);
}
- private synchronized boolean isProcessTerminated()
- {
- return status == ProcessStatus.Cancelled || status == ProcessStatus.Completed || status == ProcessStatus.Aborted;
- }
-
public FlowObject getFlowObject(String name)
{
if (name == null)
@@ -461,6 +391,6 @@
public String toString()
{
- return "Process[" + getName() + ",status=" + status + "]";
+ return "Process[" + getName() + ",status=" + getProcessStatus() + "]";
}
}
\ No newline at end of file
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/RuntimeProcessImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/RuntimeProcessImpl.java 2008-08-20 19:39:22 UTC (rev 1945)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/RuntimeProcessImpl.java 2008-08-20 22:09:12 UTC (rev 1946)
@@ -35,22 +35,27 @@
*/
public class RuntimeProcessImpl implements RuntimeProcess
{
- private Process process;
+ private Process proc;
private TokenExecutor tokenExecutor;
- public RuntimeProcessImpl(Process process, TokenExecutor tokenExecutor)
+ public RuntimeProcessImpl(Process proc)
{
- this.process = process;
- this.tokenExecutor = tokenExecutor;
+ this.proc = proc;
+ this.tokenExecutor = new TokenExecutorImpl(this);
}
public Process getProcess()
{
- return process;
+ return proc;
}
public TokenExecutor getTokenExecutor()
{
return tokenExecutor;
}
+
+ public String toString()
+ {
+ return "RuntimeProcess[" + proc.getName() + ",status=" + proc.getProcessStatus() + "]";
+ }
}
\ No newline at end of file
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/SequenceFlowImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/SequenceFlowImpl.java 2008-08-20 19:39:22 UTC (rev 1945)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/SequenceFlowImpl.java 2008-08-20 22:09:12 UTC (rev 1946)
@@ -66,8 +66,15 @@
{
FlowObject sourceRef = getSourceRef();
FlowObject targetRef = getTargetRef();
- String srcName = (sourceRef.getName() != null ? sourceRef.getName() : sourceRef.getID().getCanonicalName());
- String tarName = (targetRef.getName() != null ? targetRef.getName() : targetRef.getID().getCanonicalName());
+
+ String srcName = null;
+ if (sourceRef != null)
+ srcName = (sourceRef.getName() != null ? sourceRef.getName() : sourceRef.getID().getCanonicalName());
+
+ String tarName = null;
+ if (targetRef != null)
+ tarName = (targetRef.getName() != null ? targetRef.getName() : targetRef.getID().getCanonicalName());
+
return "SequenceFlow[" + srcName + "->" + tarName + "]";
}
}
\ No newline at end of file
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/TokenExecutorImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/TokenExecutorImpl.java 2008-08-20 19:39:22 UTC (rev 1945)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/TokenExecutorImpl.java 2008-08-20 22:09:12 UTC (rev 1946)
@@ -60,14 +60,15 @@
// provide logging
private static final Log log = LogFactory.getLog(TokenExecutorImpl.class);
- public interface StartCallback
- {
- void start(Token token);
- }
-
+ private RuntimeProcess rtProc;
private ExecutorService executor = Executors.newCachedThreadPool();
private Map<String, RunnableToken> runnableTokens = new HashMap<String, RunnableToken>();
+ public TokenExecutorImpl(RuntimeProcess rtProc)
+ {
+ this.rtProc = rtProc;
+ }
+
public Set<Token> getRunnableTokens()
{
synchronized (runnableTokens)
@@ -93,9 +94,11 @@
synchronized (runnableTokens)
{
MutableToken mutableToken = (MutableToken)token;
+ mutableToken.setTokenStatus(TokenStatus.Created);
mutableToken.setFlow(initialFlow);
- Process proc = initialFlow.getTargetRef().getProcess();
- RuntimeProcess rtProc = new RuntimeProcessImpl(proc, this);
+
+ log.debug("Create Token: " + token);
+
RunnableToken rtToken = new RunnableToken(rtProc, mutableToken);
runnableTokens.put(token.getTokenID(), rtToken);
}
@@ -109,6 +112,10 @@
if (procStatus != ProcessStatus.Ready && procStatus != ProcessStatus.Active)
throw new IllegalStateException("Cannot start token to process in state: " + procStatus);
+ log.debug("Sart Token: " + token);
+ MutableToken mutableToken = (MutableToken)token;
+ mutableToken.setTokenStatus(TokenStatus.Started);
+
RunnableToken rtToken = runnableTokens.get(token.getTokenID());
executor.submit(rtToken);
}
@@ -190,10 +197,12 @@
class RunnableToken implements Runnable
{
private RuntimeProcess rtProc;
+ private TokenExecutor tokenExecutor;
private MutableToken token;
public RunnableToken(RuntimeProcess rtProc, MutableToken token)
{
+ this.tokenExecutor = rtProc.getTokenExecutor();
this.rtProc = rtProc;
this.token = token;
}
@@ -206,7 +215,6 @@
public void run()
{
Process proc = rtProc.getProcess();
- TokenExecutor tokenExecutor = rtProc.getTokenExecutor();
try
{
ConnectingObject flow = token.getFlow();
@@ -244,24 +252,45 @@
procStatus = proc.getProcessStatus();
}
}
-
+
// Notify Process on token termination
- terminateToken(proc, tokenExecutor);
+ terminateToken(proc, false);
}
catch (RuntimeException rte)
{
log.error("Process aborted: " + proc, rte);
((ProcessImpl)proc).setRuntimeException(rte);
-
+
// Notify Process on token termination
- terminateToken(proc, tokenExecutor);
+ terminateToken(proc, true);
}
}
- // Remove the token from the list of runnable tokens then notify the process
- private void terminateToken(Process proc, TokenExecutor tokenExecutor)
+ private void terminateToken(Process proc, boolean allTokens)
{
- tokenExecutor.destroy(token);
+ // Destroy the token if not already done
+ synchronized (runnableTokens)
+ {
+ if (allTokens)
+ {
+ log.debug("Terminate all tokens: " + runnableTokens);
+ Set<String> keySet = new HashSet<String>(runnableTokens.keySet());
+ for (String tokID : keySet)
+ {
+ RunnableToken rtTok = runnableTokens.get(tokID);
+ Token auxToken = rtTok.getToken();
+ tokenExecutor.destroy(auxToken);
+ }
+ }
+ else
+ {
+ TokenStatus status = token.getTokenStatus();
+ if (status != TokenStatus.Suspended && status != TokenStatus.Destroyed)
+ tokenExecutor.destroy(token);
+ }
+ }
+
+ // Notify the runtime process
synchronized (rtProc)
{
log.debug("Notify: " + rtProc);
@@ -285,5 +314,11 @@
throw new IllegalStateException("Flow object does not implement handler support: " + fo);
return (HandlerSupport)fo;
}
+
+ @Override
+ public String toString()
+ {
+ return token.toString();
+ }
}
}
\ No newline at end of file
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/runtime/TokenImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/runtime/TokenImpl.java 2008-08-20 19:39:22 UTC (rev 1945)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/runtime/TokenImpl.java 2008-08-20 22:09:12 UTC (rev 1946)
@@ -23,7 +23,6 @@
//$Id$
-import org.jboss.bpm.model.FlowObject;
import org.jboss.bpm.model.InputSet;
import org.jboss.bpm.model.OutputSet;
import org.jboss.bpm.model.SequenceFlow;
@@ -143,7 +142,6 @@
public String toString()
{
- FlowObject fo = getFlow().getTargetRef();
- return "[fo=" + fo + ",ctx=" + getExecutionContext() + "]";
+ return "[sf=" + getFlow() + ",status=" + getTokenStatus() + ",ctx=" + getExecutionContext() + "]";
}
}
\ No newline at end of file
Modified: jbossbpm/spec/trunk/modules/ri/src/test/java/org/jboss/bpm/runtime/ExecutionManagerTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/test/java/org/jboss/bpm/runtime/ExecutionManagerTest.java 2008-08-20 19:39:22 UTC (rev 1945)
+++ jbossbpm/spec/trunk/modules/ri/src/test/java/org/jboss/bpm/runtime/ExecutionManagerTest.java 2008-08-20 22:09:12 UTC (rev 1946)
@@ -23,11 +23,18 @@
// $Id$
+import org.jboss.bpm.ProcessTimeoutException;
import org.jboss.bpm.client.ExecutionManager;
+import org.jboss.bpm.client.ProcessManager;
+import org.jboss.bpm.client.SignalManager;
+import org.jboss.bpm.model.EventBuilder;
import org.jboss.bpm.model.Process;
import org.jboss.bpm.model.ProcessBuilder;
import org.jboss.bpm.model.ProcessBuilderFactory;
+import org.jboss.bpm.model.Signal;
+import org.jboss.bpm.model.EventDetail.EventDetailType;
import org.jboss.bpm.model.Process.ProcessStatus;
+import org.jboss.bpm.model.Signal.SignalType;
import org.jboss.bpm.test.DefaultEngineTestCase;
/**
@@ -47,11 +54,14 @@
ExecutionManager em = ExecutionManager.locateExecutionManager();
em.startProcess(proc, null);
-
+
ProcessStatus status = em.waitForEnd(proc);
assertEquals(ProcessStatus.Completed, status);
+
+ ProcessManager pm = ProcessManager.locateProcessManager();
+ assertNull("Process should be unregistered", pm.getProcessByID(proc.getID()));
}
-
+
public void testRestartSequenceFlow() throws Exception
{
ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
@@ -61,13 +71,101 @@
ExecutionManager em = ExecutionManager.locateExecutionManager();
em.startProcess(proc, null);
-
+
ProcessStatus status = em.waitForEnd(proc);
assertEquals(ProcessStatus.Completed, status);
+
+ em.startProcess(proc, null);
+
+ status = em.waitForEnd(proc);
+ assertEquals(ProcessStatus.Completed, status);
+ ProcessManager pm = ProcessManager.locateProcessManager();
+ assertNull("Process should be unregistered", pm.getProcessByID(proc.getID()));
+ }
+
+ public void testTaskRuntimeException() throws Exception
+ {
+ ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
+ procBuilder.addProcess(getName()).addStartEvent("Start").addSequenceFlow("Task");
+ procBuilder.addTask("Task").addExecutionHandler(TaskHandler.class).addSequenceFlow("End").addEndEvent("End");
+ Process proc = procBuilder.getProcess();
+
+ ExecutionManager em = ExecutionManager.locateExecutionManager();
em.startProcess(proc, null);
+
+ try
+ {
+ em.waitForEnd(proc);
+ fail("RuntimeException expected");
+ }
+ catch (RuntimeException rte)
+ {
+ // expected
+ }
+
+ ProcessStatus status = proc.getProcessStatus();
+ assertEquals(ProcessStatus.Aborted, status);
- status = em.waitForEnd(proc);
+ ProcessManager pm = ProcessManager.locateProcessManager();
+ assertNull("Process should be unregistered", pm.getProcessByID(proc.getID()));
+ }
+
+ public void testStartSignal() throws Exception
+ {
+ ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
+ EventBuilder eventBuilder = procBuilder.addProcess(getName()).addStartEvent("Start");
+ eventBuilder.addEventDetail(EventDetailType.Signal).addSignalRef(SignalType.USER_SIGNAL, "A");
+ procBuilder.addSequenceFlow("Task").addTask("Task").addSequenceFlow("End").addEndEvent("End");
+ Process proc = procBuilder.getProcess();
+
+ ExecutionManager em = ExecutionManager.locateExecutionManager();
+ em.startProcess(proc, null);
+
+ SignalManager sm = SignalManager.locateSignalManager();
+ sm.throwSignal(getName(), new Signal(getName(), SignalType.USER_SIGNAL, "A"));
+
+ ProcessStatus status = em.waitForEnd(proc);
assertEquals(ProcessStatus.Completed, status);
+
+ ProcessManager pm = ProcessManager.locateProcessManager();
+ assertNull("Process should be unregistered", pm.getProcessByID(proc.getID()));
}
+
+ public void testStartSignalTimeout() throws Exception
+ {
+ ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
+ EventBuilder eventBuilder = procBuilder.addProcess(getName()).addStartEvent("Start");
+ eventBuilder.addEventDetail(EventDetailType.Signal).addSignalRef(SignalType.USER_SIGNAL, "A");
+ procBuilder.addSequenceFlow("Task").addTask("Task").addSequenceFlow("End").addEndEvent("End");
+ Process proc = procBuilder.getProcess();
+
+ ExecutionManager em = ExecutionManager.locateExecutionManager();
+ em.startProcess(proc, null);
+
+ try
+ {
+ em.waitForEnd(proc, 500);
+ fail("ProcessTimeoutException expected");
+ }
+ catch (ProcessTimeoutException rte)
+ {
+ // expected
+ }
+
+ ProcessStatus status = proc.getProcessStatus();
+ assertEquals(ProcessStatus.Aborted, status);
+
+ ProcessManager pm = ProcessManager.locateProcessManager();
+ assertNull("Process should be unregistered", pm.getProcessByID(proc.getID()));
+ }
+
+ @SuppressWarnings("serial")
+ public static class TaskHandler implements ExecutionHandler
+ {
+ public void execute(Token token)
+ {
+ throw new RuntimeException("test");
+ }
+ };
}
Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/engine/EngineShutdownTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/engine/EngineShutdownTest.java 2008-08-20 19:39:22 UTC (rev 1945)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/engine/EngineShutdownTest.java 2008-08-20 22:09:12 UTC (rev 1946)
@@ -99,11 +99,11 @@
Process proc = pm.createProcess(procXML);
assertNotNull("Process expected", proc);
- // Try to create a Process during shutdown
+ // Try to start a Process during shutdown
try
{
engine.prepareForShutdown();
- pm.startProcess(proc.getID(), null);
+ proc.startProcess(null);
fail("EngineShutdownException expected");
}
catch (EngineShutdownException ex)
More information about the jbpm-commits
mailing list