[jbpm-commits] JBoss JBPM SVN: r1949 - in jbossbpm/spec/trunk/modules: ri/src/main/java/org/jboss/bpm/ri/client and 3 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Thu Aug 21 04:28:05 EDT 2008


Author: thomas.diesler at jboss.com
Date: 2008-08-21 04:28:04 -0400 (Thu, 21 Aug 2008)
New Revision: 1949

Removed:
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/client/RunnableToken.java
   jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/process/ProcessStartTest.java
Modified:
   jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/api10/include/ProcessIncludeTest.java
   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/InclusiveGatewayImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ParallelGatewayImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/TokenExecutorImpl.java
   jbossbpm/spec/trunk/modules/ri/src/test/java/org/jboss/bpm/runtime/ExecutionManagerTest.java
Log:
Fix parallel token creation

Modified: jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/api10/include/ProcessIncludeTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/api10/include/ProcessIncludeTest.java	2008-08-21 07:28:15 UTC (rev 1948)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/api10/include/ProcessIncludeTest.java	2008-08-21 08:28:04 UTC (rev 1949)
@@ -23,9 +23,10 @@
 
 // $Id$
 
-import org.jboss.bpm.ProcessTimeoutException;
 import org.jboss.bpm.client.ProcessManager;
+import org.jboss.bpm.model.Message;
 import org.jboss.bpm.model.Process;
+import org.jboss.bpm.model.Property;
 import org.jboss.bpm.test.DefaultEngineTestCase;
 
 /**
@@ -36,21 +37,18 @@
  */
 public class ProcessIncludeTest extends DefaultEngineTestCase
 {
-
+  /**
+   * Test the the process contains the message definition from the include 
+   */
   public void testInclude() throws Exception
   {
     ProcessManager pm = ProcessManager.locateProcessManager();
     Process proc = pm.createProcess(getResourceURL("include/proc-api10.xml"));
 
-    proc.startProcess();
-    try
-    {
-      proc.waitForEnd(500);
-      fail("ProcessTimeoutException expected");
-    }
-    catch (ProcessTimeoutException ex)
-    {
-      // expected
-    }
+    Message procMsg = proc.getMessage("FooMsg");
+    assertNotNull(procMsg);
+
+    Property prop = procMsg.getProperty("foo");
+    assertEquals("bar", prop.getValue());
   }
 }

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-21 07:28:15 UTC (rev 1948)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/client/ExecutionManagerImpl.java	2008-08-21 08:28:04 UTC (rev 1949)
@@ -74,17 +74,26 @@
   @Override
   public void startProcess(Process proc, Attachments att)
   {
+    // Prepare the process for start
+    startProcessPrepare(proc);
+    
     // Get the None Start Event if there is one and start the initial flow
     StartEvent start = getNoneStartEvent(proc);
-    if (start == null)
-      startProcessPrepare(proc);
-    else
+    if (start != null)
+    {
+      if (proc.getProcessStatus() == ProcessStatus.Active)
+        throw new IllegalStateException("Cannot start an already active process");
+      
       startProcessInternal(start, att);
+    }
   }
 
   @Override
   public void startProcess(StartEvent start, Attachments att)
   {
+    // Prepare the process for start
+    startProcessPrepare(start.getProcess());
+    
     startProcessInternal(start, att);
   }
 
@@ -104,9 +113,6 @@
     RuntimeProcess rtProc = getRuntimeProcess(proc, false);
     boolean startProcessThread = (rtProc == null); 
 
-    // Prepare for start
-    startProcessPrepare(proc);
-    
     // Create initial Token
     TokenImpl initialToken = new TokenImpl(att);
     InitialFlow initialFlow = new InitialFlow(start);

