[jbpm-commits] JBoss JBPM SVN: r1981 - in jbossbpm/spec/branches/tdiesler/modules: api/src/main/java/org/jboss/bpm/model and 26 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Fri Aug 22 05:40:50 EDT 2008


Author: thomas.diesler at jboss.com
Date: 2008-08-22 05:40:49 -0400 (Fri, 22 Aug 2008)
New Revision: 1981

Added:
   jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/SupportingElement.java
Removed:
   jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/spec/SupportingElement.java
Modified:
   jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/client/MessageManager.java
   jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/client/SignalListener.java
   jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/client/SignalManager.java
   jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/AbstractElement.java
   jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/FlowObject.java
   jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/Gateway.java
   jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/GraphicalElement.java
   jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/Process.java
   jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/test/AbstractAPITestCase.java
   jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/client/ExecutionManagerImpl.java
   jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/client/ProcessManagerImpl.java
   jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/AbstractElementImpl.java
   jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ActivityImpl.java
   jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/EndEventImpl.java
   jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/EventImpl.java
   jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/FlowObjectImpl.java
   jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/GatewayImpl.java
   jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/GraphicalElementImpl.java
   jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/IntermediateEventImpl.java
   jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ProcessBuilderImpl.java
   jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ProcessImpl.java
   jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ReceiveTaskImpl.java
   jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/SendTaskImpl.java
   jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/StartEventImpl.java
   jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/SubProcessImpl.java
   jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/SupportingElementImpl.java
   jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/TaskImpl.java
   jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/TokenExecutorImpl.java
   jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/spec/Condition.java
   jbossbpm/spec/branches/tdiesler/modules/ri/src/test/java/org/jboss/bpm/runtime/ExecutionManagerTest.java
   jbossbpm/spec/branches/tdiesler/modules/samples/airticket/server/src/main/java/org/jboss/bpm/samples/airticket/server/AirticketServiceImpl.java
   jbossbpm/spec/branches/tdiesler/modules/samples/airticket/server/src/test/java/org/jboss/bpm/samples/airticket/AirticketTest.java
   jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/activity/ActivityPropertyTest.java
   jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveGatewayMergeTest.java
   jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveGatewaySplitTest.java
   jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/inclusive/InclusiveGatewayMergeTest.java
   jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/inclusive/InclusiveGatewaySplitTest.java
   jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/parallel/ParallelGatewayMergeTest.java
   jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/parallel/ParallelGatewaySplitTest.java
   jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/process/ProcessPropertyTest.java
   jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/processmanager/ProcessManagerTest.java
   jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/signalmanager/SignalManagerTest.java
   jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/startevent/StartEventSignalTest.java
   jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/task/ReceiveTaskTest.java
   jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/exclusivechoice/ExclusiveChoiceTest.java
   jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/multichoice/MultiChoiceTest.java
   jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/parallelsplit/ParallelSplitTest.java
   jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/simplemerge/SimpleMergeTest.java
   jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/synchronization/SynchronizationTest.java
   jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/data/casedata/CaseDataTest.java
   jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/data/taskdata/TaskDataTest.java
   jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/resources/pattern/control/synchronization/pattern-control-synchronization-api10.xml
   jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/resources/pattern/data/casedata/pattern-data-casedata-api10.xml
   jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/resources/pattern/data/taskdata/pattern-data-taskdata-api10.xml
Log:
Refactor signal handling

Modified: jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/client/MessageManager.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/client/MessageManager.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/client/MessageManager.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -23,8 +23,11 @@
 
 //$Id$
 
+import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 
 import javax.management.ObjectName;
 
@@ -61,21 +64,39 @@
    */
   public void addMessageListener(MessageListener listener)
   {
-    if (hasMessageListener(listener.getID()))
-      throw new IllegalStateException("Listener already registered: " + listener.getID());
+    synchronized (listeners)
+    {
+      if (hasMessageListener(listener.getID()))
+        throw new IllegalStateException("Listener already registered: " + listener.getID());
 
-    log.debug("addMessageListener: " + listener.getID());
-    listeners.put(listener.getID(), listener);
+      log.debug("addMessageListener: " + listener.getID());
+      listeners.put(listener.getID(), listener);
+    }
   }
 
   /**
+   * Get the set of registered MessageListeners 
+   */
+  public Set<MessageListener> getMessageListeners()
+  {
+    synchronized (listeners)
+    {
+      HashSet<MessageListener> set = new HashSet<MessageListener>(listeners.values());
+      return Collections.unmodifiableSet(set);
+    }
+  }
+
+  /**
    * Get a MessageListener for a given ID
    * 
    * @return null if there is none
    */
   public MessageListener getMessageListener(ObjectName listenerID)
   {
-    return listeners.get(listenerID);
+    synchronized (listeners)
+    {
+      return listeners.get(listenerID);
+    }
   }
 
   /**
@@ -91,8 +112,11 @@
    */
   public void removeMessageListener(ObjectName listenerID)
   {
-    log.debug("removeMessageListener: " + listenerID);
-    listeners.remove(listenerID);
+    synchronized (listeners)
+    {
+      log.debug("removeMessageListener: " + listenerID);
+      listeners.remove(listenerID);
+    }
   }
 
   /**
@@ -105,7 +129,7 @@
    */
   public void sendMessage(ObjectName targetID, Message msg)
   {
-    MessageListener msgListener = listeners.get(targetID);
+    MessageListener msgListener = getMessageListener(targetID);
     if (msgListener == null)
       throw new IllegalStateException("No message listener registered for: " + targetID);
 

Modified: jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/client/SignalListener.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/client/SignalListener.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/client/SignalListener.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -21,21 +21,25 @@
  */
 package org.jboss.bpm.client;
 
-import org.jboss.bpm.model.Signal;
-
 //$Id$
 
+import org.jboss.bpm.model.Signal;
 
 /**
- * A signal listener that can be registered with the ProcessEngine
+ * A signal listener that can be registered with the {@link SignalManager}
  * 
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
 public interface SignalListener
 {
+  /**
+   * Returns true if the listener accepts a given signal  
+   */
+  boolean acceptSignal(Signal signal);
+  
   /** 
-   * Catch a signal from the process that this listener is registered with 
+   * Catch a previously accepted signal 
    */
   void catchSignal(Signal signal);
 }
\ No newline at end of file

Modified: jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/client/SignalManager.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/client/SignalManager.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/client/SignalManager.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -23,21 +23,16 @@
 
 //$Id$
 
-import java.util.HashMap;
+import java.util.Collections;
 import java.util.HashSet;
-import java.util.Map;
 import java.util.Set;
 
-import javax.management.ObjectName;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.jboss.bpm.model.Signal;
 
 /**
- * The ProcessEngine sends signals through the SignalManager. 
- * <p/> 
- * A {@link Signal} is like an undirected flare shot up
+ * The ProcessEngine sends signals through the SignalManager. <p/> A {@link Signal} is like an undirected flare shot up
  * into the air. A component can register a {@link SignalListener} with the SignalManager.
  * 
  * @author thomas.diesler at jboss.com
@@ -49,7 +44,7 @@
   private static final Log log = LogFactory.getLog(SignalManager.class);
 
   // The map of registered signal listeners
-  private Map<ObjectName, Set<SignalListener>> listeners = new HashMap<ObjectName, Set<SignalListener>>();
+  private Set<SignalListener> listeners = new HashSet<SignalListener>();
 
   /**
    * Locate the SignalManager
@@ -62,87 +57,65 @@
 
   /**
    * Add a SignalListener for a given source
-   * 
-   * @param fromRef If null the listener catches all signals
    */
-  public void addSignalListener(ObjectName fromRef, SignalListener listener)
+  public void addSignalListener(SignalListener listener)
   {
     synchronized (listeners)
     {
-      log.debug("addSignalListener: " + fromRef + "=" + listener);
-      Set<SignalListener> set = listeners.get(fromRef);
-      if (set == null)
-      {
-        set = new HashSet<SignalListener>();
-        listeners.put(fromRef, set);
-      }
-      set.add(listener);
+      log.debug("addSignalListener: " + listener);
+      listeners.add(listener);
     }
   }
 
   /**
-   * Remove a SignalListener for a given source
+   * Get the set of registered SignalListeners 
    */
-  public void removeSignalListener(ObjectName fromRef, SignalListener listener)
+  public Set<SignalListener> getSignalListeners()
   {
     synchronized (listeners)
     {
-      log.debug("removeSignalListener: " + fromRef + "=" + listener);
-      Set<SignalListener> set = listeners.get(fromRef);
-      if (set != null)
-      {
-        set.remove(listener);
-      }
+      return Collections.unmodifiableSet(listeners);
     }
   }
 
   /**
-   * Remove all SignalListener for a given source
+   * Remove a SignalListener for a given source
    */
-  public void removeSignalListeners(ObjectName fromRef)
+  public void removeSignalListener(SignalListener listener)
   {
     synchronized (listeners)
     {
-      log.debug("removeSignalListeners: " + fromRef);
-      listeners.remove(fromRef);
+      log.debug("removeSignalListener: " + listener);
+      listeners.remove(listener);
     }
   }
 
   /**
    * Throw a signal to all registered listeners
-   * 
-   * @param procName An optional process name
    */
   public void throwSignal(Signal signal)
   {
     log.debug("throwSignal: " + signal);
-
-    // Throw Signal to listeners associated with a given source
-    ObjectName fromRef = signal.getFromRef();
-    Set<SignalListener> fromRefListeners = getListeners(fromRef);
-    for (SignalListener listener : fromRefListeners)
+    Set<SignalListener> currentListeners = getSignalListeners();
+    for (SignalListener listener : currentListeners)
     {
-      failsafeThrow(listener, signal);
+      if (failsafeAccept(listener, signal))
+        failsafeThrow(listener, signal);
     }
-
-    // Throw Signal to listeners not associated with any source
-    Set<SignalListener> allListeners = getListeners(null);
-    for (SignalListener listener : allListeners)
-    {
-      failsafeThrow(listener, signal);
-    }
   }
 
-  private Set<SignalListener> getListeners(ObjectName fromRef)
+  private boolean failsafeAccept(SignalListener listener, Signal signal)
   {
-    synchronized (listeners)
+    try
     {
-      HashSet<SignalListener> retSet = new HashSet<SignalListener>();
-      Set<SignalListener> listenerSet = listeners.get(fromRef);
-      if (listenerSet != null)
-        retSet.addAll(listenerSet);
-      return retSet;
+      boolean accept = listener.acceptSignal(signal);
+      return accept;
     }
+    catch (RuntimeException rte)
+    {
+      log.error("Signal processing error", rte);
+      return false;
+    }
   }
 
   private void failsafeThrow(SignalListener listener, Signal signal)

Modified: jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/AbstractElement.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/AbstractElement.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/AbstractElement.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -21,7 +21,7 @@
  */
 package org.jboss.bpm.model;
 
-//$Id$
+//$Id: $
 
 import java.io.Serializable;
 

Modified: jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/FlowObject.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/FlowObject.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/FlowObject.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -21,11 +21,9 @@
  */
 package org.jboss.bpm.model;
 
+// $Id: $
 import java.util.List;
 
