[jbpm-commits] JBoss JBPM SVN: r2478 - in projects/spec/trunk/modules: cts/src/test/java/org/jbpm/test/cts/startevent and 2 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Sat Oct 4 10:22:42 EDT 2008


Author: thomas.diesler at jboss.com
Date: 2008-10-04 10:22:42 -0400 (Sat, 04 Oct 2008)
New Revision: 2478

Modified:
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Event.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/startevent/StartEventSignalTest.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/EndEventImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/EventImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessDefinitionImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessStructureImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/StartEventImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ExecutionServiceImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ProcessDefinitionServiceImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ProcessServiceImpl.java
Log:
Signal StartEvent creates new process instance

Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Event.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Event.java	2008-10-04 12:59:53 UTC (rev 2477)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Event.java	2008-10-04 14:22:42 UTC (rev 2478)
@@ -55,6 +55,11 @@
   EventType getEventType();
   
   /**
+   * Get the detail type fopr this event
+   */
+  EventDetailType getDetailType();
+  
+  /**
    * Get the associated signal ref
    */
   Signal getSignalRef();

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/startevent/StartEventSignalTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/startevent/StartEventSignalTest.java	2008-10-04 12:59:53 UTC (rev 2477)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/startevent/StartEventSignalTest.java	2008-10-04 14:22:42 UTC (rev 2478)
@@ -24,8 +24,10 @@
 // $Id$
 
 import java.io.IOException;
-import java.util.List;
+import java.util.Set;
 
+import javax.management.ObjectName;
+
 import org.jbpm.api.client.SignalListener;
 import org.jbpm.api.model.Message;
 import org.jbpm.api.model.Process;
@@ -40,6 +42,8 @@
 import org.jbpm.api.model.builder.ProcessBuilder;
 import org.jbpm.api.model.builder.ProcessBuilderService;
 import org.jbpm.api.model.builder.TaskBuilder;
+import org.jbpm.api.service.ProcessDefinitionService;
+import org.jbpm.api.service.ProcessService;
 import org.jbpm.api.service.SignalService;
 import org.jbpm.api.test.CTSTestCase;
 
@@ -54,81 +58,38 @@
   public void testStart() throws Exception
   {
     ProcessDefinition procDef = unregisterOnTearDown(getProcessDefinition());
-    Process proc = procDef.newInstance();
+    
+    // You need to register the process definition to activate the start trigger
+    ProcessDefinitionService procDefService = ProcessDefinitionService.locateProcessDefinitionService();
+    procDefService.registerProcessDefinition(procDef);
 
-    proc.startProcess();
-
-    // Send start trigger signal
-    SignalService sigService = SignalService.locateSignalService();
-    sigService.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
-
-    // Wait for the process to end
-    proc.waitForEnd();
-
-    // Verify the result
-    Message endMessage = getMessages().get(0);
-    assertEquals("TaskA", endMessage.getProperty("taskValue").getValue());
-  }
-
-  public void testRestart() throws Exception
-  {
-    ProcessDefinition procDef = unregisterOnTearDown(getProcessDefinition());
     Process proc = procDef.newInstance();
-
-    // Start the process and send start trigger signal
-    proc.startProcess();
-    SignalService sigService = SignalService.locateSignalService();
-    sigService.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
-
-    // Wait for the process to end
-    proc.waitForEnd();
-
     try
     {
       proc.startProcess();
-      fail("Cannot start process in state: Completed");
+      fail("Cannot obtain StartEvent.None to start the process explicitly");
     }
     catch (IllegalStateException ex)
     {
       // expected
     }
 
-    // Verify the result
-    List<Message> messages = getMessages();
-    assertEquals(1, messages.size());
-    assertEquals("TaskA", messages.get(0).getProperty("taskValue").getValue());
-  }
+    // Send start trigger signal
+    SignalService sigService = SignalService.locateSignalService();
+    sigService.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
 