Deleted: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/client/RunnableToken.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/client/RunnableToken.java	2008-08-21 07:28:15 UTC (rev 1948)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/client/RunnableToken.java	2008-08-21 08:28:04 UTC (rev 1949)
@@ -1,150 +0,0 @@
-/*
- * 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.ri.client;
-
-// $Id$
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.jboss.bpm.model.ConnectingObject;
-import org.jboss.bpm.model.FlowObject;
-import org.jboss.bpm.model.Process;
-import org.jboss.bpm.model.Process.ProcessStatus;
-import org.jboss.bpm.ri.model.impl.FlowObjectImpl;
-import org.jboss.bpm.ri.model.impl.ProcessImpl;
-import org.jboss.bpm.ri.runtime.DelegatingToken;
-import org.jboss.bpm.ri.runtime.MutableToken;
-import org.jboss.bpm.ri.runtime.RuntimeProcess;
-import org.jboss.bpm.runtime.HandlerSupport;
-import org.jboss.bpm.runtime.SignalHandler;
-import org.jboss.bpm.runtime.Token;
-import org.jboss.bpm.runtime.TokenExecutor;
-import org.jboss.bpm.runtime.Token.TokenStatus;
-
-/**
- * The RunnableToken implements the logic to move the token from one FlowObject to the next.
- * 
- * @author thomas.diesler at jboss.com
- * @since 18-Jun-2008
- */
-public class RunnableToken implements Runnable
-{
-  // provide logging
-  private static final Log log = LogFactory.getLog(RunnableToken.class);
-
-  private RuntimeProcess rtProc;
-  private MutableToken token;
-
-  public RunnableToken(RuntimeProcess rtProc, MutableToken token)
-  {
-    this.rtProc = rtProc;
-    this.token = token;
-  }
-
-  public Token getToken()
-  {
-    return token;
-  }
-
-  public void run()
-  {
-    TokenExecutor tokenExecutor = rtProc.getTokenExecutor();
-    Process proc = rtProc.getProcess();
-    try
-    {
-      ConnectingObject flow = token.getFlow();
-      if (flow == null)
-        throw new IllegalStateException("Cannot obtain initial flow");
-
-      TokenStatus tokStatus = token.getTokenStatus();
-      ProcessStatus procStatus = proc.getProcessStatus();
-      while (procStatus == ProcessStatus.Active && tokStatus == TokenStatus.Started)
-      {
-        flow = token.getFlow();
-
-        // Get the target and its handlers
-        FlowObjectImpl targetFlowObject = (FlowObjectImpl)flow.getTargetRef();
-        SignalHandler sigHandler = getSignalHandler(targetFlowObject);
-
-        // Synchronize execution on the target FlowObject
-        synchronized (targetFlowObject)
-        {
-          try
-          {
-            // Execute the FlowObject
-            sigHandler.throwEnterSignal();
-
-            // Create a Token that includes properties from the current Activity
-            DelegatingToken delToken = new DelegatingToken(token);
-
-            // Execute the target FlowObject
-            targetFlowObject.execute(delToken);
-
-            // Transfer the token to the FlowHandler
-            targetFlowObject.executeFlowHandler(tokenExecutor, delToken);
-          }
-          catch (RuntimeException rte)
-          {
-            log.error("Process error", rte);
-            targetFlowObject.reset();
-            throw rte;
-          }
-          finally
-          {
-            sigHandler.throwExitSignal();
-          }
-          
-          tokStatus = token.getTokenStatus();
-          procStatus = proc.getProcessStatus();
-        }
-      }
-    }
-    catch (RuntimeException rte)
-    {
-      log.error("Process aborted: " + proc, rte);
-      ((ProcessImpl)proc).setRuntimeException(rte);
-      tokenExecutor.destroy(token);
-    }
-    finally
-    {
-      if (token.getTokenStatus() != TokenStatus.Suspended)
-        tokenExecutor.destroy(token);
-    }
-  }
-
-  private SignalHandler getSignalHandler(FlowObject target)
-  {
-    HandlerSupport handlerSupport = getHandlerSupport(target);
-    SignalHandler handler = handlerSupport.getSignalHandler();
-    if (handler == null)
-      throw new IllegalStateException("Cannot obtain signal handler from: " + target);
-
-    return handler;
-  }
-
-  private HandlerSupport getHandlerSupport(FlowObject fo)
-  {
-    if (fo instanceof HandlerSupport == false)
-      throw new IllegalStateException("Flow object does not implement handler support: " + fo);
-    return (HandlerSupport)fo;
-  }
-}
\ No newline at end of file

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/InclusiveGatewayImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/InclusiveGatewayImpl.java	2008-08-21 07:28:15 UTC (rev 1948)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/InclusiveGatewayImpl.java	2008-08-21 08:28:04 UTC (rev 1949)
@@ -72,32 +72,38 @@
   {
     FlowObject sourceRef = token.getFlow().getSourceRef();
     log.debug("Propagate token comming from: " + sourceRef);
-    
+
     // Get the applicable gates
     List<Gate> applicableGates = getApplicableGates(token);
     log.debug("applicableGates: " + applicableGates);
-    
-    // Destroy the incomming token if there are 
+
+    // Destroy the incomming token if there are
     // more than one applicable gates
     if (applicableGates.size() > 1)
       tokenExecutor.destroy(token);
-    
-    for (Gate aux : applicableGates)
+
+    if (applicableGates.size() == 1)
     {
-      SequenceFlow outFlow = aux.getOutgoingSequenceFlow();
-      if (applicableGates.size() == 1)
+      SequenceFlow outFlow = applicableGates.get(0).getOutgoingSequenceFlow();
+      tokenExecutor.move(token, outFlow);
+    }
+    else
+    {
+      List<Token> outTokens = new ArrayList<Token>();
+      for (Gate aux : applicableGates)
       {
-        tokenExecutor.move(token, outFlow);
+        SequenceFlow outFlow = aux.getOutgoingSequenceFlow();
+        Token outToken = token.copyToken();
+        tokenExecutor.create(outToken, outFlow);
+        outTokens.add(outToken);
       }
-      else
+      for (Token outToken : outTokens)
       {
-        Token outToken = token.copyToken();
-        tokenExecutor.create(outToken, outFlow);
         tokenExecutor.start(outToken);
       }
     }
   }