-
-//$Id$
-
 /**
  * A Flow Object is one of the set of following graphical objects: Event, Activity, and Gateway.
  * 

Modified: jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/Gateway.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/Gateway.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/Gateway.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -52,7 +52,7 @@
    * GatewayType is by default Exclusive. The GatewayType MAY be set to Inclusive, Complex, or Parallel. The GatewayType will determine the behavior of the Gateway,
    * both for incoming and outgoing Sequence Flow
    */
-  Gateway.GatewayType getGatewayType();
+  GatewayType getGatewayType();
 
   /**
    * There MAY be zero or more Gates (except where noted below). Zero Gates are allowed if the Gateway is last object in a Process flow and there are no Start or End

Modified: jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/GraphicalElement.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/GraphicalElement.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/GraphicalElement.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -21,12 +21,10 @@
  */
 package org.jboss.bpm.model;
 
+// $Id: $
 
-
-//$Id$
-
 /**
- * A graphical BPMN element 
+ * A graphical element 
  * 
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008

Modified: jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/Process.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/Process.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/Process.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -35,7 +35,7 @@
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
-public interface Process extends GraphicalElement, PropertySupport
+public interface Process extends SupportingElement, PropertySupport
 {
   /**
    * Defines the type of a {@link Process}

Copied: jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/SupportingElement.java (from rev 1979, jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/spec/SupportingElement.java)
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/SupportingElement.java	                        (rev 0)
+++ jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/SupportingElement.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -0,0 +1,35 @@
+/*
+ * 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.model;
+
+
+//$Id$
+
+/**
+ * A supporting element 
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+public interface SupportingElement extends AbstractElement
+{
+}
\ No newline at end of file

Modified: jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/test/AbstractAPITestCase.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/test/AbstractAPITestCase.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/test/AbstractAPITestCase.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -82,18 +82,40 @@
     deployer = new EmbeddedBeansDeployer();
 
     // Setup the SignalListener
-    SignalManager signalManager = SignalManager.locateSignalManager();
-    signalManager.addSignalListener(null, getSignalListener());
+    clearAllSignalListeners();
+    SignalManager sigManager = SignalManager.locateSignalManager();
+    sigManager.addSignalListener(getSignalListener());
     synchronized (signals)
     {
       signals.clear();
     }
 
     // Setup the MessageListener
-    MessageManager messageManager = MessageManager.locateMessageManager();
-    messageManager.addMessageListener(getMessageListener());
+    clearAllMessageListeners();
+    MessageManager msgManager = MessageManager.locateMessageManager();
+    msgManager.addMessageListener(getMessageListener());
   }
 
+  private void clearAllSignalListeners()
+  {
+    SignalManager sigManager = SignalManager.locateSignalManager();
+    Set<SignalListener> sigListeners = sigManager.getSignalListeners();
+    for (SignalListener sigListener : sigListeners)
+    {
+      sigManager.removeSignalListener(sigListener);
+    }
+  }
+
+  private void clearAllMessageListeners()
+  {
+    MessageManager msgManager = MessageManager.locateMessageManager();
+    Set<MessageListener> msgListeners = msgManager.getMessageListeners();
+    for (MessageListener msgListener : msgListeners)
+    {
+      msgManager.removeMessageListener(msgListener.getID());
+    }
+  }
+
   @Override
   protected void tearDown() throws Exception
   {
@@ -101,11 +123,11 @@
 
     // Tear down the SignalListener
     SignalManager signalManager = SignalManager.locateSignalManager();
-    signalManager.removeSignalListeners(null);
+    signalManager.removeSignalListener(getSignalListener());
 
     // Tear down the MessageListener
     MessageManager messageManager = MessageManager.locateMessageManager();
-    messageManager.removeMessageListener(getMessageListenerID());
+    messageManager.removeMessageListener(getTestID());
 
     // Check that there are no registered processes left
     ProcessManager procManager = ProcessManager.locateProcessManager();
@@ -117,6 +139,24 @@
       log.warn(logMsg);
     }
 
+    // Check that there are no registered signal listeners left
+    Set<SignalListener> sigListeners = signalManager.getSignalListeners();
+    if (sigListeners.size() > 0)
+    {
+      String logMsg = "Registered signal listeners on tear down of " + getName() + ": " + sigListeners;
+      System.out.println(logMsg);
+      log.warn(logMsg);
+    }
+
+    // Check that there are no registered signal listeners left
+    Set<MessageListener> msgListeners = messageManager.getMessageListeners();
+    if (msgListeners.size() > 0)
+    {
+      String logMsg = "Registered message listeners on tear down of " + getName() + ": " + msgListeners;
+      System.out.println(logMsg);
+      log.warn(logMsg);
+    }
+
     super.tearDown();
   }
 
@@ -160,6 +200,11 @@
     {
       signalListener = new SignalListener()
       {
+        public boolean acceptSignal(Signal signal)
+        {
+          return true;
+        }
+        
         public void catchSignal(Signal signal)
         {
           synchronized (signals)
@@ -207,7 +252,7 @@
       {
         public ObjectName getID()
         {
-          return getMessageListenerID();
+          return getTestID();
         }
 
         public void catchMessage(Message message)
@@ -223,9 +268,9 @@
     return messageListener;
   }
 
-  public ObjectName getMessageListenerID()
+  public ObjectName getTestID()
   {
-    return ObjectNameFactory.create(Constants.ID_DOMAIN, "msgListener", getShortName());
+    return ObjectNameFactory.create(Constants.ID_DOMAIN, "test", getShortName());
   }
 
   public List<Message> getMessages()

Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/client/ExecutionManagerImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/client/ExecutionManagerImpl.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/client/ExecutionManagerImpl.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -134,9 +134,7 @@
         {
           try
           {
-            log.debug("Wait to become Active " + proc);
             proc.wait();
-            log.debug("Notified " + proc);
           }
           catch (InterruptedException ex)
           {
@@ -217,9 +215,7 @@
           
           // Start waiting to get notified
           long waitTimeout = forever ? 0 : until - now;
-          log.debug("Wait for " + waitTimeout + "ms on " + proc);
           proc.wait(waitTimeout);
-          log.debug("Notified " + proc);
         }
         now = System.currentTimeMillis();
       }
@@ -327,7 +323,7 @@
       Process proc = rtProc.getProcess();
 
       SignalManager signalManager = SignalManager.locateSignalManager();
-
+      
       ObjectName procID = proc.getID();
       String procName = proc.getName();
       try
@@ -338,7 +334,6 @@
           signalManager.throwSignal(new Signal(procID, SignalType.SYSTEM_PROCESS_ENTER));
 
           // Notify that the process is now Active
-          log.debug("Notify: " + proc);
           proc.notifyAll();
         }
         
@@ -349,9 +344,7 @@
           {
             try
             {
-              log.debug("Wait: " + rtProc);
               rtProc.wait();
-              log.debug("Notified: " + rtProc);
             }
             catch (InterruptedException ex)
             {
@@ -376,7 +369,6 @@
           runtimeProcesses.remove(procID);
           
           // Notify that the process has now ended
-          log.debug("Notify: " + proc);
           proc.notifyAll();
         }
       }

Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/client/ProcessManagerImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/client/ProcessManagerImpl.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/client/ProcessManagerImpl.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -53,14 +53,14 @@
   {
     super.registerProcess(proc);
     ProcessImpl procImpl = (ProcessImpl)proc;
-    procImpl.registerElement(proc);
+    procImpl.register(proc);
   }
 
   @Override
   public void unregisterProcess(Process proc)
   {
     ProcessImpl procImpl = (ProcessImpl)proc;
-    procImpl.unregisterElement(proc);
+    procImpl.unregister(proc);
     super.unregisterProcess(proc);
   }
 }

Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/AbstractElementImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/AbstractElementImpl.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/AbstractElementImpl.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -26,10 +26,7 @@
 import javax.management.ObjectName;
 
 import org.jboss.bpm.model.AbstractElement;
-import org.jboss.bpm.model.Constants;
-import org.jboss.bpm.model.ObjectNameFactory;
 import org.jboss.bpm.model.Process;
-import org.jboss.util.id.UID;
 
 /**
  * The parrent of all Elements
@@ -38,28 +35,20 @@
  * @since 08-Jul-2008
  */
 @SuppressWarnings("serial")
-public class AbstractElementImpl implements AbstractElement
+public abstract class AbstractElementImpl implements AbstractElement
 {
+  // The cached ID
   protected ObjectName id;
-
+  
   /**
    * Get the ID of this element
    */
-  public ObjectName getID()
-  {
-    if (id == null)
-    {
-      StringBuilder str = new StringBuilder(Constants.ID_DOMAIN + ":");
-      str.append("type=Other,id=" + new UID());
-      id = ObjectNameFactory.create(str.toString());
-    }
-    return id;
-  }
-
+  public abstract ObjectName getID();
+  
   /**
    * Called when the process is created
    */
-  protected void createElement(Process proc)
+  protected void create(Process proc)
   {
     // nothing to do
   }
@@ -67,7 +56,7 @@
   /**
    * Called when the process is registered
    */
-  protected void registerElement(Process proc)
+  protected void register(Process proc)
   {
     // nothing to do
   }
@@ -75,7 +64,7 @@
   /**
    * Called when the process is unregistered
    */
-  protected void unregisterElement(Process proc)
+  protected void unregister(Process proc)
   {
     // nothing to do
   }
@@ -83,7 +72,7 @@
   /**
    * Called when the process is destroyed
    */
-  protected void destroyElement(Process proc)
+  protected void destroy(Process proc)
   {
     // nothing to do
   }

Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ActivityImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ActivityImpl.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ActivityImpl.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -300,9 +300,9 @@
   }
 
   @Override
-  protected void createElement(Process proc)
+  protected void create(Process proc)
   {
-    super.createElement(proc);
+    super.create(proc);
 
     // Validate InputSets
     for (InputSet inSet : inputSets)

Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/EndEventImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/EndEventImpl.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/EndEventImpl.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -27,12 +27,16 @@
 import java.util.Collections;
 import java.util.List;
 
+import javax.management.ObjectName;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.jboss.bpm.client.SignalManager;
+import org.jboss.bpm.model.Constants;
 import org.jboss.bpm.model.EndEvent;
 import org.jboss.bpm.model.EventDetail;
 import org.jboss.bpm.model.MessageEventDetail;
+import org.jboss.bpm.model.ObjectNameFactory;
 import org.jboss.bpm.model.Process;
 import org.jboss.bpm.model.SequenceFlow;
 import org.jboss.bpm.model.Signal;
@@ -40,6 +44,7 @@
 import org.jboss.bpm.runtime.SignalHandler;
 import org.jboss.bpm.runtime.Token;
 import org.jboss.bpm.runtime.TokenExecutor;
+import org.jboss.util.id.UID;
 
 /**
  * As the name implies, the End Event indicates where a Process will end.
@@ -64,6 +69,18 @@
     super(name);
   }
 
+  @Override
+  public ObjectName getID()
+  {
+    if (id == null)
+    {
+      StringBuilder str = new StringBuilder(Constants.ID_DOMAIN + ":");
+      str.append("type=EndEvent,name=" + getName() + ",id=" + new UID());
+      id = ObjectNameFactory.create(str.toString());
+    }
+    return id;
+  }
+  
   public SequenceFlow getInFlow()
   {
     return inFlow;
@@ -135,9 +152,9 @@
   }
 
   @Override
-  protected void createElement(Process proc)
+  protected void create(Process proc)
   {
-    super.createElement(proc);
+    super.create(proc);
     
     // Initialize Results
     for (EventDetail result : getResult())

Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/EventImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/EventImpl.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/EventImpl.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -21,12 +21,7 @@
  */
 package org.jboss.bpm.ri.model.impl;
 
-import javax.management.ObjectName;
-
-import org.jboss.bpm.model.Constants;
 import org.jboss.bpm.model.Event;
-import org.jboss.bpm.model.ObjectNameFactory;
-import org.jboss.util.id.UID;
 
 //$Id$
 
@@ -44,16 +39,4 @@
   {
     super(name);
   }
-
-  @Override
-  public ObjectName getID()
-  {
-    if (id == null)
-    {
-      StringBuilder str = new StringBuilder(Constants.ID_DOMAIN + ":");
-      str.append("type=Event,name=" + getName() + ",id=" + new UID());
-      id = ObjectNameFactory.create(str.toString());
-    }
-    return id;
-  }
 }