-  public void testRestartBeforeEnd() throws Exception
-  {
-    ProcessDefinition procDef = unregisterOnTearDown(getProcessDefinition());
-    Process proc = procDef.newInstance();
-
-    // Add a signal listener that sends the other start trigger signal
-    TaskListener sigListener = new TaskListener(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
-    SignalService sigManager = SignalService.locateSignalService();
-    sigManager.addSignalListener(sigListener);
-
-    try
-    {
-      // Start the process and send start trigger signal
-      proc.startProcess();
-      
-      // This signal should be ignored
-      sigManager.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
-
-      // Wait for the process to end
+    // Get the just started process 
+    ProcessService procService = ProcessService.locateProcessService();
+    Set<ObjectName> procIDs = procService.getProcesses("StartEventSignal", null);
+    proc = procService.getProcess(procIDs.iterator().next());
+    
+    // Wait for the process to end
+    if (proc != null)
       proc.waitForEnd();
-    }
-    finally
-    {
-      sigManager.removeSignalListener(sigListener);
-    }
 
     // Verify the result
-    List<Message> messages = getMessages();
-    assertEquals(1, messages.size());
-    assertEquals("TaskA", messages.get(0).getProperty("taskValue").getValue());
+    Message endMessage = getMessages().get(0);
+    assertEquals("TaskA", endMessage.getProperty("taskValue").getValue());
   }
 
   public ProcessDefinition getProcessDefinition() throws IOException

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/EndEventImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/EndEventImpl.java	2008-10-04 12:59:53 UTC (rev 2477)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/EndEventImpl.java	2008-10-04 14:22:42 UTC (rev 2478)
@@ -193,9 +193,4 @@
       tokenExecutor.destroy(token);
     }
   }
-  
-  public String toString()
-  {
-    return "EndEvent[" + getName() + "]";
-  }
 }
\ No newline at end of file

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/EventImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/EventImpl.java	2008-10-04 12:59:53 UTC (rev 2477)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/EventImpl.java	2008-10-04 14:22:42 UTC (rev 2478)
@@ -96,6 +96,12 @@
   }
 
   @Override
+  public EventDetailType getDetailType()
+  {
+    return detailType;
+  }
+
+  @Override
   public Message getMessageRef()
   {
     return messageRef;
@@ -215,4 +221,9 @@
       procDefImpl.initializeMessageRef(messageRef);
     }
   }
+  
+  public String toString()
+  {
+    return getEventType() + "Event[" + getName() + "," + getDetailType() + "]";
+  }
 }
\ No newline at end of file

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessDefinitionImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessDefinitionImpl.java	2008-10-04 12:59:53 UTC (rev 2477)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessDefinitionImpl.java	2008-10-04 14:22:42 UTC (rev 2478)
@@ -63,22 +63,7 @@
   public ProcessDefinitionImpl(ProcessEngine engine, ProcessStructureImpl procStruct)
   {
     super(engine, procStruct);
-
-    // Save the raw process structure
-    try
-    {
-      ByteArrayOutputStream baos = new ByteArrayOutputStream();
-      ObjectOutputStream oos = new ObjectOutputStream(baos);
-      oos.writeObject(procStruct);
-      rawProcStruct = baos.toByteArray();
-    }
-    catch (IOException ex)
-    {
-      throw new IllegalStateException("Cannot serialize process structure", ex);
-    }
-
-    // Call the create life cycle
-    procStruct.create(this);
+    create(this);
   }
 
   // Persistence ctor
@@ -147,6 +132,48 @@
     }
   }
 
+  @Override
+  protected void create(ProcessDefinition procDef)
+  {
+    super.create(procDef);
+    
+    // Save the raw process structure
+    try
+    {
+      ByteArrayOutputStream baos = new ByteArrayOutputStream();
+      ObjectOutputStream oos = new ObjectOutputStream(baos);
+      oos.writeObject(procStruct);
+      rawProcStruct = baos.toByteArray();
+    }
+    catch (IOException ex)
+    {
+      throw new IllegalStateException("Cannot serialize process structure", ex);
+    }
+
+    procStruct.create(this);
+  }
+
+  @Override
+  public void register(ProcessDefinition procDef)
+  {
+    super.register(procDef);
+    procStruct.register(procDef);
+  }
+
+  @Override
+  public void unregister(ProcessDefinition procDef)
+  {
+    super.unregister(procDef);
+    procStruct.unregister(procDef);
+  }
+
+  @Override
+  protected void destroy(ProcessDefinition procDef)
+  {
+    super.destroy(procDef);
+    procStruct.destroy(procDef);
+  }
+
   public String toString()
   {
     return "ProcessDefinition[" + getName() + "]";

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessImpl.java	2008-10-04 12:59:53 UTC (rev 2477)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessImpl.java	2008-10-04 14:22:42 UTC (rev 2478)
@@ -37,6 +37,7 @@
 import org.jbpm.api.model.builder.ObjectNameFactory;
 import org.jbpm.api.runtime.Attachments;
 import org.jbpm.api.service.ExecutionService;
+import org.jbpm.api.service.ProcessService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -67,7 +68,7 @@
   {
     super(engine, procStruct);
     this.procDef = procDef;
-    procStruct.create(this);
+    create(this);
   }
 
   // Persistence ctor
@@ -126,8 +127,18 @@
   {
     ProcessEngine engine = getProcessEngine();
     ExecutionService exService = engine.getService(ExecutionService.class);
-    exService.startProcess(this, att);
-    return getKey();
+    try
+    {
+      exService.startProcess(this, att);
+      return getKey();
+    }
+    catch (RuntimeException rte)
+    {
+      // A process that cannot be started id unregistered automatically
+      ProcessService procService = getProcessEngine().getService(ProcessService.class);
+      procService.unregisterProcess(getKey());
+      throw rte;
+    }
   }
 
   public ProcessStatus waitForEnd()
@@ -153,6 +164,13 @@
   }
 
   @Override