-  
+
   // Get applicable gates which' condition evaluates to TRUE
   // Fall back to the default gate if there is one
   // Choke if there is no applicable gate

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ParallelGatewayImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ParallelGatewayImpl.java	2008-08-21 07:28:15 UTC (rev 1948)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ParallelGatewayImpl.java	2008-08-21 08:28:04 UTC (rev 1949)
@@ -23,7 +23,9 @@
 
 //$Id$
 
+import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 import org.apache.commons.logging.Log;
@@ -109,13 +111,18 @@
     if (outToken != null)
     {
       // Start a copy of the outgoing token for every gate
+      List<Token> outTokens = new ArrayList<Token>();
       for(Gate gate : getGates())
       {
         SequenceFlow outFlow = gate.getOutgoingSequenceFlow();
-        Token copyToken = outToken.copyToken();
-        tokenExecutor.create(copyToken, outFlow);
-        tokenExecutor.start(copyToken);
+        outToken = outToken.copyToken();
+        tokenExecutor.create(outToken, outFlow);
+        outTokens.add(outToken);
       }
+      for (Token auxToken : outTokens)
+      {
+        tokenExecutor.start(auxToken);
+      }
       
       // Destroy the received tokens
       for (Token auxToken : receivedTokens)

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-21 07:28:15 UTC (rev 1948)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/TokenExecutorImpl.java	2008-08-21 08:28:04 UTC (rev 1949)
@@ -98,7 +98,7 @@
       mutableToken.setFlow(initialFlow);
 
       log.debug("Create Token: " + token);
-      
+
       RunnableToken rtToken = new RunnableToken(rtProc, mutableToken);
       runnableTokens.put(token.getTokenID(), rtToken);
     }
@@ -254,40 +254,36 @@
         }
 
         // Notify Process on token termination
-        terminateToken(proc, false);
+        terminateToken(proc);
       }
       catch (RuntimeException rte)
       {
         log.error("Process aborted: " + proc, rte);
         ((ProcessImpl)proc).setRuntimeException(rte);
 
+        log.debug("Terminate all suspended tokens");
+        Set<String> keySet = new HashSet<String>(runnableTokens.keySet());
+        for (String tokID : keySet)
+        {
+          RunnableToken rtTok = runnableTokens.get(tokID);
+          Token auxToken = rtTok.getToken();
+          if (auxToken.getTokenStatus() == TokenStatus.Suspended)
+            tokenExecutor.destroy(auxToken);
+        }
+
         // Notify Process on token termination
-        terminateToken(proc, true);
+        terminateToken(proc);
       }
     }
 
-    private void terminateToken(Process proc, boolean allTokens)
+    private void terminateToken(Process proc)
     {
       // 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);
-        }
+        TokenStatus status = token.getTokenStatus();
+        if (status != TokenStatus.Suspended && status != TokenStatus.Destroyed)
+          tokenExecutor.destroy(token);
       }
 
       // Notify the runtime process

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-21 07:28:15 UTC (rev 1948)
+++ jbossbpm/spec/trunk/modules/ri/src/test/java/org/jboss/bpm/runtime/ExecutionManagerTest.java	2008-08-21 08:28:04 UTC (rev 1949)
@@ -26,6 +26,7 @@
 import org.jboss.bpm.ProcessTimeoutException;
 import org.jboss.bpm.client.ExecutionManager;
 import org.jboss.bpm.client.ProcessManager;
+import org.jboss.bpm.client.SignalListener;
 import org.jboss.bpm.client.SignalManager;
 import org.jboss.bpm.model.EventBuilder;
 import org.jboss.bpm.model.Process;
@@ -45,6 +46,9 @@
  */
 public class ExecutionManagerTest extends DefaultEngineTestCase
 {
+  /**
+   * Test the normal sequence flow
+   */
   public void testSequenceFlow() throws Exception
   {
     ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
@@ -62,6 +66,9 @@
     assertNull("Process should be unregistered", pm.getProcessByID(proc.getID()));
   }
 
+  /**
+   * Test restart of the proces after completion
+   */
   public void testRestartSequenceFlow() throws Exception
   {
     ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
@@ -84,11 +91,14 @@
     assertNull("Process should be unregistered", pm.getProcessByID(proc.getID()));
   }
 
+  /**
+   * Test process aboertion after RTE in Task
+   */
   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");
+    procBuilder.addTask("Task").addExecutionHandler(ThrowHandler.class).addSequenceFlow("End").addEndEvent("End");
     Process proc = procBuilder.getProcess();
 
     ExecutionManager em = ExecutionManager.locateExecutionManager();
@@ -111,6 +121,9 @@
     assertNull("Process should be unregistered", pm.getProcessByID(proc.getID()));
   }
 
