Author: tom.baeyens(a)jboss.com
Date: 2010-01-14 04:18:41 -0500 (Thu, 14 Jan 2010)
New Revision: 6079
Added:
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activity/forkjoin/
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activity/forkjoin/MultipleForksTest.java
Modified:
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ForkActivity.java
jbpm4/trunk/modules/test-db/pom.xml
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/execution/ExecutionEagerLoadingTest.java
Log:
JBPM-2742 fixing bug with nested forks
Modified:
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ForkActivity.java
===================================================================
---
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ForkActivity.java 2010-01-14
08:33:40 UTC (rev 6078)
+++
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ForkActivity.java 2010-01-14
09:18:41 UTC (rev 6079)
@@ -62,7 +62,7 @@
if (forkingTransitions.size()==0) {
// end this execution
execution.end();
-
+
// if there is exactly 1 transition to be taken, just use the incoming execution
} else if (forkingTransitions.size()==1) {
execution.take(forkingTransitions.get(0));
@@ -76,6 +76,7 @@
execution.setActivity(null);
} else if (Execution.STATE_ACTIVE_CONCURRENT.equals(execution.getState())) {
concurrentRoot = execution.getParent();
+ execution.end();
}
for (Transition transition: forkingTransitions) {
Modified: jbpm4/trunk/modules/test-db/pom.xml
===================================================================
--- jbpm4/trunk/modules/test-db/pom.xml 2010-01-14 08:33:40 UTC (rev 6078)
+++ jbpm4/trunk/modules/test-db/pom.xml 2010-01-14 09:18:41 UTC (rev 6079)
@@ -98,6 +98,17 @@
</execution>
</executions>
</plugin>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <failIfNoTests>false</failIfNoTests>
+ <trimStackTrace>false</trimStackTrace>
+ <redirectTestOutputToFile>true</redirectTestOutputToFile>
+ <excludes>
+ <exclude>org/jbpm/bpmn/UserTaskTest.java</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
</plugins>
</build>
Added:
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activity/forkjoin/MultipleForksTest.java
===================================================================
---
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activity/forkjoin/MultipleForksTest.java
(rev 0)
+++
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activity/forkjoin/MultipleForksTest.java 2010-01-14
09:18:41 UTC (rev 6079)
@@ -0,0 +1,118 @@
+/*
+ * 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.activity.forkjoin;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.jbpm.api.ProcessInstance;
+import org.jbpm.test.JbpmTestCase;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class MultipleForksTest extends JbpmTestCase {
+
+ public void testConcurrencyGraphBased() {
+ deployJpdlXmlString(
+ "<process name='ConcurrencyGraphBased'>" +
+ " <start>" +
+ " <transition to='fork'/>" +
+ " </start>" +
+ " <fork name='fork'>" +
+ " <transition to='send invoice' />" +
+ " <transition to='fork2' />" +
+ " </fork>" +
+ " <fork name='fork2'>" +
+ " <transition to='load truck'/>" +
+ " <transition to='print shipping documents' />" +
+ " </fork>" +
+ " <state name='send invoice'>" +
+ " <transition to='final join' />" +
+ " </state>" +
+ " <state name='load truck'>" +
+ " <transition to='shipping join' />" +
+ " </state>" +
+ " <state name='print shipping documents'>" +
+ " <transition to='shipping join' />" +
+ " </state>" +
+ " <join name='shipping join'>" +
+ " <transition to='drive truck to destination'/>" +
+ " </join>" +
+ " <state name='drive truck to destination'>" +
+ " <transition to='final join' />" +
+ " </state>" +
+ " <join name='final join'>" +
+ " <transition to='end'/>" +
+ " </join>" +
+ " <end name='end' />" +
+ "</process>"
+ );
+
+ ProcessInstance processInstance =
executionService.startProcessInstanceByKey("ConcurrencyGraphBased");
+ String pid = processInstance.getId();
+
+ Set<String> expectedActivityNames = new HashSet<String>();
+ expectedActivityNames.add("send invoice");
+ expectedActivityNames.add("load truck");
+ expectedActivityNames.add("print shipping documents");
+
+ assertEquals(expectedActivityNames, processInstance.findActiveActivityNames());
+
+ assertNotNull(processInstance.findActiveExecutionIn("send invoice"));
+ assertNotNull(processInstance.findActiveExecutionIn("load truck"));
+ assertNotNull(processInstance.findActiveExecutionIn("print shipping
documents"));
+
+ String sendInvoiceExecutionId = processInstance.findActiveExecutionIn("send
invoice").getId();
+ processInstance = executionService.signalExecutionById(sendInvoiceExecutionId);
+
+ expectedActivityNames.remove("send invoice");
+ assertEquals(expectedActivityNames, processInstance.findActiveActivityNames());
+
+ assertNotNull(processInstance.findActiveExecutionIn("load truck"));
+ assertNotNull(processInstance.findActiveExecutionIn("print shipping
documents"));
+
+ String loadTruckExecutionId = processInstance.findActiveExecutionIn("load
truck").getId();
+ processInstance = executionService.signalExecutionById(loadTruckExecutionId);
+
+ expectedActivityNames.remove("load truck");
+ assertEquals(expectedActivityNames, processInstance.findActiveActivityNames());
+
+ assertNotNull(processInstance.findActiveExecutionIn("print shipping
documents"));
+
+ String printShippingDocumentsId = processInstance.findActiveExecutionIn("print
shipping documents").getId();
+ processInstance = executionService.signalExecutionById(printShippingDocumentsId);
+
+ expectedActivityNames.remove("print shipping documents");
+ expectedActivityNames.add("drive truck to destination");
+ assertEquals(expectedActivityNames, processInstance.findActiveActivityNames());
+
+ assertNotNull(processInstance.findActiveExecutionIn("drive truck to
destination"));
+
+ String driveTruckExecutionId = processInstance.findActiveExecutionIn("drive
truck to destination").getId();
+ processInstance = executionService.signalExecutionById(driveTruckExecutionId);
+
+ assertNull("execution "+pid+" should not exist",
executionService.findExecutionById(pid));
+ }
+
+}
Property changes on:
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activity/forkjoin/MultipleForksTest.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified:
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/execution/ExecutionEagerLoadingTest.java
===================================================================
---
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/execution/ExecutionEagerLoadingTest.java 2010-01-14
08:33:40 UTC (rev 6078)
+++
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/execution/ExecutionEagerLoadingTest.java 2010-01-14
09:18:41 UTC (rev 6079)
@@ -66,7 +66,7 @@
processInstance = executionService.findExecutionById(processInstance.getId());
- assertEquals(6, processInstance.getExecutions().size());
+ assertEquals(4, processInstance.getExecutions().size());
processInstance = executionService.findExecutionById(processInstance.getId());