\ No newline at end of file

Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/FlowObjectImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/FlowObjectImpl.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/FlowObjectImpl.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -212,9 +212,9 @@
   }
 
   @Override
-  protected void createElement(Process proc)
+  protected void create(Process proc)
   {
-    super.createElement(proc);
+    super.create(proc);
     this.proc = proc;
 
     // Check required name

Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/GatewayImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/GatewayImpl.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/GatewayImpl.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -75,7 +75,7 @@
     if (id == null)
     {
       StringBuilder str = new StringBuilder(Constants.ID_DOMAIN + ":");
-      str.append("type=Gateway,name=" + getName() + ",id=" + new UID());
+      str.append("type=" + getGatewayType() + "Gateway,name=" + getName() + ",id=" + new UID());
       id = ObjectNameFactory.create(str.toString());
     }
     return id;

Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/GraphicalElementImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/GraphicalElementImpl.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/GraphicalElementImpl.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -26,7 +26,8 @@
 import org.jboss.bpm.model.GraphicalElement;
 
 /**
- * 
+ * A graphical element
+ *  
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */

Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/IntermediateEventImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/IntermediateEventImpl.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/IntermediateEventImpl.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -27,15 +27,20 @@
 import java.util.Collections;
 import java.util.List;
 
+import javax.management.ObjectName;
+
 import org.jboss.bpm.client.SignalManager;
 import org.jboss.bpm.model.ConnectingObject;
+import org.jboss.bpm.model.Constants;
 import org.jboss.bpm.model.EventDetail;
 import org.jboss.bpm.model.IntermediateEvent;
+import org.jboss.bpm.model.ObjectNameFactory;
 import org.jboss.bpm.model.SequenceFlow;
 import org.jboss.bpm.model.Signal;
 import org.jboss.bpm.runtime.SignalHandler;
 import org.jboss.bpm.runtime.Token;
 import org.jboss.bpm.runtime.TokenExecutor;
+import org.jboss.util.id.UID;
 
 /**
  * An Intermediate Event is an Event that occurs after a Process has been started. It will affect the Flow of the Process, but will not start or (directly) terminate
@@ -57,6 +62,18 @@
     super(name);
   }
 
+  @Override
+  public ObjectName getID()
+  {
+    if (id == null)
+    {
+      StringBuilder str = new StringBuilder(Constants.ID_DOMAIN + ":");
+      str.append("type=IntermediateEvent,name=" + getName() + ",id=" + new UID());
+      id = ObjectNameFactory.create(str.toString());
+    }
+    return id;
+  }
+  
   public ConnectingObject getInFlow()
   {
     return inFlow;

Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ProcessBuilderImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ProcessBuilderImpl.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ProcessBuilderImpl.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -86,7 +86,7 @@
   public Process getProcess()
   {
     ProcessImpl internalProc = getProcessInternal();
-    internalProc.createElement(internalProc);
+    internalProc.create(internalProc);
     return internalProc;
   }
 

Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ProcessImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ProcessImpl.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ProcessImpl.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -308,13 +308,13 @@
   }
 
   @Override
-  public void createElement(Process proc)
+  public void create(Process proc)
   {
     if (status != ProcessStatus.None)
       throw new IllegalStateException("Cannot initialize process in state: " + status);
 
     // Initialize the Element
-    super.createElement(this);
+    super.create(this);
 
     // Set the anonymous default name
     if (getName() == null)
@@ -333,43 +333,43 @@
     for (FlowObject fo : flowObjects)
     {
       FlowObjectImpl foImpl = (FlowObjectImpl)fo;
-      foImpl.createElement(this);
+      foImpl.create(this);
     }
 
     status = ProcessStatus.Ready;
   }
 
   @Override
-  public void registerElement(Process proc)
+  public void register(Process proc)
   {
-    super.registerElement(proc);
+    super.register(proc);
     for (FlowObject fo : flowObjects)
     {
       FlowObjectImpl foImpl = (FlowObjectImpl)fo;
-      foImpl.registerElement(this);
+      foImpl.register(this);
     }
   }
 
   @Override
-  public void unregisterElement(Process proc)
+  public void unregister(Process proc)
   {
     for (FlowObject fo : flowObjects)
     {
       FlowObjectImpl foImpl = (FlowObjectImpl)fo;
-      foImpl.unregisterElement(this);
+      foImpl.unregister(this);
     }
-    super.unregisterElement(proc);
+    super.unregister(proc);
   }
 
   @Override
-  public void destroyElement(Process proc)
+  public void destroy(Process proc)
   {
     for (FlowObject fo : flowObjects)
     {
       FlowObjectImpl foImpl = (FlowObjectImpl)fo;
-      foImpl.destroyElement(this);
+      foImpl.destroy(this);
     }
-    super.destroyElement(proc);
+    super.destroy(proc);
   }
   
   protected void initializeMessageRef(Message msgRef)

Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ReceiveTaskImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ReceiveTaskImpl.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ReceiveTaskImpl.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -170,9 +170,9 @@
   }
 
   @Override
-  protected void createElement(Process proc)
+  protected void create(Process proc)
   {
-    super.createElement(proc);
+    super.create(proc);
 
     if (messageRef == null)
       throw new InvalidProcessException("A Message for the MessageRef attribute MUST be entered");

Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/SendTaskImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/SendTaskImpl.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/SendTaskImpl.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -80,9 +80,9 @@
   }
 
   @Override
-  protected void createElement(Process proc)
+  protected void create(Process proc)
   {
-    super.createElement(proc);
+    super.create(proc);
 
     if (messageRef == null)
       throw new InvalidProcessException("A Message for the MessageRef attribute MUST be entered");

Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/StartEventImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/StartEventImpl.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/StartEventImpl.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -27,21 +27,27 @@
 import java.util.Collections;
 import java.util.List;
 
+import javax.management.ObjectName;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.jboss.bpm.client.ExecutionManager;
 import org.jboss.bpm.client.SignalListener;
 import org.jboss.bpm.client.SignalManager;
+import org.jboss.bpm.model.Constants;
 import org.jboss.bpm.model.EventDetail;
+import org.jboss.bpm.model.ObjectNameFactory;
 import org.jboss.bpm.model.Process;
 import org.jboss.bpm.model.SequenceFlow;
 import org.jboss.bpm.model.Signal;
 import org.jboss.bpm.model.SignalEventDetail;
 import org.jboss.bpm.model.StartEvent;
 import org.jboss.bpm.model.Process.ProcessStatus;
+import org.jboss.bpm.model.Signal.SignalType;
 import org.jboss.bpm.runtime.SignalHandler;
 import org.jboss.bpm.runtime.Token;
 import org.jboss.bpm.runtime.TokenExecutor;
+import org.jboss.util.id.UID;
 
 /**
  * A Start Event indicates where a particular Process will start. In terms of Sequence Flow, the Start Event starts the
@@ -66,6 +72,18 @@
     super(name == null ? "Start" : name);
   }
 
+  @Override
+  public ObjectName getID()
+  {
+    if (id == null)
+    {
+      StringBuilder str = new StringBuilder(Constants.ID_DOMAIN + ":");
+      str.append("type=StartEvent,name=" + getName() + ",id=" + new UID());
+      id = ObjectNameFactory.create(str.toString());
+    }
+    return id;
+  }
+  
   public List<EventDetail> getTrigger()
   {
     return Collections.unmodifiableList(triggers);
@@ -100,6 +118,7 @@
       handler = new SignalHandler()
       {
         SignalManager signalManager = SignalManager.locateSignalManager();
+
         public void throwEnterSignal()
         {
           Signal signal = new Signal(getID(), Signal.SignalType.SYSTEM_START_EVENT_ENTER);
@@ -117,15 +136,15 @@
   }
 
   @Override
-  protected void registerElement(final Process proc)
+  protected void register(final Process proc)
   {
-    super.registerElement(proc);
-    
+    super.register(proc);
+
     for (EventDetail eventDetail : getTrigger())
     {
       EventDetailImpl eventDetailImpl = (EventDetailImpl)eventDetail;
       eventDetailImpl.initialize(this);
-      
+
       // Register the start signal listener
       if (eventDetail instanceof SignalEventDetail)
       {
@@ -136,48 +155,60 @@
           final StartEvent start = this;
           startListener = new SignalListener()
           {
+            public boolean acceptSignal(Signal signal)
+            {
+              SignalType expType = startSignal.getSignalType();
+              String expMsg = startSignal.getMessage();
+              
+              String sigMsg = signal.getMessage();
+              SignalType sigType = signal.getSignalType();
+              
+              boolean accept = (expType == sigType);
+              if (accept && expMsg != null)
+                accept = accept && expMsg.equals(sigMsg);
+              
+              return accept;
+            }
+
             public void catchSignal(Signal signal)
             {
-              if (startSignal.getSignalType() == signal.getSignalType() && startSignal.getMessage().equals(signal.getMessage()))
+              log.debug("catchSignal: " + signal);
+              ProcessStatus procStatus = proc.getProcessStatus();
+              if (procStatus == ProcessStatus.Ready || procStatus == ProcessStatus.Active)
               {
-                log.debug("catchSignal: " + signal);
-                ProcessStatus procStatus = proc.getProcessStatus();
-                if (procStatus == ProcessStatus.Ready || procStatus == ProcessStatus.Active)
-                {
-                  log.debug("Start process from signal: " + signal);
-                  ExecutionManager exManager = ExecutionManager.locateExecutionManager();
-                  exManager.startProcess(start, null);
-                }
-                else
-                {
-                  log.debug("Ignore start signal for process: " + proc);
-                }
+                log.debug("Start process from signal: " + signal);
+                ExecutionManager exManager = ExecutionManager.locateExecutionManager();
+                exManager.startProcess(start, null);
               }
+              else
+              {
+                log.debug("Ignore start signal for process: " + proc);
+              }
             }
-            
+
             public String toString()
             {
               return start + "." + startSignal;
             }
           };
           SignalManager signalManager = SignalManager.locateSignalManager();
-          signalManager.addSignalListener(null, startListener);
+          signalManager.addSignalListener(startListener);
         }
       }
     }
   }
-  
+
   @Override
-  protected void unregisterElement(final Process proc)
+  protected void unregister(final Process proc)
   {
     // Unregister the start signal listener
     if (startListener != null)
     {
       SignalManager signalManager = SignalManager.locateSignalManager();
-      signalManager.removeSignalListener(null, startListener);
+      signalManager.removeSignalListener(startListener);
       startListener = null;
     }
-    super.unregisterElement(proc);
+    super.unregister(proc);
   }
 
   public String toString()

Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/SubProcessImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/SubProcessImpl.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/SubProcessImpl.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -23,10 +23,15 @@
 
 //$Id$
 
+import javax.management.ObjectName;
+
 import org.jboss.bpm.client.SignalManager;
+import org.jboss.bpm.model.Constants;
+import org.jboss.bpm.model.ObjectNameFactory;
 import org.jboss.bpm.model.Signal;
 import org.jboss.bpm.ri.model.spec.SubProcess;
 import org.jboss.bpm.runtime.SignalHandler;
+import org.jboss.util.id.UID;
 
 /**
  * A Sub-Process is Process that is included within another Process.
@@ -47,6 +52,18 @@
     return ActivityType.SubProcess;
   }
 
+  @Override
+  public ObjectName getID()
+  {
+    if (id == null)
+    {
+      StringBuilder str = new StringBuilder(Constants.ID_DOMAIN + ":");
+      str.append("type=SubProcess,name=" + getName() + ",id=" + new UID());
+      id = ObjectNameFactory.create(str.toString());
+    }
+    return id;
+  }
+  
   public SignalHandler getSignalHandler()
   {
     SignalHandler handler = super.getSignalHandler();

Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/SupportingElementImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/SupportingElementImpl.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/SupportingElementImpl.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -23,14 +23,31 @@
 
 //$Id$
 
-import org.jboss.bpm.ri.model.spec.SupportingElement;
+import javax.management.ObjectName;
 
+import org.jboss.bpm.model.Constants;
+import org.jboss.bpm.model.ObjectNameFactory;
+import org.jboss.bpm.model.SupportingElement;
+import org.jboss.util.id.UID;
+
 /**
- * 
+ * A supporting element
+ *  
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
 @SuppressWarnings("serial")
 public abstract class SupportingElementImpl extends AbstractElementImpl implements SupportingElement
 {
+  @Override
+  public ObjectName getID()
+  {
+    if (id == null)
+    {
+      StringBuilder str = new StringBuilder(Constants.ID_DOMAIN + ":");
+      str.append("type=SupportingElement,id=" + new UID());
+      id = ObjectNameFactory.create(str.toString());
+    }
+    return id;
+  }
 }
\ No newline at end of file

Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/TaskImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/TaskImpl.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/TaskImpl.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -63,7 +63,7 @@
     if (id == null)
     {
       StringBuilder str = new StringBuilder(Constants.ID_DOMAIN + ":");
-      str.append("type=Task,name=" + getName() + ",id=" + new UID());
+      str.append("type=" + getTaskType() + "Task,name=" + getName() + ",id=" + new UID());
       id = ObjectNameFactory.create(str.toString());
     }
     return id;
@@ -77,6 +77,7 @@
       handler = new SignalHandler()
       {
         SignalManager signalManager = SignalManager.locateSignalManager();
+
         public void throwEnterSignal()
         {
           Signal signal = new Signal(getID(), Signal.SignalType.SYSTEM_TASK_ENTER);

Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/TokenExecutorImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/TokenExecutorImpl.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/TokenExecutorImpl.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -289,7 +289,6 @@
       // Notify the runtime process
       synchronized (rtProc)
       {
-        log.debug("Notify: " + rtProc);
         rtProc.notifyAll();
       }
     }

Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/spec/Condition.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/spec/Condition.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/spec/Condition.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -22,6 +22,7 @@
 package org.jboss.bpm.ri.model.spec;
 
 import org.jboss.bpm.model.Expression;
+import org.jboss.bpm.model.SupportingElement;
 
 //$Id$
 

Deleted: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/spec/SupportingElement.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/spec/SupportingElement.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/ri/model/spec/SupportingElement.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -1,36 +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.model.spec;
-
-import org.jboss.bpm.model.AbstractElement;
-
-//$Id$
-
-/**
- * A graphical BPMN element 
- * 
- * @author thomas.diesler at jboss.com
- * @since 08-Jul-2008
- */
-public interface SupportingElement extends AbstractElement
-{
-}
\ No newline at end of file

Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/test/java/org/jboss/bpm/runtime/ExecutionManagerTest.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/test/java/org/jboss/bpm/runtime/ExecutionManagerTest.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/test/java/org/jboss/bpm/runtime/ExecutionManagerTest.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -61,7 +61,7 @@
 
     ProcessStatus status = em.waitForEnd(proc);
     assertEquals(ProcessStatus.Completed, status);
-    
+
     ProcessManager pm = ProcessManager.locateProcessManager();
     assertNull("Process should be unregistered", pm.getProcessByID(proc.getID()));
   }