+  protected void create(Process proc)
+  {
+    super.create(proc);
+    procStruct.create(proc);
+  }
+
+  @Override
   public void register(Process proc)
   {
     super.register(proc);
@@ -166,6 +184,13 @@
     procStruct.unregister(proc);
   }
 
+  @Override
+  protected void destroy(Process proc)
+  {
+    super.destroy(proc);
+    procStruct.destroy(proc);
+  }
+
   public String toString()
   {
     return "Process[" + getName() + ",status=" + getProcessStatus() + "]";

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessStructureImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessStructureImpl.java	2008-10-04 12:59:53 UTC (rev 2477)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessStructureImpl.java	2008-10-04 14:22:42 UTC (rev 2478)
@@ -268,10 +268,42 @@
   }
 
   @Override
+  protected void register(ProcessDefinition procDef)
+  {
+    super.register(procDef);
+    for (Node node : getNodes())
+    {
+      NodeImpl nodeImpl = (NodeImpl)node;
+      nodeImpl.register(procDef);
+    }
+  }
+
+  @Override
+  protected void unregister(ProcessDefinition procDef)
+  {
+    super.unregister(procDef);
+    for (Node node : getNodes())
+    {
+      NodeImpl nodeImpl = (NodeImpl)node;
+      nodeImpl.unregister(procDef);
+    }
+  }
+
+  @Override
+  protected void destroy(ProcessDefinition procDef)
+  {
+    super.destroy(procDef);
+    for (Node node : getNodes())
+    {
+      NodeImpl nodeImpl = (NodeImpl)node;
+      nodeImpl.destroy(procDef);
+    }
+  }
+
+  @Override
   protected void create(Process proc)
   {
     super.create(proc);
-    
     for (Node node : getNodes())
     {
       NodeImpl nodeImpl = (NodeImpl)node;
@@ -279,6 +311,39 @@
     }
   }
 
+  @Override
+  protected void register(Process proc)
+  {
+    super.register(proc);
+    for (Node node : getNodes())
+    {
+      NodeImpl nodeImpl = (NodeImpl)node;
+      nodeImpl.register(proc);
+    }
+  }
+
+  @Override
+  protected void unregister(Process proc)
+  {
+    super.unregister(proc);
+    for (Node node : getNodes())
+    {
+      NodeImpl nodeImpl = (NodeImpl)node;
+      nodeImpl.unregister(proc);
+    }
+  }
+
+  @Override
+  protected void destroy(Process proc)
+  {
+    super.destroy(proc);
+    for (Node node : getNodes())
+    {
+      NodeImpl nodeImpl = (NodeImpl)node;
+      nodeImpl.destroy(proc);
+    }
+  }
+
   public String toString()
   {
     return "ProcessStructure[" + getName() + "]";

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/StartEventImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/StartEventImpl.java	2008-10-04 12:59:53 UTC (rev 2477)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/StartEventImpl.java	2008-10-04 14:22:42 UTC (rev 2478)
@@ -33,6 +33,7 @@
 import org.jbpm.api.client.SignalListener;
 import org.jbpm.api.model.Node;
 import org.jbpm.api.model.Process;
+import org.jbpm.api.model.ProcessDefinition;
 import org.jbpm.api.model.ProcessStructure;
 import org.jbpm.api.model.SequenceFlow;
 import org.jbpm.api.model.Signal;
@@ -147,10 +148,10 @@
   }
 
   @Override
