[jbpm-commits] JBoss JBPM SVN: r2453 - in projects/spec/trunk/modules: api/src/main/java/org/jbpm/api/test and 12 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Tue Sep 30 16:13:46 EDT 2008
Author: thomas.diesler at jboss.com
Date: 2008-09-30 16:13:45 -0400 (Tue, 30 Sep 2008)
New Revision: 2453
Added:
projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/
projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessServiceTest.java
projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/signal/SignalMultithreadTest.java
Removed:
projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/processmanager/ProcessManagerTest.java
projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/signalmanager/SignalManagerTest.java
Modified:
projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/ProcessService.java
projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java
projects/spec/trunk/modules/cts/pom.xml
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/pattern/data/casedata/CaseDataTest.java
projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/data/taskdata/TaskDataTest.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/AbstractElementImpl.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/NodeImpl.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/StartEventImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.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/PersistenceServiceImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ProcessServiceImpl.java
Log:
More tests pass
Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/ProcessService.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/ProcessService.java 2008-09-30 18:45:02 UTC (rev 2452)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/ProcessService.java 2008-09-30 20:13:45 UTC (rev 2453)
@@ -79,28 +79,29 @@
if (proc == null)
throw new IllegalStateException("Cannot obtain process from: " + dep);
- registerProcess(proc);
- return proc.getKey();
+ ObjectName procID = registerProcess(proc);
+ return procID;
}
/**
* Register a Process.
*/
- public void registerProcess(Process proc)
+ public ObjectName registerProcess(Process proc)
{
log.debug("registerProcess: " + proc);
// Save the process through the PersistenceService
PersistenceService dbService = getProcessEngine().getService(PersistenceService.class);
- dbService.saveProcess(proc);
+ ObjectName procID = dbService.saveProcess(proc);
- registeredProcs.put(proc.getKey(), proc);
+ registeredProcs.put(procID, proc);
+ return procID;
}
/**
* Unregister a Process.
*/
- public void unregisterProcess(Process proc)
+ public boolean unregisterProcess(Process proc)
{
log.debug("unregisterProcess: " + proc);
@@ -108,7 +109,7 @@
PersistenceService dbService = getProcessEngine().getService(PersistenceService.class);
dbService.deleteProcess(proc);
- registeredProcs.remove(proc.getKey());
+ return registeredProcs.remove(proc.getKey()) != null;
}
/**
Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java 2008-09-30 18:45:02 UTC (rev 2452)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java 2008-09-30 20:13:45 UTC (rev 2453)
@@ -67,7 +67,9 @@
private MessageListener messageListener;
// The messages caught by this test case
private List<Message> messages = new ArrayList<Message>();
-
+ // The last fatal tear down error
+ private static String fatalTearDownError;
+
protected ProcessEngine getProcessEngine()
{
return ProcessEngine.getProcessEngine();
@@ -81,6 +83,10 @@
ProcessEngine engine = getProcessEngine();
+ // Stop the test run if there are fatal tear down errors
+ if (fatalTearDownError != null)
+ System.exit(1);
+
// Setup the SignalListener
clearAllSignalListeners();
SignalService sigService = engine.getService(SignalService.class);
@@ -95,7 +101,7 @@
MessageService msgService = engine.getService(MessageService.class);
msgService.addMessageListener(getMessageListener());
}
-
+
@Override
protected void tearDown() throws Exception
{
@@ -114,27 +120,27 @@
Set<Process> procs = procManager.getProcesses();
if (procs.size() > 0)
{
- String logMsg = "Registered processes on tear down of " + getName() + ": " + procs;
- System.out.println(logMsg);
- System.exit(1);
+ fatalTearDownError = "Registered processes on tear down of " + getName() + ": " + procs;
+ System.out.println(fatalTearDownError);
+ log.error(fatalTearDownError);
}
// Check that there are no registered signal listeners left
Set<SignalListener> sigListeners = sigService.getSignalListeners();
if (sigListeners.size() > 0)
{
- String logMsg = "Registered signal listeners on tear down of " + getName() + ": " + sigListeners;
- System.out.println(logMsg);
- System.exit(1);
+ fatalTearDownError = "Registered signal listeners on tear down of " + getName() + ": " + sigListeners;
+ System.out.println(fatalTearDownError);
+ log.error(fatalTearDownError);
}
// Check that there are no registered message listeners left
Set<MessageListener> msgListeners = msgService.getMessageListeners();
if (msgListeners.size() > 0)
{
- String logMsg = "Registered message listeners on tear down of " + getName() + ": " + msgListeners;
- System.out.println(logMsg);
- System.exit(1);
+ fatalTearDownError = "Registered message listeners on tear down of " + getName() + ": " + msgListeners;
+ System.out.println(fatalTearDownError);
+ log.error(fatalTearDownError);
}
super.tearDown();
Modified: projects/spec/trunk/modules/cts/pom.xml
===================================================================
--- projects/spec/trunk/modules/cts/pom.xml 2008-09-30 18:45:02 UTC (rev 2452)
+++ projects/spec/trunk/modules/cts/pom.xml 2008-09-30 20:13:45 UTC (rev 2453)
@@ -70,7 +70,6 @@
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
- <exclude>org/jbpm/test/cts/executioncontext/ExecutionContextTest.java</exclude>
<exclude>org/jbpm/test/cts/gateway/exclusive/ExclusiveGatewayMergeTest.java</exclude>
<exclude>org/jbpm/test/cts/gateway/exclusive/ExclusiveGatewaySplitTest.java</exclude>
<exclude>org/jbpm/test/cts/gateway/inclusive/InclusiveGatewayMergeTest.java</exclude>
@@ -79,9 +78,6 @@
<exclude>org/jbpm/test/cts/gateway/parallel/ParallelGatewaySplitTest.java</exclude>
<exclude>org/jbpm/test/cts/node/NodeInputSetTest.java</exclude>
<exclude>org/jbpm/test/cts/node/NodeOutputSetTest.java</exclude>
- <exclude>org/jbpm/test/cts/processmanager/ProcessManagerTest.java</exclude>
- <exclude>org/jbpm/test/cts/signalmanager/SignalManagerTest.java</exclude>
- <exclude>org/jbpm/test/cts/startevent/StartEventSignalTest.java</exclude>
<exclude>org/jbpm/test/cts/task/ReceiveTaskTest.java</exclude>
<exclude>org/jbpm/test/cts/task/SendTaskTest.java</exclude>
<exclude>org/jbpm/test/cts/task/TaskExecutionHandlerTest.java</exclude>
@@ -90,8 +86,6 @@
<exclude>org/jbpm/test/pattern/control/parallelsplit/ParallelSplitTest.java</exclude>
<exclude>org/jbpm/test/pattern/control/simplemerge/SimpleMergeTest.java</exclude>
<exclude>org/jbpm/test/pattern/control/synchronization/SynchronizationTest.java</exclude>
- <exclude>org/jbpm/test/pattern/data/casedata/CaseDataTest.java</exclude>
- <exclude>org/jbpm/test/pattern/data/taskdata/TaskDataTest.java</exclude>
</excludes>
</configuration>
</plugin>
Deleted: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/processmanager/ProcessManagerTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/processmanager/ProcessManagerTest.java 2008-09-30 18:45:02 UTC (rev 2452)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/processmanager/ProcessManagerTest.java 2008-09-30 20:13:45 UTC (rev 2453)
@@ -1,90 +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.jbpm.test.cts.processmanager;
-
-// $Id$
-
-import javax.management.ObjectName;
-
-import org.jbpm.api.client.SignalListener;
-import org.jbpm.api.model.Process;
-import org.jbpm.api.model.Signal;
-import org.jbpm.api.model.Signal.SignalType;
-import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
-import org.jbpm.api.service.ProcessService;
-import org.jbpm.api.service.SignalService;
-import org.jbpm.api.test.CTSTestCase;
-
-/**
- * Test the ProcessService
- *
- * @author thomas.diesler at jboss.com
- * @since 08-Jul-2008
- */
-public class ProcessManagerTest extends CTSTestCase
-{
- public void testStartProcess() throws Exception
- {
- final Process proc = getProcess();
- final ObjectName procID = proc.getKey();
-
- final ProcessService procService = ProcessService.locateProcessService();
- assertNull("A process created through the builder is not registered automatically", procService.getProcessByKey(procID));
-
- SignalListener sigListener = new SignalListener()
- {
- public boolean acceptSignal(Signal signal)
- {
- return signal.getSignalType() == SignalType.SYSTEM_TASK_ENTER;
- }
-
- public void catchSignal(Signal signal)
- {
- assertNotNull(procService.getProcessByKey(procID));
- }
- };
- SignalService sigManager = SignalService.locateSignalService();
- 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", procService.getProcessByKey(procID));
- }
-
- private Process getProcess()
- {
- ProcessBuilder builder = ProcessBuilderService.locateProcessBuilder();
- builder.addProcess(getName()).addStartEvent("Start").addSequenceFlow("taskA");
- Process proc = builder.addTask("taskA").addSequenceFlow("end").addEndEvent("end").getProcess();
- return proc;
- }
-}
Added: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessServiceTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessServiceTest.java (rev 0)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessServiceTest.java 2008-09-30 20:13:45 UTC (rev 2453)
@@ -0,0 +1,86 @@
+/*
+ * 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.jbpm.test.cts.service.process;
+
+// $Id$
+
+import org.jbpm.api.client.SignalListener;
+import org.jbpm.api.model.Process;
+import org.jbpm.api.model.Signal;
+import org.jbpm.api.model.Signal.SignalType;
+import org.jbpm.api.model.builder.ProcessBuilder;
+import org.jbpm.api.model.builder.ProcessBuilderService;
+import org.jbpm.api.service.ProcessService;
+import org.jbpm.api.service.SignalService;
+import org.jbpm.api.test.CTSTestCase;
+
+/**
+ * Test the ProcessService
+ *
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+public class ProcessServiceTest extends CTSTestCase
+{
+ public void testStartProcess() throws Exception
+ {
+ final Process proc = getProcess();
+ final ProcessService procService = ProcessService.locateProcessService();
+ assertNull("Process not registered automatically", procService.getProcessByKey(proc.getKey()));
+
+ SignalListener sigListener = new SignalListener()
+ {
+ public boolean acceptSignal(Signal signal)
+ {
+ return signal.getSignalType() == SignalType.SYSTEM_TASK_ENTER;
+ }
+
+ public void catchSignal(Signal signal)
+ {
+ assertNotNull(procService.getProcessByKey(proc.getKey()));
+ }
+ };
+ SignalService sigManager = SignalService.locateSignalService();
+ sigManager.addSignalListener(sigListener);
+
+ try
+ {
+ // Start the process, which automatically adds it to the registery
+ proc.startProcess();
+ proc.waitForEnd();
+ }
+ finally
+ {
+ sigManager.removeSignalListener(sigListener);
+ }
+
+ assertNull("Process is removed", procService.getProcessByKey(proc.getKey()));
+ }
+
+ private Process getProcess()
+ {
+ ProcessBuilder builder = ProcessBuilderService.locateProcessBuilder();
+ builder.addProcess(getName()).addStartEvent("Start").addSequenceFlow("taskA");
+ Process proc = builder.addTask("taskA").addSequenceFlow("end").addEndEvent("end").getProcess();
+ return proc;
+ }
+}
Property changes on: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessServiceTest.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Added: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/signal/SignalMultithreadTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/signal/SignalMultithreadTest.java (rev 0)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/signal/SignalMultithreadTest.java 2008-09-30 20:13:45 UTC (rev 2453)
@@ -0,0 +1,149 @@
+/*
+ * 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.jbpm.test.cts.service.signal;
+
+// $Id$
+
+import org.jbpm.api.client.SignalListener;
+import org.jbpm.api.model.Signal;
+import org.jbpm.api.model.Signal.SignalType;
+import org.jbpm.api.service.SignalService;
+import org.jbpm.api.test.CTSTestCase;
+
+/**
+ * Test the ProcessManager
+ *
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+public class SignalMultithreadTest extends CTSTestCase
+{
+ final SignalService sigService = SignalService.locateSignalService();
+ 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;
+
+ public void testReentrantSingleThread() throws Exception
+ {
+ 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 ("A".equals(sigMsg))
+ {
+ gotA = signal;
+ sigService.throwSignal(sigB);
+ }
+ if ("B".equals(sigMsg))
+ {
+ gotB = signal;
+ }
+ }
+ };
+ sigService.addSignalListener(sigListener);
+ sigService.throwSignal(sigA);
+ sigService.removeSignalListener(sigListener);
+
+ assertEquals(sigA, gotA);
+ assertEquals(sigB, gotB);
+ }
+
+ public void testReentrantMultipleThread() throws Exception
+ {
+ 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 ("A".equals(sigMsg))
+ {
+ gotA = signal;
+ sendThreadSignal(sigB);
+ }
+ if ("B".equals(sigMsg))
+ {
+ gotB = signal;
+ }
+ }
+ };
+ sigService.addSignalListener(sigListener);
+ sendThreadSignal(sigA);
+ sigService.removeSignalListener(sigListener);
+
+ assertEquals(sigA, gotA);
+ assertEquals(sigB, gotB);
+ }
+
+ private void sendThreadSignal(Signal sig)
+ {
+ SignalRunner sigRunner = new SignalRunner(sig);
+ Thread thread = new Thread(sigRunner);
+ thread.start();
+ try
+ {
+ while (sigRunner.hasStarted() == false)
+ {
+ Thread.sleep(10);
+ }
+ thread.join();
+ }
+ catch (InterruptedException ex)
+ {
+ ex.printStackTrace();
+ }
+ }
+
+ class SignalRunner implements Runnable
+ {
+ private Signal threadSig;
+ private boolean hasStarted;
+
+ public SignalRunner(Signal sig)
+ {
+ this.threadSig = sig;
+ }
+
+ public boolean hasStarted()
+ {
+ return hasStarted;
+ }
+
+ public void run()
+ {
+ hasStarted = true;
+ sigService.throwSignal(threadSig);
+ }
+ }
+}
Property changes on: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/signal/SignalMultithreadTest.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Deleted: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/signalmanager/SignalManagerTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/signalmanager/SignalManagerTest.java 2008-09-30 18:45:02 UTC (rev 2452)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/signalmanager/SignalManagerTest.java 2008-09-30 20:13:45 UTC (rev 2453)
@@ -1,149 +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.jbpm.test.cts.signalmanager;
-
-// $Id$
-
-import org.jbpm.api.client.SignalListener;
-import org.jbpm.api.model.Signal;
-import org.jbpm.api.model.Signal.SignalType;
-import org.jbpm.api.service.SignalService;
-import org.jbpm.api.test.CTSTestCase;
-
-/**
- * Test the ProcessManager
- *
- * @author thomas.diesler at jboss.com
- * @since 08-Jul-2008
- */
-public class SignalManagerTest extends CTSTestCase
-{
- final SignalService sigManager = SignalService.locateSignalService();
- 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;
-
- public void testReentrantSingleThread() throws Exception
- {
- 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 ("A".equals(sigMsg))
- {
- gotA = signal;
- sigManager.throwSignal(sigB);
- }
- if ("B".equals(sigMsg))
- {
- gotB = signal;
- }
- }
- };
- sigManager.addSignalListener(sigListener);
- sigManager.throwSignal(sigA);
- sigManager.removeSignalListener(sigListener);
-
- assertEquals(sigA, gotA);
- assertEquals(sigB, gotB);
- }
-
- public void testReentrantMultipleThread() throws Exception
- {
- 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 ("A".equals(sigMsg))
- {
- gotA = signal;
- sendThreadSignal(sigB);
- }
- if ("B".equals(sigMsg))
- {
- gotB = signal;
- }
- }
- };
- sigManager.addSignalListener(sigListener);
- sendThreadSignal(sigA);
- sigManager.removeSignalListener(sigListener);
-
- assertEquals(sigA, gotA);
- assertEquals(sigB, gotB);
- }
-
- private void sendThreadSignal(Signal sig)
- {
- SignalRunner sigRunner = new SignalRunner(sig);
- Thread thread = new Thread(sigRunner);
- thread.start();
- try
- {
- while (sigRunner.hasStarted() == false)
- {
- Thread.sleep(10);
- }
- thread.join();
- }
- catch (InterruptedException ex)
- {
- ex.printStackTrace();
- }
- }
-
- class SignalRunner implements Runnable
- {
- private Signal threadSig;
- private boolean hasStarted;
-
- public SignalRunner(Signal sig)
- {
- this.threadSig = sig;
- }
-
- public boolean hasStarted()
- {
- return hasStarted;
- }
-
- public void run()
- {
- hasStarted = true;
- sigManager.throwSignal(threadSig);
- }
- }
-}
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-09-30 18:45:02 UTC (rev 2452)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/startevent/StartEventSignalTest.java 2008-09-30 20:13:45 UTC (rev 2453)
@@ -30,7 +30,9 @@
import org.jbpm.api.model.Message;
import org.jbpm.api.model.Process;
import org.jbpm.api.model.Signal;
+import org.jbpm.api.model.Assignment.AssignTime;
import org.jbpm.api.model.Event.EventDetailType;
+import org.jbpm.api.model.Expression.ExpressionLanguage;
import org.jbpm.api.model.Signal.SignalType;
import org.jbpm.api.model.builder.EventBuilder;
import org.jbpm.api.model.builder.MessageBuilder;
@@ -77,18 +79,20 @@
// Wait for the process to end
proc.waitForEnd();
- // Start the process and send start trigger signal
- proc.startProcess();
- sigService.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+ try
+ {
+ proc.startProcess();
+ fail("Cannot start process in state: Completed");
+ }
+ catch (IllegalStateException ex)
+ {
+ // expected
+ }
- // Wait for the process to end
- proc.waitForEnd();
-
// Verify the result
List<Message> messages = getMessages();
- assertEquals(2, messages.size());
+ assertEquals(1, messages.size());
assertEquals("TaskA", messages.get(0).getProperty("taskValue").getValue());
- assertEquals("TaskA", messages.get(1).getProperty("taskValue").getValue());
}
public void testRestartBeforeEnd() throws Exception
@@ -104,6 +108,8 @@
{
// 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
@@ -116,9 +122,8 @@
// Verify the result
List<Message> messages = getMessages();
- assertEquals(2, messages.size());
+ assertEquals(1, messages.size());
assertEquals("TaskA", messages.get(0).getProperty("taskValue").getValue());
- assertEquals("TaskA", messages.get(1).getProperty("taskValue").getValue());
}
public Process getProcess() throws IOException
@@ -127,7 +132,7 @@
EventBuilder eventBuilder = procBuilder.addProcess("StartEventSignal").addStartEvent("StartA", EventDetailType.Signal);
eventBuilder.addSignalRef(SignalType.SYSTEM_START_TRIGGER, "A");
TaskBuilder taskBuilder = procBuilder.addSequenceFlow("TaskA").addTask("TaskA");
- //taskBuilder.addAssignment(AssignTime.Start, ExpressionLanguage.MVEL, "'TaskA'", "taskValue");
+ taskBuilder.addNodeAssignment(AssignTime.Start, ExpressionLanguage.MVEL, "'TaskA'", "taskValue");
taskBuilder.addSequenceFlow("End");
procBuilder.addEndEvent("End", EventDetailType.Message).addMessageRef("EndMessage");
MessageBuilder msgBuilder = procBuilder.addProcessMessage("EndMessage");
Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/data/casedata/CaseDataTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/data/casedata/CaseDataTest.java 2008-09-30 18:45:02 UTC (rev 2452)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/data/casedata/CaseDataTest.java 2008-09-30 20:13:45 UTC (rev 2453)
@@ -27,7 +27,9 @@
import org.jbpm.api.model.Message;
import org.jbpm.api.model.Process;
+import org.jbpm.api.model.Assignment.AssignTime;
import org.jbpm.api.model.Event.EventDetailType;
+import org.jbpm.api.model.Expression.ExpressionLanguage;
import org.jbpm.api.model.builder.MessageBuilder;
import org.jbpm.api.model.builder.ProcessBuilder;
import org.jbpm.api.model.builder.ProcessBuilderService;
@@ -59,7 +61,7 @@
{
ProcessBuilder procBuilder = ProcessBuilderService.locateProcessBuilder();
procBuilder.addProcess("CaseData");
- //procBuilder.addAssignment(AssignTime.Start, ExpressionLanguage.MVEL, "CaseData_foo", "propValue");
+ procBuilder.addProcessAssignment(AssignTime.Start, ExpressionLanguage.MVEL, "CaseData_foo", "propValue");
procBuilder.addProcessProperty("foo", "bar").addStartEvent("Start").addSequenceFlow("TaskA");
procBuilder.addTask("TaskA").addSequenceFlow("End");
procBuilder.addEndEvent("End", EventDetailType.Message).addMessageRef("EndMessage");
Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/data/taskdata/TaskDataTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/data/taskdata/TaskDataTest.java 2008-09-30 18:45:02 UTC (rev 2452)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/data/taskdata/TaskDataTest.java 2008-09-30 20:13:45 UTC (rev 2453)
@@ -27,7 +27,9 @@
import org.jbpm.api.model.Message;
import org.jbpm.api.model.Process;
+import org.jbpm.api.model.Assignment.AssignTime;
import org.jbpm.api.model.Event.EventDetailType;
+import org.jbpm.api.model.Expression.ExpressionLanguage;
import org.jbpm.api.model.builder.MessageBuilder;
import org.jbpm.api.model.builder.ProcessBuilder;
import org.jbpm.api.model.builder.ProcessBuilderService;
@@ -61,8 +63,8 @@
ProcessBuilder procBuilder = ProcessBuilderService.locateProcessBuilder();
procBuilder.addProcess("TaskData").addStartEvent("Start").addSequenceFlow("TaskA");
TaskBuilder taskBuilder = procBuilder.addTask("TaskA");
- taskBuilder.addProcessProperty("foo", "bar").addSequenceFlow("End");
- //taskBuilder.addAssignment(AssignTime.Start, ExpressionLanguage.MVEL, "TaskData_TaskA_foo", "foo");
+ taskBuilder.addNodeProperty("foo", "bar").addSequenceFlow("End");
+ taskBuilder.addNodeAssignment(AssignTime.Start, ExpressionLanguage.MVEL, "TaskData_TaskA_foo", "foo");
procBuilder.addEndEvent("End", EventDetailType.Message).addMessageRef("EndMessage");
MessageBuilder msgBuilder = procBuilder.addProcessMessage("EndMessage");
msgBuilder.addToRef(getTestID()).addProperty("foo", null, true);
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/AbstractElementImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/AbstractElementImpl.java 2008-09-30 18:45:02 UTC (rev 2452)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/AbstractElementImpl.java 2008-09-30 20:13:45 UTC (rev 2453)
@@ -43,9 +43,9 @@
private static final long serialVersionUID = 1L;
@Id @GeneratedValue
- private Integer id;
+ protected Integer id;
- public Integer getId()
+ protected Integer getId()
{
return id;
}
@@ -58,8 +58,32 @@
/**
* Called when the process is created
*/
- protected void initialize(Process proc)
+ protected void create(Process proc)
{
// nothing to do
}
+
+ /**
+ * Called when the process is registered
+ */
+ protected void register(Process proc)
+ {
+ // nothing to do
+ }
+
+ /**
+ * Called when the process is unregistered
+ */
+ protected void unregister(Process proc)
+ {
+ // nothing to do
+ }
+
+ /**
+ * Called when the process is destroyed
+ */
+ protected void destroy(Process proc)
+ {
+ // nothing to do
+ }
}
\ 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-09-30 18:45:02 UTC (rev 2452)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/EventImpl.java 2008-09-30 20:13:45 UTC (rev 2453)
@@ -158,9 +158,9 @@
}
@Override
- protected void initialize(Process proc)
+ protected void create(Process proc)
{
- super.initialize(proc);
+ super.create(proc);
if (detailType == EventDetailType.Signal && signalRef == null)
throw new InvalidProcessException("Event with detail type 'Signal' must have a signalRef");
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/NodeImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/NodeImpl.java 2008-09-30 18:45:02 UTC (rev 2452)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/NodeImpl.java 2008-09-30 20:13:45 UTC (rev 2453)
@@ -308,9 +308,9 @@
}
@Override
- protected void initialize(Process proc)
+ protected void create(Process proc)
{
- super.initialize(proc);
+ super.create(proc);
// Set the associated process
this.process = proc;
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-09-30 18:45:02 UTC (rev 2452)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessImpl.java 2008-09-30 20:13:45 UTC (rev 2453)
@@ -275,13 +275,13 @@
}
@Override
- public void initialize(Process proc)
+ public void create(Process proc)
{
if (status != ProcessStatus.None)
throw new IllegalStateException("Cannot initialize process in state: " + status);
// Initialize the Element
- super.initialize(this);
+ super.create(this);
// Check required name
if (name == null)
@@ -297,24 +297,45 @@
for (Node node : getNodes())
{
NodeImpl nodeImpl = (NodeImpl)node;
- nodeImpl.initialize(this);
+ nodeImpl.create(this);
}
status = ProcessStatus.Ready;
}
- public void resetProcess()
+ @Override
+ public void register(Process proc)
{
- log.debug("Reset process: " + this);
- for (Node node : getNodes())
+ super.register(proc);
+ for (Node node : nodes)
{
NodeImpl nodeImpl = (NodeImpl)node;
- nodeImpl.reset();
+ nodeImpl.register(this);
}
- status = ProcessStatus.Ready;
- runtimeException = null;
}
+ @Override
+ public void unregister(Process proc)
+ {
+ for (Node node : nodes)
+ {
+ NodeImpl nodeImpl = (NodeImpl)node;
+ nodeImpl.unregister(this);
+ }
+ super.unregister(proc);
+ }
+
+ @Override
+ public void destroy(Process proc)
+ {
+ for (Node node : nodes)
+ {
+ NodeImpl nodeImpl = (NodeImpl)node;
+ nodeImpl.destroy(this);
+ }
+ super.destroy(proc);
+ }
+
protected void initializeMessageRef(MessageImpl msgRef)
{
String msgName = msgRef.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-09-30 18:45:02 UTC (rev 2452)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/StartEventImpl.java 2008-09-30 20:13:45 UTC (rev 2453)
@@ -30,12 +30,17 @@
import org.jbpm.api.Constants;
import org.jbpm.api.InvalidProcessException;
import org.jbpm.api.client.ProcessEngine;
+import org.jbpm.api.client.SignalListener;
+import org.jbpm.api.model.Process;
import org.jbpm.api.model.SequenceFlow;
import org.jbpm.api.model.Signal;
import org.jbpm.api.model.StartEvent;
+import org.jbpm.api.model.Process.ProcessStatus;
+import org.jbpm.api.model.Signal.SignalType;
import org.jbpm.api.model.builder.ObjectNameFactory;
import org.jbpm.api.runtime.SignalHandler;
import org.jbpm.api.runtime.Token;
+import org.jbpm.api.service.ExecutionService;
import org.jbpm.api.service.SignalService;
import org.jbpm.ri.model.builder.SingleOutFlowSupport;
import org.slf4j.Logger;
@@ -57,6 +62,9 @@
// Provide logging
final static Logger log = LoggerFactory.getLogger(StartEventImpl.class);
+ // The start signal listener
+ private transient SignalListener startListener;
+
public StartEventImpl(String name)
{
super(name);
@@ -107,9 +115,10 @@
return new SignalHandler()
{
private static final long serialVersionUID = 1L;
-
+
ProcessEngine engine = getProcess().getProcessEngine();
SignalService sigService = engine.getService(SignalService.class);
+
public void throwEnterSignal(Token token)
{
Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_START_EVENT_ENTER);
@@ -123,7 +132,79 @@
}
};
}
-
+
+ @Override
+ protected void register(final Process proc)
+ {
+ super.register(proc);
+
+ final ProcessEngine engine = proc.getProcessEngine();
+
+ if (getTriggerType() == EventDetailType.Signal)
+ {
+ // Register the start signal listener
+ if (startListener == null)
+ {
+ final Signal startSignal = getSignalRef();
+ 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)
+ {
+ log.debug("catchSignal: " + signal);
+ ProcessStatus procStatus = proc.getProcessStatus();
+ if (procStatus == ProcessStatus.Ready)
+ {
+ log.debug("Start process from signal: " + signal);
+ ExecutionService execService = engine.getService(ExecutionService.class);
+ execService.startProcess(start, null);
+ }
+ else
+ {
+ log.debug("Ignore start signal for process: " + proc);
+ }
+ }
+
+ public String toString()
+ {
+ return start + "." + startSignal;
+ }
+ };
+ SignalService sigService = engine.getService(SignalService.class);
+ sigService.addSignalListener(startListener);
+ }
+ }
+ }
+
+ @Override
+ protected void unregister(final Process proc)
+ {
+ // Unregister the start signal listener
+ if (startListener != null)
+ {
+ ProcessEngine engine = proc.getProcessEngine();
+ SignalService sigService = engine.getService(SignalService.class);
+ sigService.removeSignalListener(startListener);
+ startListener = null;
+ }
+ super.unregister(proc);
+ }
+
public String toString()
{
return "StartEvent[" + getName() + "]";
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java 2008-09-30 18:45:02 UTC (rev 2452)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java 2008-09-30 20:13:45 UTC (rev 2453)
@@ -83,7 +83,7 @@
public Process getProcess()
{
ProcessImpl procImpl = getProcessInternal();
- procImpl.initialize(procImpl);
+ procImpl.create(procImpl);
return procImpl;
}
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-09-30 18:45:02 UTC (rev 2452)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ExecutionServiceImpl.java 2008-09-30 20:13:45 UTC (rev 2453)
@@ -162,12 +162,8 @@
private void startProcessPrepare(Process proc)
{
// Reset the process if already terminated
- ProcessImpl procImpl = (ProcessImpl)proc;
- if (isProcessTerminated(proc))
- procImpl.resetProcess();
-
ProcessStatus procStatus = proc.getProcessStatus();
- if (procStatus != ProcessStatus.Ready && procStatus != ProcessStatus.Active)
+ if (procStatus != ProcessStatus.Ready)
throw new IllegalStateException("Cannot start process in state: " + procStatus);
// Register the process if needed
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/PersistenceServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/PersistenceServiceImpl.java 2008-09-30 18:45:02 UTC (rev 2452)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/PersistenceServiceImpl.java 2008-09-30 20:13:45 UTC (rev 2453)
@@ -82,7 +82,7 @@
Transaction tx = session.beginTransaction();
try
{
- session.saveOrUpdate(proc);
+ session.save(proc);
tx.commit();
}
finally
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-09-30 18:45:02 UTC (rev 2452)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ProcessServiceImpl.java 2008-09-30 20:13:45 UTC (rev 2453)
@@ -23,8 +23,12 @@
// $Id$
+import javax.management.ObjectName;
+
import org.jbpm.api.client.ProcessEngine;
+import org.jbpm.api.model.Process;
import org.jbpm.api.service.ProcessService;
+import org.jbpm.ri.model.ProcessImpl;
/**
* The ProcessService is the entry point to create, find and otherwise manage processes.
@@ -39,4 +43,23 @@
{
super.setProcessEngine(engine);
}
+
+ @Override
+ public ObjectName registerProcess(Process proc)
+ {
+ ObjectName procID = super.registerProcess(proc);
+ ProcessImpl procImpl = (ProcessImpl)proc;
+ procImpl.register(proc);
+ return procID;
+ }
+
+ @Override
+ public boolean unregisterProcess(Process proc)
+ {
+ boolean success = super.unregisterProcess(proc);
+ ProcessImpl procImpl = (ProcessImpl)proc;
+ procImpl.unregister(proc);
+ procImpl.destroy(proc);
+ return success;
+ }
}
\ No newline at end of file
More information about the jbpm-commits
mailing list