@@ -86,7 +86,7 @@
 
     status = em.waitForEnd(proc);
     assertEquals(ProcessStatus.Completed, status);
-    
+
     ProcessManager pm = ProcessManager.locateProcessManager();
     assertNull("Process should be unregistered", pm.getProcessByID(proc.getID()));
   }
@@ -116,7 +116,7 @@
 
     ProcessStatus status = proc.getProcessStatus();
     assertEquals(ProcessStatus.Aborted, status);
-    
+
     ProcessManager pm = ProcessManager.locateProcessManager();
     assertNull("Process should be unregistered", pm.getProcessByID(proc.getID()));
   }
@@ -136,11 +136,11 @@
     em.startProcess(proc, null);
 
     SignalManager sm = SignalManager.locateSignalManager();
-    sm.throwSignal(new Signal(getMessageListenerID(), SignalType.USER_SIGNAL, "A"));
+    sm.throwSignal(new Signal(getTestID(), 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()));
   }
@@ -171,7 +171,7 @@
 
     ProcessStatus status = proc.getProcessStatus();
     assertEquals(ProcessStatus.Aborted, status);
-    
+
     ProcessManager pm = ProcessManager.locateProcessManager();
     assertNull("Process should be unregistered", pm.getProcessByID(proc.getID()));
   }
@@ -179,40 +179,49 @@
   public void testStartTwice() throws Exception
   {
     ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
-    procBuilder.addProcess(getName()).addStartEvent("Start").addSequenceFlow("TaskA").
-    addTask("TaskA").addSequenceFlow("End").addEndEvent("End");
+    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 boolean acceptSignal(Signal signal)
+      {
+        return signal.getSignalType() == SignalType.SYSTEM_TASK_ENTER;
+      }
+
       public void catchSignal(Signal signal)
       {
-        if (signal.getSignalType() == SignalType.SYSTEM_TASK_ENTER)
+        try
         {
-          try
-          {
-            proc.startProcess();
-            fail("Cannot start process twice");
-          }
-          catch (RuntimeException rte)
-          {
-            signalException = rte;
-          }
+          proc.startProcess();
+          fail("Cannot start process twice");
         }
+        catch (RuntimeException rte)
+        {
+          signalException = rte;
+        }
       }
     }
     TestSignalListener sigListener = new TestSignalListener();
-    SignalManager sm = SignalManager.locateSignalManager();
-    sm.addSignalListener(getMessageListenerID(), sigListener);
-    
-    proc.startProcess();
-    proc.waitForEnd();
-    
+    SignalManager sigManager = SignalManager.locateSignalManager();
+    sigManager.addSignalListener(sigListener);
+
+    try
+    {
+      proc.startProcess();
+      proc.waitForEnd();
+    }
+    finally
+    {
+      sigManager.removeSignalListener(sigListener);
+    }
+
     assertNotNull("Signal Exception expected", sigListener.signalException);
   }
-  
+
   @SuppressWarnings("serial")
   public static class ThrowHandler implements ExecutionHandler
   {

Modified: jbossbpm/spec/branches/tdiesler/modules/samples/airticket/server/src/main/java/org/jboss/bpm/samples/airticket/server/AirticketServiceImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/samples/airticket/server/src/main/java/org/jboss/bpm/samples/airticket/server/AirticketServiceImpl.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/samples/airticket/server/src/main/java/org/jboss/bpm/samples/airticket/server/AirticketServiceImpl.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -52,7 +52,7 @@
       AirticketMessageListener msgListener = new AirticketMessageListener(messageQueue);
       mm.addMessageListener(msgListener);
       
-      sm.addSignalListener(sampleID, new AirticketSignalListener());
+      sm.addSignalListener(new AirticketSignalListener());
       
       httpSession.setAttribute("messageQueue", messageQueue);
     }
@@ -194,6 +194,11 @@
 
   class AirticketSignalListener implements SignalListener
   {
+    public boolean acceptSignal(Signal signal)
+    {
+      return true;
+    }
+
     public void catchSignal(Signal signal)
     {
       System.out.println(signal);

Modified: jbossbpm/spec/branches/tdiesler/modules/samples/airticket/server/src/test/java/org/jboss/bpm/samples/airticket/AirticketTest.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/samples/airticket/server/src/test/java/org/jboss/bpm/samples/airticket/AirticketTest.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/samples/airticket/server/src/test/java/org/jboss/bpm/samples/airticket/AirticketTest.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -76,7 +76,7 @@
   }
   
   @Override
-  public ObjectName getMessageListenerID()
+  public ObjectName getTestID()
   {
     return ObjectNameFactory.create("jboss.bpm:client=AirticketTest");
   }
@@ -84,14 +84,14 @@
   @Override
   public MessageListener getMessageListener()
   {
-    msgListener = new AirticketMessageListener(getMessageListenerID());
+    msgListener = new AirticketMessageListener(getTestID());
     return msgListener;
   }
 
   @Override
   protected void tearDown() throws Exception
   {
-    messageManager.removeMessageListener(getMessageListenerID());
+    messageManager.removeMessageListener(getTestID());
     super.tearDown();
   }
 
@@ -137,7 +137,7 @@
   
   protected Process getProcess() throws IOException
   {
-    AirticketProcessBuilder builder = new AirticketProcessBuilder(getMessageListenerID());
+    AirticketProcessBuilder builder = new AirticketProcessBuilder(getTestID());
     return builder.buildProcess();
   }
   

Modified: jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/activity/ActivityPropertyTest.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/activity/ActivityPropertyTest.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/activity/ActivityPropertyTest.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -68,7 +68,7 @@
     taskBuilder.addAssignment(AssignTime.Start, ExpressionLanguage.MVEL, "ActivityProperties_TaskA_foo", "foo");
     procBuilder.addEndEvent("End").addEventDetail(EventDetail.EventDetailType.Message).addMessageRef("EndMessage");
     MessageBuilder msgBuilder = procBuilder.addMessage("EndMessage");
-    msgBuilder.addToRef(getMessageListenerID()).addProperty("foo", null, true);
+    msgBuilder.addToRef(getTestID()).addProperty("foo", null, true);
     Process proc = procBuilder.getProcess();
     return proc;
   }

Modified: jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveGatewayMergeTest.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveGatewayMergeTest.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveGatewayMergeTest.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -55,18 +55,25 @@
   public void testGateA() 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(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "B");
