[jbpm-commits] JBoss JBPM SVN: r5219 - jbpm3/branches/jbpm-3.2-soa/modules/core/src/test/java/org/jbpm/msg/command.
do-not-reply at jboss.org
do-not-reply at jboss.org
Fri Jul 3 23:34:11 EDT 2009
Author: alex.guizar at jboss.com
Date: 2009-07-03 23:34:11 -0400 (Fri, 03 Jul 2009)
New Revision: 5219
Modified:
jbpm3/branches/jbpm-3.2-soa/modules/core/src/test/java/org/jbpm/msg/command/AsyncExecutionDbTest.java
Log:
make AsyncExecutionDbTest resistant to stale state exceptions
Modified: jbpm3/branches/jbpm-3.2-soa/modules/core/src/test/java/org/jbpm/msg/command/AsyncExecutionDbTest.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/core/src/test/java/org/jbpm/msg/command/AsyncExecutionDbTest.java 2009-07-04 02:08:39 UTC (rev 5218)
+++ jbpm3/branches/jbpm-3.2-soa/modules/core/src/test/java/org/jbpm/msg/command/AsyncExecutionDbTest.java 2009-07-04 03:34:11 UTC (rev 5219)
@@ -21,169 +21,146 @@
*/
package org.jbpm.msg.command;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
+import org.jbpm.context.exe.ContextInstance;
import org.jbpm.db.AbstractDbTestCase;
import org.jbpm.graph.def.ActionHandler;
-import org.jbpm.graph.def.Node;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.graph.exe.ProcessInstance;
public class AsyncExecutionDbTest extends AbstractDbTestCase {
- static List recordedNodes = new ArrayList();
-
private static int TIMEOUT = 60 * 1000;
public static class RecordNode implements ActionHandler {
-
private static final long serialVersionUID = 1L;
public void execute(ExecutionContext executionContext) throws Exception {
- Node node = executionContext.getNode();
- recordedNodes.add(node.getName());
- node.leave(executionContext);
+ Integer count = (Integer) executionContext.getVariable("count");
+ count = new Integer(count != null ? count.intValue() + 1 : 1);
+ executionContext.setVariable("count", count);
+ executionContext.setVariable(executionContext.getNode().getName(), count);
+ executionContext.leaveNode();
}
}
public void testAsyncExecution() throws Exception {
+ ProcessDefinition processDefinition = ProcessDefinition.parseXmlString("<process-definition name='async exec'>" +
+ " <start-state>" +
+ " <transition to='one' />" +
+ " </start-state>" +
+ " <node async='true' name='one'>" +
+ " <action class='" +
+ RecordNode.class.getName() +
+ "' />" +
+ " <transition to='two' />" +
+ " </node>" +
+ " <node async='exclusive' name='two'>" +
+ " <action class='" +
+ RecordNode.class.getName() +
+ "' />" +
+ " <transition to='three' />" +
+ " </node>" +
+ " <node async='true' name='three'>" +
+ " <action class='" +
+ RecordNode.class.getName() +
+ "' />" +
+ " <transition to='end' />" +
+ " </node>" +
+ " <end-state name='end' />" +
+ "</process-definition>");
+ jbpmContext.deployProcessDefinition(processDefinition);
- ProcessDefinition processDefinition = ProcessDefinition.parseXmlString("<process-definition>"
- + " <start-state>"
- + " <transition to='one' />"
- + " </start-state>"
- + " <node async='true' name='one'>"
- + " <action class='org.jbpm.msg.command.AsyncExecutionDbTest$RecordNode' />"
- + " <transition to='two' />"
- + " </node>"
- + " <node async='exclusive' name='two'>"
- + " <action class='org.jbpm.msg.command.AsyncExecutionDbTest$RecordNode' />"
- + " <transition to='three' />"
- + " </node>"
- + " <node async='true' name='three'>"
- + " <action class='org.jbpm.msg.command.AsyncExecutionDbTest$RecordNode' />"
- + " <transition to='end' />"
- + " </node>"
- + " <end-state name='end' />"
- + "</process-definition>");
- processDefinition = saveAndReload(processDefinition);
+ newTransaction();
try {
ProcessInstance processInstance = new ProcessInstance(processDefinition);
processInstance.signal();
jbpmContext.save(processInstance);
- assertEquals(processDefinition.getNode("one"), processInstance.getRootToken().getNode());
+ assertEquals("one", processInstance.getRootToken().getNode().getName());
assertEquals(1, getNbrOfJobsAvailable());
processJobs(TIMEOUT);
- assertEquals(0, getNbrOfJobsAvailable());
-
- List expectedNodes = new ArrayList();
- expectedNodes.add("one");
- expectedNodes.add("two");
- expectedNodes.add("three");
-
- assertEquals(expectedNodes, recordedNodes);
-
- processDefinition = graphSession.loadProcessDefinition(processDefinition.getId());
- processInstance = graphSession.loadProcessInstance(processInstance.getId());
+ processInstance = jbpmContext.loadProcessInstance(processInstance.getId());
assertTrue(processInstance.hasEnded());
- assertEquals(processDefinition.getNode("end"), processInstance.getRootToken().getNode());
+
+ ContextInstance contextInstance = processInstance.getContextInstance();
+ String[] nodes = { "one", "two", "three" };
+ for (int i = 0; i < nodes.length; i++) {
+ Integer value = (Integer) contextInstance.getVariable(nodes[i]);
+ assertEquals(i + 1, value.intValue());
+ }
}
finally {
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
}
-
}
- static Set recordedActionNumbers = new HashSet();
-
public static class RecordAction implements ActionHandler {
-
private static final long serialVersionUID = 1L;
- String nbr;
public void execute(ExecutionContext executionContext) throws Exception {
- recordedActionNumbers.add(nbr);
+ executionContext.setVariable(executionContext.getAction().getName(), Boolean.TRUE);
}
}
public void testAsyncAction() throws Exception {
- ProcessDefinition processDefinition = ProcessDefinition.parseXmlString("<process-definition>"
+ ProcessDefinition processDefinition = ProcessDefinition.parseXmlString("<process-definition name='async action'>"
+ " <event type='process-start'>"
- + " <action async='true' class='"
- + RecordAction.class.getName()
- + "'>"
- + " <nbr>1</nbr>"
- + " </action>"
- + " <action async='exclusive' class='"
- + RecordAction.class.getName()
- + "'>"
- + " <nbr>2</nbr>"
- + " </action>"
- + " </event>"
- + " <start-state>"
- + " <transition to='one'>"
- + " <action async='true' class='"
- + RecordAction.class.getName()
- + "'>"
- + " <nbr>3</nbr>"
- + " </action>"
- + " <action async='exclusive' class='"
- + RecordAction.class.getName()
- + "'>"
- + " <nbr>4</nbr>"
- + " </action>"
- + " </transition>"
- + " </start-state>"
- + " <node name='one'>"
- + " <event type='node-enter'>"
- + " <action async='true' class='"
- + RecordAction.class.getName()
- + "'>"
- + " <nbr>5</nbr>"
- + " </action>"
- + " <action async='exclusive' class='"
- + RecordAction.class.getName()
- + "'>"
- + " <nbr>6</nbr>"
- + " </action>"
- + " </event>"
- + " <transition to='end' />"
- + " </node>"
- + " <end-state name='end' />"
- + "</process-definition>");
- processDefinition = saveAndReload(processDefinition);
+ + " <action name='sa' async='true' class='" +
+ RecordAction.class.getName() +
+ "'/>" +
+ " <action name='se' async='exclusive' class='" +
+ RecordAction.class.getName() +
+ "'/>" +
+ " </event>" +
+ " <start-state>" +
+ " <transition to='one'>" +
+ " <action name='ta' async='true' class='" +
+ RecordAction.class.getName() +
+ "'/>" +
+ " <action name='te' async='exclusive' class='" +
+ RecordAction.class.getName() +
+ "'/>" +
+ " </transition>" +
+ " </start-state>" +
+ " <node name='one'>" +
+ " <event type='node-enter'>" +
+ " <action name='na' async='true' class='" +
+ RecordAction.class.getName() +
+ "'/>" +
+ " <action name='ne' async='exclusive' class='" +
+ RecordAction.class.getName() +
+ "'/>" +
+ " </event>" +
+ " <transition to='end' />" +
+ " </node>" +
+ " <end-state name='end' />" +
+ "</process-definition>");
+ jbpmContext.deployProcessDefinition(processDefinition);
+
+ newTransaction();
try {
ProcessInstance processInstance = new ProcessInstance(processDefinition);
processInstance.signal();
jbpmContext.save(processInstance);
- assertEquals(processDefinition.getNode("end"), processInstance.getRootToken().getNode());
+
+ assertEquals("end", processInstance.getRootToken().getNode().getName());
assertEquals(6, getNbrOfJobsAvailable());
- assertEquals(0, recordedActionNumbers.size());
processJobs(TIMEOUT);
- assertEquals(0, getNbrOfJobsAvailable());
+ processInstance = jbpmContext.loadProcessInstance(processInstance.getId());
- HashSet expected = new HashSet();
- expected.add("1");
- expected.add("2");
- expected.add("3");
- expected.add("4");
- expected.add("5");
- expected.add("6");
-
- assertEquals(expected, recordedActionNumbers);
+ ContextInstance contextInstance = processInstance.getContextInstance();
+ String[] actions = { "sa", "se", "ta", "te", "na", "ne" };
+ for (int i = 0; i < actions.length; i++) {
+ assertEquals(Boolean.TRUE, contextInstance.getVariable(actions[i]));
+ }
}
finally {
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
}
-
}
}
More information about the jbpm-commits
mailing list