-  protected void create(Process proc)
+  protected void register(final ProcessDefinition procDef)
   {
-    super.create(proc);
-
+    super.register(procDef);
+    
     final ProcessEngine engine = getProcessEngine();
     final SignalService sigService = engine.getService(SignalService.class);
 
@@ -160,7 +161,7 @@
       if (startListener == null)
       {
         final Signal startSignal = getSignalRef();
-        final StartEvent start = this;
+        final String startEventName = getName();
         startListener = new SignalListener()
         {
           public boolean acceptSignal(Signal signal)
@@ -182,14 +183,20 @@
           {
             log.debug("Start process from signal: " + signal);
             sigService.removeSignalListener(startListener);
+
+            // There MAY be multiple Start Events for a given Process level. Each Start Event is an independent event. 
+            // That is, a Process Instance SHALL be generated when the Start Event is triggered.
+            Process proc = procDef.newInstance();
+            StartEvent startEvent = proc.getNode(StartEvent.class, startEventName);
             
             ExecutionService execService = engine.getService(ExecutionService.class);
-            execService.startProcess(getProcess(), start, null);
+            execService.startProcess(proc, startEvent, null);
           }
 
           public String toString()
           {
-            return start + "." + startSignal;
+            StartEvent startEvent = procDef.getNode(StartEvent.class, startEventName);
+            return startEvent + "." + startSignal;
           }
         };
         
@@ -198,9 +205,4 @@
       }
     }
   }
-
-  public String toString()
-  {
-    return "StartEvent[" + getName() + "]";
-  }
 }
\ No newline at end of file

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ExecutionServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ExecutionServiceImpl.java	2008-10-04 12:59:53 UTC (rev 2477)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ExecutionServiceImpl.java	2008-10-04 14:22:42 UTC (rev 2478)
@@ -24,6 +24,7 @@
 // $Id$
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import javax.management.ObjectName;
@@ -78,35 +79,35 @@
   {
     super.setProcessEngine(engine);
   }
-  
+
   @Override
   public void startProcess(Process proc, Attachments att)
   {
-    // Prepare the process for start
-    startProcessPrepare(proc);
-    
     // Get the None Start Event if there is one and start the initial flow
     StartEvent start = getNoneStartEvent(proc);
-    if (start != null)
+    if (start == null)
     {
-      if (proc.getProcessStatus() == ProcessStatus.Active)
-        throw new IllegalStateException("Cannot start an already active process");
-      
-      startProcessInternal(proc, start, att);
+      List<StartEvent> startEvents = proc.getNodes(StartEvent.class);
+      throw new IllegalStateException("Cannot obtain StartEvent.None to start the process explicitly: " + startEvents);
     }
+
+    if (proc.getProcessStatus() == ProcessStatus.Active)
+      throw new IllegalStateException("Cannot start an already active process");
+
+    startProcessInternal(proc, start, att);
   }
 
   @Override
   public void startProcess(Process proc, StartEvent start, Attachments att)
   {
-    // Prepare the process for start
-    startProcessPrepare(proc);
-    
     startProcessInternal(proc, start, att);
   }
 
   private synchronized void startProcessInternal(Process proc, StartEvent start, Attachments att)
   {
+    // Prepare the process to start
+    startProcessPrepare(proc);
+    
     @SuppressWarnings("serial")
     class InitialFlow extends SequenceFlowImpl
     {
@@ -116,20 +117,20 @@
         setTargetRef(start);
       }
     }
-    
+
     RuntimeProcess rtProc = getRuntimeProcess(proc, false);
-    boolean startProcessThread = (rtProc == null); 
+    boolean startProcessThread = (rtProc == null);
 
     // Create initial Token
     TokenImpl initialToken = new TokenImpl(att);
     InitialFlow initialFlow = new InitialFlow(start);
     initialToken.setFlow(initialFlow);
-    
-    // Register the initial Token 
+
+    // Register the initial Token
     rtProc = getRuntimeProcess(proc, true);
     TokenExecutor tokenExecutor = rtProc.getTokenExecutor();
     tokenExecutor.create(initialToken, initialFlow);
-    
+
     // Start a new process thread
     if (startProcessThread)
     {
@@ -150,10 +151,10 @@
         }
       }
     }
-    
+
     // Do the start time assignments
     startTimeAssignments(proc, initialToken);
-    
+
     // Start the initial token
     tokenExecutor.start(initialToken);
   }
@@ -189,7 +190,7 @@
       }
     }
   }