-    signalManager.addSignalListener(getMessageListenerID(), new MergeListener(startTrigger));
+    SignalManager sigManager = SignalManager.locateSignalManager();
+    MergeListener sigListener = new MergeListener(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "B"));
+    sigManager.addSignalListener(sigListener);
 
-    // Send start trigger signal
-    signalManager.throwSignal(new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+    try
+    {
+      // Send start trigger signal
+      proc.startProcess();
+      sigManager.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
 
-    // Wait for the process to end
-    proc.waitForEnd();
+      // Wait for the process to end
+      proc.waitForEnd();
+    }
+    finally
+    {
+      sigManager.removeSignalListener(sigListener);
+    }
 
     // Verify the result
     Message endMessage = getMessages().get(0);
@@ -77,18 +84,25 @@
   public void testGateB() 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(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "A");
-    signalManager.addSignalListener(getMessageListenerID(), new MergeListener(startTrigger));
+    SignalManager sigManager = SignalManager.locateSignalManager();
+    MergeListener sigListener = new MergeListener(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+    sigManager.addSignalListener(sigListener);
 
-    // Send start trigger signal
-    signalManager.throwSignal(new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "B"));
+    try
+    {
+      // Send start trigger signal
+      proc.startProcess();
+      sigManager.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "B"));
 
-    // Wait for the process to end
-    proc.waitForEnd();
+      // Wait for the process to end
+      proc.waitForEnd();
+    }
+    finally
+    {
+      sigManager.removeSignalListener(sigListener);
+    }
 
     // Verify the result
     Message endMessage = getMessages().get(0);
@@ -99,38 +113,50 @@
   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(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "A");
-    signalManager.addSignalListener(getMessageListenerID(), new MergeListener(startTrigger));
+    SignalManager sigManager = SignalManager.locateSignalManager();
+    MergeListener sigListener = new MergeListener(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+    sigManager.addSignalListener(sigListener);
 
-    // Send start trigger signal
-    signalManager.throwSignal(new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "A"));
-
     try
     {
-      proc.waitForEnd();
-      fail("Expected: Unexpected token from: SequenceFlow[TaskA->Merge]");
+      // Send start trigger signal
+      proc.startProcess();
+      sigManager.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+
+      try
+      {
+        proc.waitForEnd();
+        fail("Expected: Unexpected token from: SequenceFlow[TaskA->Merge]");
+      }
+      catch (RuntimeException rte)
+      {
+        // expected
+      }
     }
-    catch (RuntimeException rte)
+    finally
     {
-      // expected
+      sigManager.removeSignalListener(sigListener);
     }
 
-    // Restart the process
-    proc.startProcess();
-    
     // Add a signal listener that sends the other start trigger signal
-    startTrigger = new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "B");
-    signalManager.addSignalListener(getMessageListenerID(), new MergeListener(startTrigger));
+    sigListener = new MergeListener(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "B"));
+    sigManager.addSignalListener(sigListener);
 
-    // Send start trigger signal
-    signalManager.throwSignal(new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+    try
+    {
+      // Send start trigger signal
+      proc.startProcess();
+      sigManager.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
 
-    // Wait for the process to end
-    proc.waitForEnd();
+      // Wait for the process to end
+      proc.waitForEnd();
+    }
+    finally
+    {
+      sigManager.removeSignalListener(sigListener);
+    }
 
     // Verify the result
     Message endMessage = getMessages().get(0);
@@ -142,19 +168,21 @@
   {
     ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
     EventBuilder eventBuilder = procBuilder.addProcess(getName()).addStartEvent("StartA");
-    eventBuilder.addEventDetail(EventDetail.EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "A").addSequenceFlow("TaskA");
+    eventBuilder.addEventDetail(EventDetail.EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "A").addSequenceFlow(
+        "TaskA");
     TaskBuilder taskBuilder = procBuilder.addTask("TaskA");
     taskBuilder.addAssignment(AssignTime.Start, ExpressionLanguage.MVEL, "'TaskA'", "taskValue");
     taskBuilder.addSequenceFlow("Merge");
     eventBuilder = procBuilder.addStartEvent("StartB");
-    eventBuilder.addEventDetail(EventDetail.EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "B").addSequenceFlow("TaskB");
+    eventBuilder.addEventDetail(EventDetail.EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "B").addSequenceFlow(
+        "TaskB");
     taskBuilder = procBuilder.addTask("TaskB");
     taskBuilder.addAssignment(AssignTime.Start, ExpressionLanguage.MVEL, "'TaskB'", "taskValue");
     taskBuilder.addSequenceFlow("Merge");
     procBuilder.addGateway("Merge", Gateway.GatewayType.Exclusive).addSequenceFlow("End");
     procBuilder.addEndEvent("End").addEventDetail(EventDetail.EventDetailType.Message).addMessageRef("EndMessage");
     MessageBuilder msgBuilder = procBuilder.addMessage("EndMessage");
-    msgBuilder.addToRef(getMessageListenerID()).addProperty("taskValue", null, true);
+    msgBuilder.addToRef(getTestID()).addProperty("taskValue", null, true);
     Process proc = procBuilder.getProcess();
     return proc;
   }
@@ -168,16 +196,18 @@
       this.nextSignal = nextSignal;
     }
 
+    public boolean acceptSignal(Signal signal)
+    {
+      return signal.getSignalType() == SignalType.SYSTEM_GATEWAY_ENTER;
+    }
+
     public void catchSignal(Signal signal)
     {
-      if (signal.getSignalType() == SignalType.SYSTEM_GATEWAY_ENTER)
+      if (nextSignal != null)
       {
-        if (nextSignal != null)
-        {
-          SignalManager signalManager = SignalManager.locateSignalManager();
-          signalManager.throwSignal(nextSignal);
-          nextSignal = null;
-        }
+        SignalManager signalManager = SignalManager.locateSignalManager();
+        signalManager.throwSignal(nextSignal);
+        nextSignal = null;
       }
     }
   }

Modified: jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveGatewaySplitTest.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveGatewaySplitTest.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveGatewaySplitTest.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -56,7 +56,7 @@
 
     List<Signal> endSignals = getSignals(Signal.SignalType.SYSTEM_END_EVENT_EXIT);
     assertEquals(1, endSignals.size());
-    assertEquals("EndA", endSignals.get(0).getFromRef());
+    assertEquals("EndA", endSignals.get(0).getFromRef().getKeyProperty("name"));
   }
 
   public void testGateB() throws Exception
@@ -70,7 +70,7 @@
 
     List<Signal> endSignals = getSignals(Signal.SignalType.SYSTEM_END_EVENT_EXIT);
     assertEquals(1, endSignals.size());
-    assertEquals("EndB", endSignals.get(0).getFromRef());
+    assertEquals("EndB", endSignals.get(0).getFromRef().getKeyProperty("name"));
   }
 
   public void testInvalidGate() throws Exception