+  /**
+   * Test proces start from SignalStartEvent
+   */
   public void testStartSignal() throws Exception
   {
     ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
@@ -132,6 +145,9 @@
     assertNull("Process should be unregistered", pm.getProcessByID(proc.getID()));
   }
 
+  /**
+   * Test proces timeout with no start signal
+   */
   public void testStartSignalTimeout() throws Exception
   {
     ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
@@ -160,8 +176,45 @@
     assertNull("Process should be unregistered", pm.getProcessByID(proc.getID()));
   }
 
+  public void testStartTwice() throws Exception
+  {
+    ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
+    procBuilder.addProcess(getName()).addStartEvent("Start").addSequenceFlow("TaskA").
+    addTask("TaskA").addSequenceFlow("End").addEndEvent("End");
+    final Process proc = procBuilder.getProcess();
+    
+    class TestSignalListener implements SignalListener
+    {
+      RuntimeException signalException;
+
+      public void catchSignal(Signal signal)
+      {
+        if (signal.getSignalType() == SignalType.SYSTEM_TASK_ENTER)
+        {
+          try
+          {
+            proc.startProcess();
+            fail("Cannot start process twice");
+          }
+          catch (RuntimeException rte)
+          {
+            signalException = rte;
+          }
+        }
+      }
+    }
+    TestSignalListener sigListener = new TestSignalListener();
+    SignalManager sm = SignalManager.locateSignalManager();
+    sm.addSignalListener(getName(), sigListener);
+    
+    proc.startProcess();
+    proc.waitForEnd();
+    
+    assertNotNull("Signal Exception expected", sigListener.signalException);
+  }
+  
   @SuppressWarnings("serial")
-  public static class TaskHandler implements ExecutionHandler
+  public static class ThrowHandler implements ExecutionHandler
   {
     public void execute(Token token)
     {

Deleted: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/process/ProcessStartTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/process/ProcessStartTest.java	2008-08-21 07:28:15 UTC (rev 1948)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/process/ProcessStartTest.java	2008-08-21 08:28:04 UTC (rev 1949)
@@ -1,110 +0,0 @@
-/*
- * 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.cts.process;
-
-// $Id$
-
-import java.util.List;
-
-import javax.management.ObjectName;
-
-import org.jboss.bpm.client.SignalListener;
-import org.jboss.bpm.client.SignalManager;
-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.Signal.SignalType;
-import org.jboss.bpm.test.DefaultEngineTestCase;
-
-/**
- * Test the process start opertaions
- * 
- * @author thomas.diesler at jboss.com
- * @since 08-Jul-2008
- */
-public class ProcessStartTest extends DefaultEngineTestCase
-{
-  private RuntimeException startException;
-  
-  public void testStartProcessReturn() throws Exception
-  {
-    Process proc = getProcess();
-    ObjectName procID = proc.getID();
-    assertEquals(procID, proc.startProcess());
-    proc.waitForEnd();
-  }
-
-  public void testStartTwice() throws Exception
-  {
-    startException = null;
-    
-    final Process proc = getProcess();
-    SignalListener signalListener = new SignalListener()
-    {
-      public void catchSignal(Signal signal)
-      {
-        if (signal.getSignalType() == SignalType.SYSTEM_TASK_ENTER)
-        {
-          try
-          {
-            proc.startProcess();
-            fail("Cannot start process twice");
-          }
-          catch (RuntimeException rte)
-          {
-            startException = rte;
-          }
-        }
-      }
-    };
-    SignalManager sm = SignalManager.locateSignalManager();
-    sm.addSignalListener(getName(), signalListener);
-    
-    proc.startProcess();
-    proc.waitForEnd();
-    
-    assertNotNull("Start exception expected", startException);
-  }
-
-  public void testProcessRestart() throws Exception
-  {
-    Process proc = getProcess();
-    
-    proc.startProcess();
-    proc.waitForEnd();
-    
-    proc.startProcess();
-    proc.waitForEnd();
-    
-    List<Signal> signals = getSignals(SignalType.SYSTEM_END_EVENT_EXIT);
-    assertEquals(2, signals.size());
-  }
-  
-  private Process getProcess()
-  {
-    ProcessBuilder builder = ProcessBuilderFactory.newInstance().newProcessBuilder();
-    Process proc = builder.addProcess(getName()).addStartEvent("Start").addSequenceFlow("TaskA").
-    addTask("TaskA").addSequenceFlow("End").addEndEvent("End").getProcess();
-    return proc;
-  }
-}




More information about the jbpm-commits mailing list