-  
+
   public ProcessStatus waitForEnd(Process proc)
   {
     return waitForEndInternal(proc, 0);
@@ -208,7 +209,7 @@
   private ProcessStatus waitForEndInternal(Process proc, long timeout)
   {
     ProcessImpl procImpl = (ProcessImpl)proc;
-    
+
     ProcessStatus status = proc.getProcessStatus();
     if (status == ProcessStatus.None)
       throw new IllegalStateException("Cannot wait for process in state: " + status);
@@ -234,14 +235,14 @@
               break;
             }
           }
-          
+
           // Start waiting to get notified
           long waitTimeout = forever ? 0 : until - now;
           proc.wait(waitTimeout);
         }
         now = System.currentTimeMillis();
       }
-      
+
       // Throw timeout exception if it took too long
       if (isProcessTerminated(proc) == false)
       {
@@ -266,17 +267,16 @@
         procService.unregisterProcess(proc.getKey());
     }
 
-    
     status = proc.getProcessStatus();
     return status;
   }
-  
+
   private boolean isProcessTerminated(Process proc)
   {
     ProcessStatus status = proc.getProcessStatus();
     return status == ProcessStatus.Cancelled || status == ProcessStatus.Completed || status == ProcessStatus.Aborted;
   }
-  
+
   private StartEvent getNoneStartEvent(Process proc)
   {
     StartEvent start = null;
@@ -327,7 +327,7 @@
 
       ProcessEngine engine = getProcessEngine();
       SignalService sigService = engine.getService(SignalService.class);
-      
+
       ObjectName procID = proc.getKey();
       String procName = proc.getName();
       try
@@ -340,7 +340,7 @@
           // Notify that the process is now Active
           proc.notifyAll();
         }
-        
+
         synchronized (rtProc)
         {
           // Wait until there are no more runnable tokens
@@ -355,9 +355,9 @@
               log.error("Process interrupted", ex);
             }
           }
-          
+
           log.debug("End execution thread [proc=" + procName + ",status=" + proc.getProcessStatus() + "]");
-          
+
           if (proc.getProcessStatus() == ProcessStatus.Active)
             procImpl.setProcessStatus(ProcessStatus.Completed);
         }
@@ -371,7 +371,7 @@
           ProcessService procService = engine.getService(ProcessService.class);
           procService.unregisterProcess(procID);
           runtimeProcesses.remove(procID);
-          
+
           // Notify that the process has now ended
           proc.notifyAll();
         }

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ProcessDefinitionServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ProcessDefinitionServiceImpl.java	2008-10-04 12:59:53 UTC (rev 2477)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ProcessDefinitionServiceImpl.java	2008-10-04 14:22:42 UTC (rev 2478)
@@ -23,8 +23,12 @@
 
 // $Id$
 
+import javax.management.ObjectName;
+
 import org.jbpm.api.client.ProcessEngine;
+import org.jbpm.api.model.ProcessDefinition;
 import org.jbpm.api.service.ProcessDefinitionService;
+import org.jbpm.ri.model.ProcessDefinitionImpl;
 
 /**
  * The ProcessDefinitionService is the entry point to create, find and otherwise manage process definitions.
@@ -39,4 +43,23 @@
   {
     super.setProcessEngine(engine);
   }
+
+  @Override
+  public ObjectName registerProcessDefinition(ProcessDefinition procDef)
+  {
+    ObjectName procDefID = super.registerProcessDefinition(procDef);
+    ProcessDefinitionImpl procDefImpl = (ProcessDefinitionImpl)procDef;
+    procDefImpl.register(procDef);
+    return procDefID;
+  }
+
+  @Override
+  public boolean unregisterProcessDefinition(ObjectName procDefID)
+  {
+    ProcessDefinitionImpl procDefImpl = (ProcessDefinitionImpl)getProcessDefinition(procDefID);
+    if (procDefImpl != null)
+      procDefImpl.unregister(procDefImpl);
+    
+    return super.unregisterProcessDefinition(procDefID);
+  }
 }
\ No newline at end of file

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ProcessServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ProcessServiceImpl.java	2008-10-04 12:59:53 UTC (rev 2477)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ProcessServiceImpl.java	2008-10-04 14:22:42 UTC (rev 2478)
@@ -61,7 +61,9 @@
   public boolean unregisterProcess(ObjectName procID)
   {
     ProcessImpl procImpl = (ProcessImpl)getProcess(procID);
-    procImpl.unregister(procImpl);
+    if (procImpl != null)
+      procImpl.unregister(procImpl);
+    
     return super.unregisterProcess(procID);
   }
 }
\ No newline at end of file




More information about the jbpm-commits mailing list