Modified: jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/inclusive/InclusiveGatewayMergeTest.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/inclusive/InclusiveGatewayMergeTest.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/inclusive/InclusiveGatewayMergeTest.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -39,9 +39,8 @@
 import org.jboss.bpm.test.DefaultEngineTestCase;
 
 /**
- * Inclusive gateway that has multiple incoming sequence flows. 
- * All tokens arriving from incoming sequence flows proceeds unconditionally along the outgoing sequence flow. 
- * The inclusive join is stateless.
+ * Inclusive gateway that has multiple incoming sequence flows. All tokens arriving from incoming sequence flows
+ * proceeds unconditionally along the outgoing sequence flow. The inclusive join is stateless.
  * 
  * @author thomas.diesler at jboss.com
  * @since 06-Aug-2008
@@ -51,19 +50,26 @@
   public void testGateA() 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(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "B");
-    signalManager.addSignalListener(getMessageListenerID(), new MergeListener(startTrigger));
-    
-    // Send start trigger signals
-    signalManager.throwSignal(new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+    SignalManager sigManager = SignalManager.locateSignalManager();
+    MergeListener sigListener = new MergeListener(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "B"));
+    sigManager.addSignalListener(sigListener);
 
-    // Wait for the process to end
-    proc.waitForEnd();
+    try
+    {
+      // Send start trigger signals
+      proc.startProcess();
+      sigManager.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
 
+      // Wait for the process to end
+      proc.waitForEnd();
+    }
+    finally
+    {
+      sigManager.removeSignalListener(sigListener);
+    }
+
     List<Signal> endSignals = getSignals(Signal.SignalType.SYSTEM_END_EVENT_EXIT);
     assertEquals(2, endSignals.size());
   }
@@ -72,10 +78,10 @@
   {
     ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
     EventBuilder eventBuilder = procBuilder.addProcess(getName()).addStartEvent("StartA");
-    eventBuilder.addEventDetail(EventDetail.EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "A").addSequenceFlow("Merge");
-    eventBuilder = procBuilder.addStartEvent("StartB");
-    eventBuilder.addEventDetail(EventDetail.EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "B").addSequenceFlow("Merge");
-    procBuilder.addGateway("Merge", Gateway.GatewayType.Inclusive).addSequenceFlow("End");
+    eventBuilder.addEventDetail(EventDetail.EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "A");
+    eventBuilder = procBuilder.addSequenceFlow("Merge").addStartEvent("StartB");
+    eventBuilder.addEventDetail(EventDetail.EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "B");
+    procBuilder.addSequenceFlow("Merge").addGateway("Merge", Gateway.GatewayType.Inclusive).addSequenceFlow("End");
     procBuilder.addEndEvent("End");
     Process proc = procBuilder.getProcess();
     return proc;
@@ -90,16 +96,18 @@
       this.nextSignal = nextSignal;
     }
 
+    public boolean acceptSignal(Signal signal)
+    {
+      return signal.getSignalType() == SignalType.SYSTEM_GATEWAY_ENTER;
+    }
+
     public void catchSignal(Signal signal)
     {
-      if (signal.getSignalType() == SignalType.SYSTEM_GATEWAY_ENTER)
+      if (nextSignal != null)
       {
-        if (nextSignal != null)
-        {
-          SignalManager signalManager = SignalManager.locateSignalManager();
-          signalManager.throwSignal( nextSignal);
-          nextSignal = null;
-        }
+        SignalManager signalManager = SignalManager.locateSignalManager();
+        signalManager.throwSignal(nextSignal);
+        nextSignal = null;
       }
     }
   }

Modified: jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/inclusive/InclusiveGatewaySplitTest.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/inclusive/InclusiveGatewaySplitTest.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/inclusive/InclusiveGatewaySplitTest.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -69,7 +69,7 @@
 
     List<Signal> endSignals = getSignals(Signal.SignalType.SYSTEM_END_EVENT_EXIT);
     assertEquals(1, endSignals.size());
-    assertEquals("EndB", endSignals.get(0).getFromRef());
+    assertEquals("EndB", endSignals.get(0).getFromRef().getKeyProperty("name"));
   }
 
   public Process getProcess() throws IOException

Modified: jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/parallel/ParallelGatewayMergeTest.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/parallel/ParallelGatewayMergeTest.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/parallel/ParallelGatewayMergeTest.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -57,16 +57,23 @@
     Process proc = getProcess();
 
     // Add a signal listener that sends the other start trigger signal
-    SignalManager signalManager = SignalManager.locateSignalManager();
-    Signal startTrigger = new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "B");
-    signalManager.addSignalListener(getMessageListenerID(), new MergeListener(startTrigger));
+    SignalManager sigManager = SignalManager.locateSignalManager();
+    MergeListener sigListener = new MergeListener(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "B"));
+    sigManager.addSignalListener(sigListener);
 
-    // Start the process and send start trigger signal
-    proc.startProcess();
-    signalManager.throwSignal(new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+    try
+    {
+      // Start the process and send start trigger signal
+      proc.startProcess();
+      sigManager.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
 
-    // Wait for the process to end
-    proc.waitForEnd();
+      // Wait for the process to end
+      proc.waitForEnd();
+    }
+    finally
+    {
+      sigManager.removeSignalListener(sigListener);
+    }
 
     // Verify the result
     Message endMessage = getMessages().get(0);
@@ -81,7 +88,7 @@
     // Start the process and send start trigger signal
     proc.startProcess();
     SignalManager signalManager = SignalManager.locateSignalManager();
-    signalManager.throwSignal(new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+    signalManager.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
 
     // Wait for the process to end
     try
@@ -100,34 +107,48 @@
     Process proc = getProcess();
 
     // Add a signal listener that sends the other start trigger signal
-    SignalManager signalManager = SignalManager.locateSignalManager();
-    Signal startTrigger = new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "A");
-    signalManager.addSignalListener(getMessageListenerID(), new MergeListener(startTrigger));
+    SignalManager sigManager = SignalManager.locateSignalManager();
+    MergeListener sigListener = new MergeListener(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+    sigManager.addSignalListener(sigListener);
 
-    // Start the process and send start trigger signal
-    proc.startProcess();
-    signalManager.throwSignal(new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "A"));
-
     try
     {
-      proc.waitForEnd();
-      fail("Expected: Unexpected token from: SequenceFlow[TaskA->Merge]");
+      // Start the process and send start trigger signal
+      proc.startProcess();
+      sigManager.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+
+      try
+      {
+        proc.waitForEnd();
+        fail("Expected: Unexpected token from: SequenceFlow[TaskA->Merge]");
+      }
+      catch (RuntimeException rte)
+      {
+        // expected
+      }
     }
-    catch (RuntimeException rte)
+    finally
     {
-      // expected
+      sigManager.removeSignalListener(sigListener);
     }
 
     // Add a signal listener that sends the other start trigger signal
-    startTrigger = new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "B");
-    signalManager.addSignalListener(getMessageListenerID(), new MergeListener(startTrigger));
+    sigListener = new MergeListener(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "B"));
+    sigManager.addSignalListener(sigListener);
 
-    // Start the process and send start trigger signal
-    proc.startProcess();
-    signalManager.throwSignal(new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+    try
+    {
+      // Start the process and send start trigger signal
+      proc.startProcess();
+      sigManager.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
 
-    // Wait for the process to end
-    proc.waitForEnd();
+      // Wait for the process to end
+      proc.waitForEnd();
+    }
+    finally
+    {
+      sigManager.removeSignalListener(sigListener);
+    }
 
     // Verify the result
     Message endMessage = getMessages().get(0);
@@ -139,19 +160,19 @@
   {
     ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
     EventBuilder eventBuilder = procBuilder.addProcess(getName()).addStartEvent("StartA");
-    eventBuilder.addEventDetail(EventDetail.EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "A").addSequenceFlow("TaskA");
-    TaskBuilder taskBuilder = procBuilder.addTask("TaskA");
+    eventBuilder.addEventDetail(EventDetail.EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "A");
+    TaskBuilder taskBuilder = procBuilder.addSequenceFlow("TaskA").addTask("TaskA");
     taskBuilder.addAssignment(AssignTime.Start, ExpressionLanguage.MVEL, "'TaskA'", "taskValueA");
     taskBuilder.addSequenceFlow("Merge");
     eventBuilder = procBuilder.addStartEvent("StartB");
-    eventBuilder.addEventDetail(EventDetail.EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "B").addSequenceFlow("TaskB");
-    taskBuilder = procBuilder.addTask("TaskB");
+    eventBuilder.addEventDetail(EventDetail.EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "B");
+    taskBuilder = procBuilder.addSequenceFlow("TaskB").addTask("TaskB");
     taskBuilder.addAssignment(AssignTime.Start, ExpressionLanguage.MVEL, "'TaskB'", "taskValueB");
     taskBuilder.addSequenceFlow("Merge");
     procBuilder.addGateway("Merge", Gateway.GatewayType.Parallel).addSequenceFlow("End");
     procBuilder.addEndEvent("End").addEventDetail(EventDetail.EventDetailType.Message).addMessageRef("EndMessage");
     MessageBuilder msgBuilder = procBuilder.addMessage("EndMessage");
-    msgBuilder.addToRef(getMessageListenerID()).addProperty("taskValueA", null, true).addProperty("taskValueB", null, true);
+    msgBuilder.addToRef(getTestID()).addProperty("taskValueA", null, true).addProperty("taskValueB", null, true);
     Process proc = procBuilder.getProcess();
     return proc;
   }
@@ -165,16 +186,18 @@
       this.nextSignal = nextSignal;
     }
 
+    public boolean acceptSignal(Signal signal)
+    {
+      return signal.getSignalType() == SignalType.SYSTEM_GATEWAY_ENTER;
+    }
+
     public void catchSignal(Signal signal)
     {
-      if (signal.getSignalType() == SignalType.SYSTEM_GATEWAY_ENTER)
+      if (nextSignal != null)
       {
-        if (nextSignal != null)
-        {
-          SignalManager signalManager = SignalManager.locateSignalManager();
-          signalManager.throwSignal(nextSignal);
-          nextSignal = null;
-        }
+        SignalManager signalManager = SignalManager.locateSignalManager();
+        signalManager.throwSignal(nextSignal);
+        nextSignal = null;
       }
     }
   }

Modified: jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/parallel/ParallelGatewaySplitTest.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/parallel/ParallelGatewaySplitTest.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/parallel/ParallelGatewaySplitTest.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -56,7 +56,7 @@
     assertEquals(2, signals.size());
     ObjectName fromRef0 = signals.get(0).getFromRef();
     ObjectName fromRef1 = signals.get(1).getFromRef();
-    String fromRefs = fromRef0.getCanonicalName() + fromRef1.getCanonicalName();
+    String fromRefs = fromRef0.getKeyProperty("name") + fromRef1.getKeyProperty("name");
     assertTrue("Unexpected from refs: " + fromRefs, fromRefs.contains("EndA"));
     assertTrue("Unexpected from refs: " + fromRefs, fromRefs.contains("EndB"));
   }

Modified: jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/process/ProcessPropertyTest.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/process/ProcessPropertyTest.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/process/ProcessPropertyTest.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -68,7 +68,7 @@
     procBuilder.addProperty("foo", "bar").addTask("TaskA").addSequenceFlow("End");
     procBuilder.addEndEvent("End").addEventDetail(EventDetail.EventDetailType.Message).addMessageRef("EndMessage");
     MessageBuilder msgBuilder = procBuilder.addMessage("EndMessage");
-    msgBuilder.addToRef(getMessageListenerID()).addProperty("foo", null, true);
+    msgBuilder.addToRef(getTestID()).addProperty("foo", null, true);
     Process proc = procBuilder.getProcess();
     return proc;
   }

Modified: jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/processmanager/ProcessManagerTest.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/processmanager/ProcessManagerTest.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/processmanager/ProcessManagerTest.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -51,23 +51,32 @@
     final ProcessManager pm = ProcessManager.locateProcessManager();
     assertNull("A process created through the builder is not registered automatically", pm.getProcessByID(procID));
 
-    SignalListener signalListener = new SignalListener()
+    SignalListener sigListener = new SignalListener()
     {
+      public boolean acceptSignal(Signal signal)
+      {
+        return signal.getSignalType() == SignalType.SYSTEM_TASK_ENTER;
+      }
+
       public void catchSignal(Signal signal)
       {
-        if (signal.getSignalType() == SignalType.SYSTEM_TASK_ENTER)
-        {
-          assertNotNull(pm.getProcessByID(procID));
-        }
+        assertNotNull(pm.getProcessByID(procID));
       }
     };
-    SignalManager sm = SignalManager.locateSignalManager();
-    sm.addSignalListener(getMessageListenerID(), signalListener);
-    
-    // Start the process, which automatically adds it to the registery
-    assertEquals(procID, proc.startProcess());
-    proc.waitForEnd();
+    SignalManager sigManager = SignalManager.locateSignalManager();
+    sigManager.addSignalListener(sigListener);
 
+    try
+    {
+      // Start the process, which automatically adds it to the registery
+      assertEquals(procID, proc.startProcess());
+      proc.waitForEnd();
+    }
+    finally
+    {
+      sigManager.removeSignalListener(sigListener);
+    }
+
     assertNull("A terminated process is removed from the registry", pm.getProcessByID(procID));
   }
 

Modified: jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/signalmanager/SignalManagerTest.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/signalmanager/SignalManagerTest.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/signalmanager/SignalManagerTest.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -38,8 +38,8 @@
 public class SignalManagerTest extends DefaultEngineTestCase
 {
   final SignalManager sigManager = SignalManager.locateSignalManager();
-  final Signal sigA = new Signal(getMessageListenerID(), SignalType.USER_SIGNAL, "A");
-  final Signal sigB = new Signal(getMessageListenerID(), SignalType.USER_SIGNAL, "B");
+  final Signal sigA = new Signal(getTestID(), SignalType.USER_SIGNAL, "A");
+  final Signal sigB = new Signal(getTestID(), SignalType.USER_SIGNAL, "B");
 
   private Signal gotA;
   private Signal gotB;
@@ -48,26 +48,28 @@
   {
     SignalListener sigListener = new SignalListener()
     {
+      public boolean acceptSignal(Signal signal)
+      {
+        return signal.getSignalType() == SignalType.USER_SIGNAL;
+      }
+
       public void catchSignal(Signal signal)
       {
         String sigMsg = signal.getMessage();
-        if (signal.getSignalType() == SignalType.USER_SIGNAL)
+        if ("A".equals(sigMsg))
         {
-          if ("A".equals(sigMsg))
-          {
-            gotA = signal;
-            sigManager.throwSignal(sigB);
-          }
-          if ("B".equals(sigMsg))
-          {
-            gotB = signal;
-          }
+          gotA = signal;
+          sigManager.throwSignal(sigB);
         }
+        if ("B".equals(sigMsg))
+        {
+          gotB = signal;
+        }
       }
     };
-    sigManager.addSignalListener(getMessageListenerID(), sigListener);
+    sigManager.addSignalListener(sigListener);
     sigManager.throwSignal(sigA);
-    sigManager.removeSignalListeners(getMessageListenerID());
+    sigManager.removeSignalListener(sigListener);
 
     assertEquals(sigA, gotA);
     assertEquals(sigB, gotB);
@@ -77,26 +79,28 @@
   {
     SignalListener sigListener = new SignalListener()
     {
+      public boolean acceptSignal(Signal signal)
+      {
+        return signal.getSignalType() == SignalType.USER_SIGNAL;
+      }
+
       public void catchSignal(Signal signal)
       {
         String sigMsg = signal.getMessage();
-        if (signal.getSignalType() == SignalType.USER_SIGNAL)
+        if ("A".equals(sigMsg))
         {
-          if ("A".equals(sigMsg))
-          {
-            gotA = signal;
-            sendThreadSignal(sigB);
-          }
-          if ("B".equals(sigMsg))
-          {
-            gotB = signal;
-          }
+          gotA = signal;
+          sendThreadSignal(sigB);
         }
+        if ("B".equals(sigMsg))
+        {
+          gotB = signal;
+        }
       }
     };
-    sigManager.addSignalListener(getMessageListenerID(), sigListener);
+    sigManager.addSignalListener(sigListener);
     sendThreadSignal(sigA);
-    sigManager.removeSignalListeners(getMessageListenerID());
+    sigManager.removeSignalListener(sigListener);
 
     assertEquals(sigA, gotA);
     assertEquals(sigB, gotB);

Modified: jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/startevent/StartEventSignalTest.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/startevent/StartEventSignalTest.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/startevent/StartEventSignalTest.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -57,7 +57,7 @@
     // Start the process and send start trigger signal
     proc.startProcess();
     SignalManager signalManager = SignalManager.locateSignalManager();
-    signalManager.throwSignal(new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+    signalManager.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
 
     // Wait for the process to end
     proc.waitForEnd();
@@ -74,14 +74,14 @@
     // Start the process and send start trigger signal
     proc.startProcess();
     SignalManager signalManager = SignalManager.locateSignalManager();
-    signalManager.throwSignal(new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+    signalManager.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
 
     // Wait for the process to end
     proc.waitForEnd();
 
     // Start the process and send start trigger signal
     proc.startProcess();
-    signalManager.throwSignal(new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+    signalManager.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
 
     // Wait for the process to end
     proc.waitForEnd();
@@ -98,16 +98,23 @@
     Process proc = getProcess();
 
     // Add a signal listener that sends the other start trigger signal
-    SignalManager signalManager = SignalManager.locateSignalManager();
-    Signal startTrigger = new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "A");
-    signalManager.addSignalListener(getMessageListenerID(), new TaskListener(startTrigger));
+    TaskListener sigListener = new TaskListener(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+    SignalManager sigManager = SignalManager.locateSignalManager();
+    sigManager.addSignalListener(sigListener);
 
-    // Start the process and send start trigger signal
-    proc.startProcess();
-    signalManager.throwSignal(new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+    try
+    {
+      // Start the process and send start trigger signal
+      proc.startProcess();
+      sigManager.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
 
-    // Wait for the process to end
-    proc.waitForEnd();
+      // Wait for the process to end
+      proc.waitForEnd();
+    }
+    finally
+    {
+      sigManager.removeSignalListener(sigListener);
+    }
 
     // Verify the result
     List<Message> messages = getMessages();
@@ -127,7 +134,7 @@
     taskBuilder.addSequenceFlow("End");
     procBuilder.addEndEvent("End").addEventDetail(EventDetail.EventDetailType.Message).addMessageRef("EndMessage");
     MessageBuilder msgBuilder = procBuilder.addMessage("EndMessage");
-    msgBuilder.addToRef(getMessageListenerID()).addProperty("taskValue", null, true);
+    msgBuilder.addToRef(getTestID()).addProperty("taskValue", null, true);
     Process proc = procBuilder.getProcess();
     return proc;
   }
@@ -141,16 +148,18 @@
       this.nextSignal = nextSignal;
     }
 
+    public boolean acceptSignal(Signal signal)
+    {
+      return signal.getSignalType() == SignalType.SYSTEM_TASK_ENTER;
+    }
+
     public void catchSignal(Signal signal)
     {
-      if (signal.getSignalType() == SignalType.SYSTEM_TASK_ENTER)
+      if (nextSignal != null)
       {
-        if (nextSignal != null)
-        {
-          SignalManager signalManager = SignalManager.locateSignalManager();
-          signalManager.throwSignal(nextSignal);
-          nextSignal = null;
-        }
+        SignalManager signalManager = SignalManager.locateSignalManager();
+        signalManager.throwSignal(nextSignal);
+        nextSignal = null;
       }
     }
   }

Modified: jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/task/ReceiveTaskTest.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/task/ReceiveTaskTest.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/cts/task/ReceiveTaskTest.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -64,11 +64,11 @@
       // expected
     }
   }
-  
+
   public void testUnregisteredProcess() throws Exception
   {
     Process proc = getProcess();
-    
+
     MessageManager msgManager = MessageManager.locateMessageManager();
     try
     {
@@ -90,10 +90,10 @@
     // Send the message before the process is started
     MessageManager msgManager = MessageManager.locateMessageManager();
     msgManager.sendMessage(proc.getID(), "TaskA", getMessage());
-    
+
     proc.startProcess();
     proc.waitForEnd();
-    
+
     Message endMsg = getMessages().get(0);
     assertNotNull("End message expected", endMsg);
     assertEquals("bar", endMsg.getPropertyValue("foo"));
@@ -102,29 +102,39 @@
   public void testSuspendedToken() throws Exception
   {
     final Process proc = getProcess();
-    SignalListener signalListener = new SignalListener()
+    SignalListener sigListener = new SignalListener()
     {
       private boolean sendMessage = true;
+
+      public boolean acceptSignal(Signal signal)
+      {
+        return signal.getSignalType() == SignalType.SYSTEM_TASK_EXIT;
+      }
+
       public void catchSignal(Signal signal)
       {
         // Send the message after the process reached the receive task
-        if (signal.getSignalType() == SignalType.SYSTEM_TASK_EXIT)
+        if (sendMessage == true)
         {
-          if (sendMessage == true)
-          {
-            sendMessage = false;
-            MessageManager msgManager = MessageManager.locateMessageManager();
-            msgManager.sendMessage(proc.getID(), "TaskA", getMessage());
-          }
+          sendMessage = false;
+          MessageManager msgManager = MessageManager.locateMessageManager();
+          msgManager.sendMessage(proc.getID(), "TaskA", getMessage());
         }
       }
     };
     SignalManager sigManager = SignalManager.locateSignalManager();
-    sigManager.addSignalListener(getMessageListenerID(), signalListener);
-    
-    proc.startProcess();
-    proc.waitForEnd();
-    
+    sigManager.addSignalListener(sigListener);
+
+    try
+    {
+      proc.startProcess();
+      proc.waitForEnd();
+    }
+    finally
+    {
+      sigManager.removeSignalListener(sigListener);
+    }
+
     Message endMsg = getMessages().get(0);
     assertNotNull("End message expected", endMsg);
     assertEquals("bar", endMsg.getPropertyValue("foo"));
@@ -136,14 +146,14 @@
     Message msg = procBuilder.newMessage("ReceiveTaskMessage").addProperty("foo", "bar", true).getMessage();
     return msg;
   }
-  
+
   private Process getProcess()
   {
     ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
     MessageBuilder msgBuilder = procBuilder.addProcess("ReceiveTaskTest").addMessage("ReceiveTaskMessage");
     msgBuilder.addProperty("foo", null, true);
     msgBuilder = procBuilder.addMessage("EndEventMessage");
-    msgBuilder.addToRef(getMessageListenerID()).addProperty("foo", null, true);
+    msgBuilder.addToRef(getTestID()).addProperty("foo", null, true);
     procBuilder.addStartEvent("Start").addSequenceFlow("TaskA");
     procBuilder.addTask("TaskA", Task.TaskType.Receive).addMessageRef("ReceiveTaskMessage");
     EventBuilder eventBuilder = procBuilder.addSequenceFlow("End").addEndEvent("End");

Modified: jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/exclusivechoice/ExclusiveChoiceTest.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/exclusivechoice/ExclusiveChoiceTest.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/exclusivechoice/ExclusiveChoiceTest.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -56,7 +56,7 @@
 
     List<Signal> endSignals = getSignals(Signal.SignalType.SYSTEM_END_EVENT_EXIT);
     assertEquals(1, endSignals.size());
-    assertEquals("EndA", endSignals.get(0).getFromRef());
+    assertEquals("EndA", endSignals.get(0).getFromRef().getKeyProperty("name"));
   }
 
   public void testGateB() throws Exception
@@ -70,7 +70,7 @@
 
     List<Signal> endSignals = getSignals(Signal.SignalType.SYSTEM_END_EVENT_EXIT);
     assertEquals(1, endSignals.size());
-    assertEquals("EndB", endSignals.get(0).getFromRef());
+    assertEquals("EndB", endSignals.get(0).getFromRef().getKeyProperty("name"));
   }
 
   public void testInvalidGate() throws Exception

Modified: jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/multichoice/MultiChoiceTest.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/multichoice/MultiChoiceTest.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/multichoice/MultiChoiceTest.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -69,7 +69,7 @@
 
     List<Signal> endSignals = getSignals(Signal.SignalType.SYSTEM_END_EVENT_EXIT);
     assertEquals(1, endSignals.size());
-    assertEquals("EndB", endSignals.get(0).getFromRef());
+    assertEquals("EndB", endSignals.get(0).getFromRef().getKeyProperty("name"));
   }
 
   public Process getProcess() throws IOException

Modified: jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/parallelsplit/ParallelSplitTest.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/parallelsplit/ParallelSplitTest.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/parallelsplit/ParallelSplitTest.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -56,7 +56,7 @@
     assertEquals(2, signals.size());
     ObjectName fromRef0 = signals.get(0).getFromRef();
     ObjectName fromRef1 = signals.get(1).getFromRef();
-    String fromRefs = fromRef0.getCanonicalName() + fromRef1.getCanonicalName();
+    String fromRefs = fromRef0.getKeyProperty("name") + fromRef1.getKeyProperty("name");
     assertTrue("Unexpected from refs: " + fromRefs, fromRefs.contains("EndA"));
     assertTrue("Unexpected from refs: " + fromRefs, fromRefs.contains("EndB"));
   }

Modified: jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/simplemerge/SimpleMergeTest.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/simplemerge/SimpleMergeTest.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/simplemerge/SimpleMergeTest.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -39,9 +39,8 @@
 import org.jboss.bpm.test.DefaultEngineTestCase;
 
 /**
- * Inclusive gateway that has multiple incoming sequence flows. 
- * All tokens arriving from incoming sequence flows proceeds unconditionally along the outgoing sequence flow. 
- * The inclusive join is stateless.
+ * Inclusive gateway that has multiple incoming sequence flows. All tokens arriving from incoming sequence flows
+ * proceeds unconditionally along the outgoing sequence flow. The inclusive join is stateless.
  * 
  * @author thomas.diesler at jboss.com
  * @since 06-Aug-2008
@@ -51,19 +50,26 @@
   public void testSimpleMerge() 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(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "B");
-    signalManager.addSignalListener(getMessageListenerID(), new MergeListener(proc.getName(), startTrigger));
-    
-    // Send start trigger signals
-    signalManager.throwSignal(new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+    MergeListener sigListener = new MergeListener(proc.getName(), new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "B"));          
+    SignalManager sigManager = SignalManager.locateSignalManager();
+    sigManager.addSignalListener(sigListener);
 
-    // Wait for the process to end
-    proc.waitForEnd();
+    try
+    {
+      // Send start trigger signals
+      proc.startProcess();
+      sigManager.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
 
+      // Wait for the process to end
+      proc.waitForEnd();
+    }
+    finally
+    {
+      sigManager.removeSignalListener(sigListener);
+    }
+
     List<Signal> endSignals = getSignals(Signal.SignalType.SYSTEM_END_EVENT_EXIT);
     assertEquals(2, endSignals.size());
   }
@@ -90,16 +96,18 @@
       this.nextSignal = nextSignal;
     }
 
+    public boolean acceptSignal(Signal signal)
+    {
+      return signal.getSignalType() == SignalType.SYSTEM_GATEWAY_ENTER;
+    }
+
     public void catchSignal(Signal signal)
     {
-      if (signal.getSignalType() == SignalType.SYSTEM_GATEWAY_ENTER)
+      if (nextSignal != null)
       {
-        if (nextSignal != null)
-        {
-          SignalManager signalManager = SignalManager.locateSignalManager();
-          signalManager.throwSignal(nextSignal);
-          nextSignal = null;
-        }
+        SignalManager signalManager = SignalManager.locateSignalManager();
+        signalManager.throwSignal(nextSignal);
+        nextSignal = null;
       }
     }
   }

Modified: jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/synchronization/SynchronizationTest.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/synchronization/SynchronizationTest.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/synchronization/SynchronizationTest.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -57,16 +57,23 @@
     Process proc = getProcess();
 
     // Add a signal listener that sends the other start trigger signal
-    SignalManager signalManager = SignalManager.locateSignalManager();
-    Signal startTrigger = new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "B");
-    signalManager.addSignalListener(getMessageListenerID(), new MergeListener(startTrigger));
+    MergeListener sigListener = new MergeListener(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "B"));
+    SignalManager sigManager = SignalManager.locateSignalManager();
+    sigManager.addSignalListener(sigListener);
 
-    // Start the process and send start trigger signal
-    proc.startProcess();
-    signalManager.throwSignal(new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+    try
+    {
+      // Start the process and send start trigger signal
+      proc.startProcess();
+      sigManager.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
 
-    // Wait for the process to end
-    proc.waitForEnd();
+      // Wait for the process to end
+      proc.waitForEnd();
+    }
+    finally
+    {
+      sigManager.removeSignalListener(sigListener);
+    }
 
     // Verify the result
     Message endMessage = getMessages().get(0);
@@ -81,7 +88,7 @@
     // Start the process and send start trigger signal
     proc.startProcess();
     SignalManager signalManager = SignalManager.locateSignalManager();
-    signalManager.throwSignal(new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+    signalManager.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
 
     // Wait for the process to end
     try
@@ -100,34 +107,50 @@
     Process proc = getProcess();
 
     // Add a signal listener that sends the other start trigger signal
-    SignalManager signalManager = SignalManager.locateSignalManager();
-    Signal startTrigger = new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "A");
-    signalManager.addSignalListener(getMessageListenerID(), new MergeListener(startTrigger));
+    Signal startTrigger = new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A");
+    MergeListener sigListener = new MergeListener(startTrigger);
+    SignalManager sigManager = SignalManager.locateSignalManager();
+    sigManager.addSignalListener(sigListener);
 
-    // Start the process and send start trigger signal
-    proc.startProcess();
-    signalManager.throwSignal(new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "A"));
-
     try
     {
-      proc.waitForEnd();
-      fail("Expected: Unexpected token from: SequenceFlow[TaskA->Merge]");
+      // Start the process and send start trigger signal
+      proc.startProcess();
+      sigManager.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+
+      try
+      {
+        proc.waitForEnd();
+        fail("Expected: Unexpected token from: SequenceFlow[TaskA->Merge]");
+      }
+      catch (RuntimeException rte)
+      {
+        // expected
+      }
     }
-    catch (RuntimeException rte)
+    finally
     {
-      // expected
+      sigManager.removeSignalListener(sigListener);
     }
 
     // Add a signal listener that sends the other start trigger signal
-    startTrigger = new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "B");
-    signalManager.addSignalListener(getMessageListenerID(), new MergeListener(startTrigger));
+    startTrigger = new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "B");
+    sigListener = new MergeListener(startTrigger);
+    sigManager.addSignalListener(sigListener);
 
-    // Start the process and send start trigger signal
-    proc.startProcess();
-    signalManager.throwSignal(new Signal(getMessageListenerID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+    try
+    {
+      // Start the process and send start trigger signal
+      proc.startProcess();
+      sigManager.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
 
-    // Wait for the process to end
-    proc.waitForEnd();
+      // Wait for the process to end
+      proc.waitForEnd();
+    }
+    finally
+    {
+      sigManager.removeSignalListener(sigListener);
+    }
 
     // Verify the result
     Message endMessage = getMessages().get(0);
@@ -139,19 +162,19 @@
   {
     ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
     EventBuilder eventBuilder = procBuilder.addProcess("Synchronization").addStartEvent("StartA");
-    eventBuilder.addEventDetail(EventDetail.EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "A").addSequenceFlow("TaskA");
-    TaskBuilder taskBuilder = procBuilder.addTask("TaskA");
+    eventBuilder.addEventDetail(EventDetail.EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "A");
+    TaskBuilder taskBuilder = procBuilder.addSequenceFlow("TaskA").addTask("TaskA");
     taskBuilder.addAssignment(AssignTime.Start, ExpressionLanguage.MVEL, "'TaskA'", "taskValueA");
     taskBuilder.addSequenceFlow("Merge");
     eventBuilder = procBuilder.addStartEvent("StartB");
-    eventBuilder.addEventDetail(EventDetail.EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "B").addSequenceFlow("TaskB");
-    taskBuilder = procBuilder.addTask("TaskB");
+    eventBuilder.addEventDetail(EventDetail.EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "B");
+    taskBuilder = procBuilder.addSequenceFlow("TaskB").addTask("TaskB");
     taskBuilder.addAssignment(AssignTime.Start, ExpressionLanguage.MVEL, "'TaskB'", "taskValueB");
     taskBuilder.addSequenceFlow("Merge");
     procBuilder.addGateway("Merge", Gateway.GatewayType.Parallel).addSequenceFlow("End");
     procBuilder.addEndEvent("End").addEventDetail(EventDetail.EventDetailType.Message).addMessageRef("EndMessage");
     MessageBuilder msgBuilder = procBuilder.addMessage("EndMessage");
-    msgBuilder.addToRef(getMessageListenerID()).addProperty("taskValueA", null, true).addProperty("taskValueB", null, true);
+    msgBuilder.addToRef(getTestID()).addProperty("taskValueA", null, true).addProperty("taskValueB", null, true);
     Process proc = procBuilder.getProcess();
     return proc;
   }
@@ -165,16 +188,18 @@
       this.nextSignal = nextSignal;
     }
 
+    public boolean acceptSignal(Signal signal)
+    {
+      return signal.getSignalType() == SignalType.SYSTEM_GATEWAY_ENTER;
+    }
+
     public void catchSignal(Signal signal)
     {
-      if (signal.getSignalType() == SignalType.SYSTEM_GATEWAY_ENTER)
+      if (nextSignal != null)
       {
-        if (nextSignal != null)
-        {
-          SignalManager signalManager = SignalManager.locateSignalManager();
-          signalManager.throwSignal(nextSignal);
-          nextSignal = null;
-        }
+        SignalManager signalManager = SignalManager.locateSignalManager();
+        signalManager.throwSignal(nextSignal);
+        nextSignal = null;
       }
     }
   }

Modified: jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/data/casedata/CaseDataTest.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/data/casedata/CaseDataTest.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/data/casedata/CaseDataTest.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -65,7 +65,7 @@
     procBuilder.addProperty("foo", "bar").addTask("TaskA").addSequenceFlow("End");
     procBuilder.addEndEvent("End").addEventDetail(EventDetail.EventDetailType.Message).addMessageRef("EndMessage");
     MessageBuilder msgBuilder = procBuilder.addMessage("EndMessage");
-    msgBuilder.addToRef(getMessageListenerID()).addProperty("foo", null, true);
+    msgBuilder.addToRef(getTestID()).addProperty("foo", null, true);
     Process proc = procBuilder.getProcess();
     return proc;
   }

Modified: jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/data/taskdata/TaskDataTest.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/data/taskdata/TaskDataTest.java	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/java/org/jboss/bpm/pattern/data/taskdata/TaskDataTest.java	2008-08-22 09:40:49 UTC (rev 1981)
@@ -67,7 +67,7 @@
     taskBuilder.addAssignment(AssignTime.Start, ExpressionLanguage.MVEL, "TaskData_TaskA_foo", "foo");
     procBuilder.addEndEvent("End").addEventDetail(EventDetail.EventDetailType.Message).addMessageRef("EndMessage");
     MessageBuilder msgBuilder = procBuilder.addMessage("EndMessage");
-    msgBuilder.addToRef(getMessageListenerID()).addProperty("foo", null, true);
+    msgBuilder.addToRef(getTestID()).addProperty("foo", null, true);
     Process proc = procBuilder.getProcess();
     return proc;
   }

Modified: jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/resources/pattern/control/synchronization/pattern-control-synchronization-api10.xml
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/resources/pattern/control/synchronization/pattern-control-synchronization-api10.xml	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/resources/pattern/control/synchronization/pattern-control-synchronization-api10.xml	2008-08-22 09:40:49 UTC (rev 1981)
@@ -38,7 +38,7 @@
     </message-result>
   </end>
   <message name="EndMessage">
-    <to>jboss.bpm:msgListener=SynchronizationDescriptorTest</to>
+    <to>jboss.bpm:test=SynchronizationDescriptorTest</to>
     <property correlation="true">
       <name>taskValueA</name>
     </property>

Modified: jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/resources/pattern/data/casedata/pattern-data-casedata-api10.xml
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/resources/pattern/data/casedata/pattern-data-casedata-api10.xml	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/resources/pattern/data/casedata/pattern-data-casedata-api10.xml	2008-08-22 09:40:49 UTC (rev 1981)
@@ -15,7 +15,7 @@
     </message-result>
   </end>
   <message name="EndMessage">
-    <to>jboss.bpm:msgListener=CaseDataDescriptorTest</to>
+    <to>jboss.bpm:test=CaseDataDescriptorTest</to>
     <property correlation="true">
       <name>foo</name>
     </property>

Modified: jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/resources/pattern/data/taskdata/pattern-data-taskdata-api10.xml
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/resources/pattern/data/taskdata/pattern-data-taskdata-api10.xml	2008-08-22 07:25:03 UTC (rev 1980)
+++ jbossbpm/spec/branches/tdiesler/modules/testsuite/src/test/resources/pattern/data/taskdata/pattern-data-taskdata-api10.xml	2008-08-22 09:40:49 UTC (rev 1981)
@@ -19,7 +19,7 @@
     </message-result>
   </end>
   <message name="EndMessage">
-    <to>jboss.bpm:msgListener=TaskDataDescriptorTest</to>
+    <to>jboss.bpm:test=TaskDataDescriptorTest</to>
     <property correlation="true">
       <name>foo</name>
     </property>




More information about the jbpm-commits mailing list