[jbpm-commits] JBoss JBPM SVN: r6721 - in jbpm3/branches/jbpm-3.2-soa: core/src/main/java/org/jbpm/db and 21 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Fri Oct 1 05:26:06 EDT 2010
Author: alex.guizar at jboss.com
Date: 2010-10-01 05:26:04 -0400 (Fri, 01 Oct 2010)
New Revision: 6721
Removed:
jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/ejb/impl/
Modified:
jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/context/def/Access.java
jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/db/AbstractDbTestCase.java
jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/exe/ProcessInstance.java
jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/node/ProcessState.java
jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/job/CleanUpProcessJob.java
jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/job/SignalTokenJob.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/graph/exe/SubProcessCancellationTest.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/graph/exe/SubProcessPlusConcurrencyDbTest.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/graph/node/ProcessStateDbTest.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm1755/JBPM1755Test.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2036/JBPM2036Test.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2094/JBPM2094Test.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2263/JBPM2263Test.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2375/JBPM2375Test.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2489/JBPM2489Test.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2691/JBPM2691Test.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2787/JBPM2787Test.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2812/JBPM2812Test.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/msg/command/AsyncExecutionDbTest.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/scenarios/AsyncTimerAndSubProcessDbTest.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/scenarios/TwoSubProcessesInOneTransactionDbTest.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/scheduler/exe/TimerDbTest.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/scheduler/exe/UnsafeSessionUsageTest.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/seam/JobExecutorCustomizationTest.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/taskmgmt/exe/TaskTimerExecutionDbTest.java
jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/pom.xml
jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/ejb/JobListenerBean.java
Log:
JBPM-2948 do not assume an active context is available before submitting signal token jobs;
adapt tests involving process states to job processing
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/context/def/Access.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/context/def/Access.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/context/def/Access.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -64,23 +64,31 @@
* verifies if the given accessLiteral is included in the access text.
*/
public boolean hasAccess(String accessLiteral) {
- return access == null ? false : access.indexOf(accessLiteral.toLowerCase()) != -1;
+ return access != null ? access.indexOf(accessLiteral.toLowerCase()) != -1 : false;
}
+ public boolean equals(Object object) {
+ if (object == this) return true;
+ if (!(object instanceof Access)) return false;
+
+ Access other = (Access) object;
+ return isReadable() == other.isReadable() && isWritable() == other.isWritable()
+ && isRequired() == other.isRequired() && isLock() == other.isLock();
+ }
+
+ public int hashCode() {
+ int result = 265979407 + hashCode(isReadable());
+ result = 752346139 * result + hashCode(isWritable());
+ result = 376739687 * result + hashCode(isRequired());
+ result = 750974239 * result + hashCode(isLock());
+ return result;
+ }
+
+ private static int hashCode(boolean value) {
+ return value ? 1231 : 1237;
+ }
+
public String toString() {
return access;
}
-
- public boolean equals(Object object) {
- if (object instanceof Access) {
- Access other = (Access) object;
- return isReadable() == other.isReadable()
- && isWritable() == other.isWritable()
- && isRequired() == other.isRequired()
- && isLock() == other.isLock();
- }
- else {
- return false;
- }
- }
}
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/db/AbstractDbTestCase.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/db/AbstractDbTestCase.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/db/AbstractDbTestCase.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -61,6 +61,8 @@
private List processDefinitionIds;
+ protected static final long JOB_TIMEOUT = 30 * 1000;
+
protected void setUp() throws Exception {
super.setUp();
createJbpmContext();
@@ -209,14 +211,11 @@
}
protected void waitForJobs(final long timeout) {
- long startTime = System.currentTimeMillis();
-
- int previousCount = 0;
- long previousTime = 0L;
-
+ final long startTime = System.currentTimeMillis();
+ long previousTime = 0;
long waitPeriod = 500;
- for (int currentCount; (currentCount = getNbrOfJobsAvailable()) > 0;) {
+ for (int currentCount, previousCount = 0; (currentCount = getNbrOfJobsAvailable()) > 0;) {
long currentTime = System.currentTimeMillis();
long elapsedTime = currentTime - startTime;
@@ -242,13 +241,13 @@
}
if (log.isDebugEnabled()) {
- log.debug("waiting " + waitPeriod + " ms for " + currentCount + " jobs to execute");
+ log.debug("waiting " + waitPeriod + " ms for " + currentCount + " jobs");
}
try {
Thread.sleep(waitPeriod);
}
catch (InterruptedException e) {
- fail("wait for jobs to execute got interrupted");
+ fail("wait for jobs got interrupted");
}
previousCount = currentCount;
@@ -287,6 +286,10 @@
return timerCount.intValue();
}
+ protected void processJobs() {
+ processJobs(JOB_TIMEOUT);
+ }
+
protected void processJobs(long maxWait) {
closeJbpmContext();
try {
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/exe/ProcessInstance.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/exe/ProcessInstance.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/exe/ProcessInstance.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -30,8 +30,6 @@
import java.util.List;
import java.util.Map;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.jbpm.JbpmContext;
import org.jbpm.JbpmException;
import org.jbpm.context.exe.ContextInstance;
@@ -60,8 +58,7 @@
* execution of a process definition, just use the {@link #ProcessInstance(ProcessDefinition)}.
*/
public class ProcessInstance implements Identifiable, Serializable {
-
- private static final Log log = LogFactory.getLog(ProcessInstance.class);
+
private static final long serialVersionUID = 1L;
long id;
@@ -338,54 +335,64 @@
rootToken.end();
// fire the process-end event
- ExecutionContext executionContext = new ExecutionContext(rootToken);
- processDefinition.fireEvent(Event.EVENTTYPE_PROCESS_END, executionContext);
+ processDefinition.fireEvent(Event.EVENTTYPE_PROCESS_END, new ExecutionContext(rootToken));
// add the process instance end log
rootToken.addLog(new ProcessInstanceEndLog());
- JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
- // check if this process was started as a subprocess of a super process
+ // is this a sub-process?
if (superProcessToken != null && !superProcessToken.hasEnded()) {
- Services services = jbpmContext.getServices();
- if(services.getMessageService()!=null)
- {
- if(log.isDebugEnabled())
- {
- log.debug("Scheduling signal token for parent process: "+superProcessToken);
- }
- MessageService messageService = services.getMessageService();
- SignalTokenJob job = new SignalTokenJob(superProcessToken);
- job.setExclusive(true);
- messageService.send(job);
- }
- else
- {
- addCascadeProcessInstance(superProcessToken.getProcessInstance());
- ExecutionContext superExecutionContext = new ExecutionContext(superProcessToken);
- superExecutionContext.setSubProcessInstance(this);
- superProcessToken.signal(superExecutionContext);
- }
+ // is message service available?
+ JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
+ MessageService messageService;
+ if (jbpmContext != null
+ && (messageService = jbpmContext.getServices().getMessageService()) != null) {
+ // signal super-process token asynchronously to avoid stale state exceptions
+ // due to concurrent signals to the super-process
+ // https://jira.jboss.org/browse/JBPM-2948
+ SignalTokenJob job = new SignalTokenJob(superProcessToken);
+ job.setDueDate(new Date());
+ job.setExclusive(true);
+ messageService.send(job);
+ }
+ else {
+ addCascadeProcessInstance(superProcessToken.getProcessInstance());
+ // message service unavailable, signal super-process token synchronously
+ ExecutionContext executionContext = new ExecutionContext(superProcessToken);
+ executionContext.setSubProcessInstance(this);
+ superProcessToken.signal(executionContext);
+ }
}
- // make sure jobs for this process instance are canceled
- // after the process end updates are posted to the database
+ // cancel jobs associated to this process instance
+ JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
+ // is there an active context?
if (jbpmContext != null) {
Services services = jbpmContext.getServices();
PersistenceService persistenceService = services.getPersistenceService();
+ // is persistence service available? if so, are there jobs to delete?
if (persistenceService != null
&& persistenceService.getJobSession().countDeletableJobsForProcessInstance(this) > 0) {
+ // is message service available?
MessageService messageService = services.getMessageService();
if (messageService != null) {
+ // cancel jobs asynchronously to avoid stale state exceptions due to job acquisition
+ // https://jira.jboss.org/browse/JBPM-1709
CleanUpProcessJob job = new CleanUpProcessJob(rootToken);
job.setDueDate(new Date());
messageService.send(job);
}
else {
+ // is scheduler service available?
SchedulerService schedulerService = services.getSchedulerService();
if (schedulerService != null) {
+ // give scheduler a chance to cancel timers
schedulerService.deleteTimersByProcessInstance(this);
}
+ else {
+ // just delete jobs straight from the database
+ persistenceService.getJobSession().deleteJobsForProcessInstance(this);
+ }
}
}
}
@@ -424,8 +431,7 @@
if (runtimeAction == null) {
throw new IllegalArgumentException("runtime action is null");
}
- if (runtimeActions == null)
- runtimeActions = new ArrayList();
+ if (runtimeActions == null) runtimeActions = new ArrayList();
runtimeActions.add(runtimeAction);
runtimeAction.processInstance = this;
return runtimeAction;
@@ -511,22 +517,18 @@
// equals ///////////////////////////////////////////////////////////////////
public boolean equals(Object o) {
- if (o == this)
- return true;
- if (!(o instanceof ProcessInstance))
- return false;
+ if (o == this) return true;
+ if (!(o instanceof ProcessInstance)) return false;
ProcessInstance other = (ProcessInstance) o;
- if (id != 0 && id == other.getId())
- return true;
+ if (id != 0 && id == other.getId()) return true;
return key != null && key.equals(other.getKey())
&& processDefinition.equals(other.getProcessDefinition());
}
public int hashCode() {
- if (key == null)
- return super.hashCode();
+ if (key == null) return super.hashCode();
int result = 295436291 + key.hashCode();
result = 1367411281 * result + processDefinition.hashCode();
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/node/ProcessState.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/node/ProcessState.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/node/ProcessState.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -21,6 +21,7 @@
*/
package org.jbpm.graph.node;
+import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
@@ -46,7 +47,6 @@
import org.jbpm.jpdl.el.impl.JbpmExpressionEvaluator;
import org.jbpm.jpdl.xml.JpdlXmlReader;
import org.jbpm.msg.MessageService;
-import org.jbpm.svc.Services;
import org.jbpm.util.Clock;
public class ProcessState extends Node {
@@ -192,21 +192,19 @@
// send the signal to start the subprocess
JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
- Services services = jbpmContext.getServices();
- if(services.getMessageService()!=null)
- {
- if(log.isDebugEnabled())
- {
- log.debug("Scheduling signal token for subprocess: "+superProcessToken);
- }
- MessageService messageService = services.getMessageService();
- SignalTokenJob job = new SignalTokenJob(subProcessInstance.getRootToken());
- messageService.send(job);
- }
- else
- {
- subProcessInstance.signal();
- }
+ MessageService messageService;
+ if (jbpmContext != null
+ && (messageService = jbpmContext.getServices().getMessageService()) != null) {
+ // signal sub-process token asynchronously to clearly denote transactional boundaries
+ // https://jira.jboss.org/browse/JBPM-2948
+ SignalTokenJob job = new SignalTokenJob(subProcessInstance.getRootToken());
+ job.setDueDate(new Date());
+ messageService.send(job);
+ }
+ else {
+ // message service unavailable, signal sub-process synchronously
+ subProcessInstance.signal();
+ }
}
public void leave(ExecutionContext executionContext, Transition transition) {
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/job/CleanUpProcessJob.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/job/CleanUpProcessJob.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/job/CleanUpProcessJob.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -26,6 +26,9 @@
import org.jbpm.scheduler.SchedulerService;
/**
+ * Cancels jobs associated to a process instance.
+ *
+ * @see <a href="https://jira.jboss.org/browse/JBPM-1709">JBPM-1709</a>
* @author Alejandro Guizar
*/
public class CleanUpProcessJob extends Job {
@@ -41,10 +44,16 @@
}
public boolean execute(JbpmContext jbpmContext) throws Exception {
+ // is scheduler service available?
SchedulerService schedulerService = jbpmContext.getServices().getSchedulerService();
if (schedulerService != null) {
+ // give scheduler a chance to cancel timers
schedulerService.deleteTimersByProcessInstance(getProcessInstance());
}
+ else {
+ // just delete jobs straight from the database
+ jbpmContext.getJobSession().deleteJobsForProcessInstance(getProcessInstance());
+ }
return true;
}
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/job/SignalTokenJob.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/job/SignalTokenJob.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/job/SignalTokenJob.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -3,10 +3,18 @@
import org.jbpm.JbpmContext;
import org.jbpm.graph.exe.Token;
+/**
+ * Signals a token asynchronously.
+ *
+ * @see <a href="https://jira.jboss.org/browse/JBPM-2948">JBPM-2948</a>
+ * @author Brad Davis
+ */
public class SignalTokenJob extends Job {
- public SignalTokenJob() {
+ private static final long serialVersionUID = 1L;
+ public SignalTokenJob() {
+ // default constructor
}
public SignalTokenJob(Token token) {
@@ -14,9 +22,7 @@
}
public boolean execute(JbpmContext jbpmContext) throws Exception {
- Token token = getToken();
- token.unlock(toString());
- token.signal();
+ getToken().signal();
return true;
}
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/graph/exe/SubProcessCancellationTest.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/graph/exe/SubProcessCancellationTest.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/graph/exe/SubProcessCancellationTest.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -38,10 +38,11 @@
ProcessInstance pi = jbpmContext.newProcessInstanceForUpdate("super");
pi.signal();
+ processJobs();
+ pi = jbpmContext.loadProcessInstance(pi.getId());
ProcessInstance subPi = pi.getRootToken().getSubProcessInstance();
assertEquals("wait", subPi.getRootToken().getNode().getName());
- pi = saveAndReload(pi);
pi.end();
pi.getTaskMgmtInstance().endAll();
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/graph/exe/SubProcessPlusConcurrencyDbTest.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/graph/exe/SubProcessPlusConcurrencyDbTest.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/graph/exe/SubProcessPlusConcurrencyDbTest.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -94,15 +94,18 @@
public void testWithSubProcess() {
ProcessInstance pi = jbpmContext.newProcessInstanceForUpdate("super");
pi.signal("with subprocess");
+ long pid = pi.getId();
+ processJobs();
+ pi = jbpmContext.loadProcessInstance(pid);
ProcessInstance subPi = pi.getRootToken().getSubProcessInstance();
assertEquals("wait", subPi.getRootToken().getNode().getName());
- newTransaction();
subPi = jbpmContext.loadProcessInstanceForUpdate(subPi.getId());
subPi.signal();
- pi = subPi.getSuperProcessToken().getProcessInstance();
+ processJobs();
+ pi = jbpmContext.loadProcessInstance(pid);
assertEquals("s", pi.getRootToken().getNode().getName());
assertEquals(new Integer(1), pi.getContextInstance().getVariable("invocationCount"));
}
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/graph/node/ProcessStateDbTest.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/graph/node/ProcessStateDbTest.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/graph/node/ProcessStateDbTest.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -59,30 +59,31 @@
+ "</process-definition>");
deployProcessDefinition(processDefinition);
- ProcessInstance superProcessInstance = jbpmContext.newProcessInstance("recursive process");
+ ProcessInstance superProcessInstance = jbpmContext.newProcessInstanceForUpdate("recursive process");
superProcessInstance.signal();
superProcessInstance.signal();
- superProcessInstance = saveAndReload(superProcessInstance);
+ processJobs();
+ superProcessInstance = jbpmContext.loadProcessInstance(superProcessInstance.getId());
Token superToken = superProcessInstance.getRootToken();
assertEquals("subprocessnode", superToken.getNode().getName());
ProcessInstance subProcessInstance = superToken.getSubProcessInstance();
- assertNotNull(subProcessInstance);
assertEquals("recursive process", subProcessInstance.getProcessDefinition().getName());
Token subToken = subProcessInstance.getRootToken();
assertEquals("first wait", subToken.getNode().getName());
subProcessInstance.signal("done");
+ jbpmContext.save(subProcessInstance);
- subProcessInstance = saveAndReload(subProcessInstance);
+ processJobs();
superProcessInstance = graphSession.loadProcessInstance(superProcessInstance.getId());
assertTrue(subProcessInstance.hasEnded());
assertTrue(superProcessInstance.hasEnded());
}
public void testMultipleRecursiveProcessDefinitions() {
- for (int i = 0; i < 30; i++) {
+ for (int i = 0; i < 10; i++) {
testRecursiveProcessDefinition();
newTransaction();
}
@@ -174,7 +175,7 @@
contextInstance.setVariable("c", "1");
processInstance.signal();
- newTransaction();
+ processJobs();
long processInstanceId = processInstance.getId();
long subProcessInstanceId = processInstance.getRootToken().getSubProcessInstance().getId();
@@ -199,7 +200,7 @@
subProcessInstance.signal();
jbpmContext.save(subProcessInstance);
- newTransaction();
+ processJobs();
assertTrue(jbpmContext.loadProcessInstance(subProcessInstanceId).hasEnded());
processInstance = jbpmContext.loadProcessInstance(processInstanceId);
@@ -253,7 +254,7 @@
ProcessInstance superProcessInstance = jbpmContext.newProcessInstanceForUpdate("superprocess");
superProcessInstance.signal();
- newTransaction();
+ processJobs();
long subProcessInstanceId = superProcessInstance.getRootToken()
.getSubProcessInstance()
.getId();
@@ -261,7 +262,7 @@
subProcessInstance.signal();
jbpmContext.save(subProcessInstance);
- newTransaction();
+ processJobs();
ProcessStateLog processStateLog = (ProcessStateLog) session.createCriteria(ProcessStateLog.class)
.addOrder(Order.desc("enter"))
.setMaxResults(1)
@@ -308,19 +309,17 @@
deployProcessDefinition(processDefinitionThree);
ProcessInstance processInstance1 = jbpmContext.newProcessInstanceForUpdate("superprocess");
- ContextInstance contextInstance = processInstance1.getContextInstance();
- contextInstance.setVariable("mySubProcess", "subprocess1");
+ processInstance1.getContextInstance().setVariable("mySubProcess", "subprocess1");
processInstance1.signal();
- newTransaction();
+ processJobs();
long processInstanceId = processInstance1.getId();
long subProcessInstanceId = processInstance1.getRootToken().getSubProcessInstance().getId();
processInstance1 = jbpmContext.loadProcessInstance(processInstanceId);
assertNotNull(processInstance1.getRootToken().getSubProcessInstance());
assertEquals("sub process state", processInstance1.getRootToken().getNode().getName());
- contextInstance = processInstance1.getContextInstance();
- assertEquals("subprocess1", contextInstance.getVariable("mySubProcess"));
+ assertEquals("subprocess1", processInstance1.getContextInstance().getVariable("mySubProcess"));
ProcessInstance subProcessInstance1 = jbpmContext.loadProcessInstance(subProcessInstanceId);
assertEquals("subprocess1", subProcessInstance1.getProcessDefinition().getName());
@@ -328,19 +327,16 @@
subProcessInstance1.signal();
jbpmContext.save(subProcessInstance1);
- newTransaction();
+ processJobs();
assertTrue(jbpmContext.loadProcessInstance(subProcessInstanceId).hasEnded());
-
processInstance1 = jbpmContext.loadProcessInstance(processInstanceId);
assertEquals("wait", processInstance1.getRootToken().getNode().getName());
- newTransaction();
ProcessInstance processInstance2 = jbpmContext.newProcessInstanceForUpdate("superprocess");
- ContextInstance contextInstance2 = processInstance2.getContextInstance();
- contextInstance2.setVariable("mySubProcess", "subprocess2");
+ processInstance2.getContextInstance().setVariable("mySubProcess", "subprocess2");
processInstance2.signal();
- newTransaction();
+ processJobs();
long processInstanceId2 = processInstance2.getId();
long subProcessInstanceId2 = processInstance2.getRootToken()
.getSubProcessInstance()
@@ -349,8 +345,7 @@
processInstance2 = jbpmContext.loadProcessInstance(processInstanceId2);
assertNotNull(processInstance2.getRootToken().getSubProcessInstance());
assertEquals("sub process state", processInstance2.getRootToken().getNode().getName());
- contextInstance2 = processInstance2.getContextInstance();
- assertEquals("subprocess2", contextInstance2.getVariable("mySubProcess"));
+ assertEquals("subprocess2", processInstance2.getContextInstance().getVariable("mySubProcess"));
ProcessInstance subProcessInstance2 = jbpmContext.loadProcessInstance(subProcessInstanceId2);
assertEquals("subprocess2", subProcessInstance2.getProcessDefinition().getName());
@@ -358,7 +353,7 @@
subProcessInstance2.signal();
jbpmContext.save(subProcessInstance2);
- newTransaction();
+ processJobs();
assertTrue(jbpmContext.loadProcessInstance(subProcessInstanceId2).hasEnded());
processInstance2 = jbpmContext.loadProcessInstance(processInstanceId2);
assertEquals("wait", processInstance2.getRootToken().getNode().getName());
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm1755/JBPM1755Test.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm1755/JBPM1755Test.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm1755/JBPM1755Test.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -57,15 +57,7 @@
jbpmContext.save(processInstance);
}
- closeJbpmContext();
- try {
- startJobExecutor();
- EventCallback.waitForEvent(processInstanceCount, Event.EVENTTYPE_PROCESS_END);
- }
- finally {
- stopJobExecutor();
- createJbpmContext();
- }
+ processJobs();
for (int i = 0; i < processInstanceCount; i++) {
long processInstanceId = processInstanceIds[i];
@@ -74,4 +66,8 @@
}
}
+ protected void waitForJobs(long timeout) {
+ EventCallback.waitForEvent(processInstanceCount, Event.EVENTTYPE_PROCESS_END);
+ }
+
}
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2036/JBPM2036Test.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2036/JBPM2036Test.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2036/JBPM2036Test.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -24,7 +24,7 @@
processInstance.signal();
jbpmContext.save(processInstance);
- processJobs(30000);
+ processJobs();
processInstance = jbpmContext.loadProcessInstance(processInstance.getId());
assertTrue("expected " + processInstance + " to have ended", processInstance.hasEnded());
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2094/JBPM2094Test.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2094/JBPM2094Test.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2094/JBPM2094Test.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -65,7 +65,7 @@
processInstanceIds[i] = processInstance.getId();
}
- processJobs(TIMEOUT);
+ processJobs();
for (int i = 0; i < INSTANCE_COUNT; i++) {
ProcessInstance processInstance = jbpmContext.loadProcessInstance(processInstanceIds[i]);
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2263/JBPM2263Test.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2263/JBPM2263Test.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2263/JBPM2263Test.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -44,7 +44,7 @@
ProcessInstance processInstance = jbpmContext.newProcessInstanceForUpdate("multiple timers");
processInstance.signal();
- processJobs(60 * 1000);
+ processJobs();
processInstance = jbpmContext.loadProcessInstance(processInstance.getId());
assertTrue("expected " + processInstance + " to have ended", processInstance.hasEnded());
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2375/JBPM2375Test.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2375/JBPM2375Test.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2375/JBPM2375Test.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -67,7 +67,7 @@
ProcessInstance processInstance = jbpmContext.newProcessInstanceForUpdate("jbpm2375");
processInstance.signal();
- processJobs(TEST_TIMEOUT);
+ processJobs();
processInstance = jbpmContext.loadProcessInstance(processInstance.getId());
assert processInstance.hasEnded() : processInstance;
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2489/JBPM2489Test.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2489/JBPM2489Test.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2489/JBPM2489Test.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -49,7 +49,7 @@
processInstance.signal();
jbpmContext.save(processInstance);
- processJobs(TIMEOUT);
+ processJobs();
processInstance = jbpmContext.getProcessInstance(processInstance.getId());
assertTrue("expected " + processInstance + " to have ended", processInstance.hasEnded());
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2691/JBPM2691Test.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2691/JBPM2691Test.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2691/JBPM2691Test.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -62,7 +62,7 @@
ProcessInstance processInstance = jbpmContext.newProcessInstance("jobex");
processInstance.signal();
- processJobs(60 * 1000);
+ processJobs();
processInstance = jbpmContext.getProcessInstance(processInstance.getId());
Token rootToken = processInstance.getRootToken();
List jobs = jobSession.findJobsByToken(rootToken);
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2787/JBPM2787Test.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2787/JBPM2787Test.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2787/JBPM2787Test.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -64,7 +64,7 @@
processInstanceIds[i] = processInstance.getId();
}
- processJobs(TIMEOUT);
+ processJobs();
for (int i = 0; i < INSTANCE_COUNT; i++) {
ProcessInstance processInstance = jbpmContext.loadProcessInstance(processInstanceIds[i]);
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2812/JBPM2812Test.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2812/JBPM2812Test.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2812/JBPM2812Test.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -57,7 +57,7 @@
processInstance.signal();
assertEquals("state1", processInstance.getRootToken().getNode().getName());
- processJobs(60 * 1000);
+ processJobs();
processInstance = jbpmContext.loadProcessInstance(processInstance.getId());
assertTrue("expected " + processInstance + " to have ended", processInstance.hasEnded());
assertEquals("timed-out-end", processInstance.getRootToken().getNode().getName());
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/msg/command/AsyncExecutionDbTest.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/msg/command/AsyncExecutionDbTest.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/msg/command/AsyncExecutionDbTest.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -78,7 +78,7 @@
assertEquals("one", processInstance.getRootToken().getNode().getName());
assertEquals(1, getNbrOfJobsAvailable());
- processJobs(TIMEOUT);
+ processJobs();
processInstance = jbpmContext.loadProcessInstance(processInstance.getId());
assertTrue(processInstance.hasEnded());
@@ -141,7 +141,7 @@
assertEquals("end", processInstance.getRootToken().getNode().getName());
assertEquals(6, getNbrOfJobsAvailable());
- processJobs(TIMEOUT);
+ processJobs();
processInstance = jbpmContext.loadProcessInstance(processInstance.getId());
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/scenarios/AsyncTimerAndSubProcessDbTest.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/scenarios/AsyncTimerAndSubProcessDbTest.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/scenarios/AsyncTimerAndSubProcessDbTest.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -81,7 +81,7 @@
superContext.setVariable("b", "value b");
superInstance.signal();
- processJobs(60 * 1000);
+ processJobs();
superInstance = jbpmContext.loadProcessInstance(superInstance.getId());
assertEquals("subprocess", superInstance.getRootToken().getNode().getName());
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/scenarios/TwoSubProcessesInOneTransactionDbTest.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/scenarios/TwoSubProcessesInOneTransactionDbTest.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/scenarios/TwoSubProcessesInOneTransactionDbTest.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -2,7 +2,8 @@
import java.util.List;
-import org.hibernate.Query;
+import org.hibernate.criterion.Restrictions;
+
import org.jbpm.db.AbstractDbTestCase;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
@@ -38,17 +39,17 @@
processInstance.signal();
jbpmContext.save(processInstance);
- newTransaction();
- Query query = session.createQuery("from org.jbpm.graph.exe.ProcessInstance pi "
- + "where pi.processDefinition.name = 'super'");
- List superInstances = query.list();
- assertEquals(1, superInstances.size());
- ProcessInstance superInstance = (ProcessInstance) superInstances.get(0);
+ processJobs();
+ ProcessInstance superInstance = (ProcessInstance) session.createCriteria(ProcessInstance.class)
+ .createAlias("processDefinition", "pd")
+ .add(Restrictions.eq("pd.name", "super"))
+ .uniqueResult();
assertEquals("wait", superInstance.getRootToken().getNode().getName());
- query = session.createQuery("from org.jbpm.graph.exe.ProcessInstance pi "
- + "where pi.processDefinition.name = 'sub'");
- List subInstances = query.list();
+ List subInstances = session.createCriteria(ProcessInstance.class)
+ .createAlias("processDefinition", "pd")
+ .add(Restrictions.eq("pd.name", "sub"))
+ .list();
assertEquals(2, subInstances.size());
ProcessInstance subInstance = (ProcessInstance) subInstances.get(0);
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/scheduler/exe/TimerDbTest.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/scheduler/exe/TimerDbTest.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/scheduler/exe/TimerDbTest.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -228,7 +228,7 @@
newTransaction();
assertEquals(1, getTimerCount());
- processJobs(20000);
+ processJobs();
assertEquals(0, getTimerCount());
}
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/scheduler/exe/UnsafeSessionUsageTest.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/scheduler/exe/UnsafeSessionUsageTest.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/scheduler/exe/UnsafeSessionUsageTest.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -28,7 +28,7 @@
processInstance.signal();
jbpmContext.save(processInstance);
- processJobs(60 * 1000);
+ processJobs();
processInstance = graphSession.loadProcessInstance(processInstance.getId());
assertEquals("a", processInstance.getRootToken().getNode().getName());
}
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/seam/JobExecutorCustomizationTest.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/seam/JobExecutorCustomizationTest.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/seam/JobExecutorCustomizationTest.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -31,7 +31,7 @@
ProcessInstance processInstance = jbpmContext.newProcessInstanceForUpdate("custom job exec");
processInstance.signal();
- processJobs(60 * 1000);
+ processJobs();
processInstance = jbpmContext.loadProcessInstance(processInstance.getId());
assertEquals(Boolean.TRUE, processInstance.getContextInstance().getVariable("custom"));
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/taskmgmt/exe/TaskTimerExecutionDbTest.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/taskmgmt/exe/TaskTimerExecutionDbTest.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/taskmgmt/exe/TaskTimerExecutionDbTest.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -134,7 +134,7 @@
processInstance.signal();
jbpmContext.save(processInstance);
- processJobs(60 * 1000);
+ processJobs();
processInstance = jbpmContext.loadProcessInstance(processInstance.getId());
assertEquals(new Integer(1), processInstance.getContextInstance().getVariable("count"));
}
@@ -161,7 +161,7 @@
processInstance.signal();
jbpmContext.save(processInstance);
- processJobs(60 * 1000);
+ processJobs();
processInstance = jbpmContext.loadProcessInstance(processInstance.getId());
assertEquals(new Integer(1), processInstance.getContextInstance().getVariable("count"));
}
Modified: jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/pom.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/pom.xml 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/pom.xml 2010-10-01 09:26:04 UTC (rev 6721)
@@ -1,7 +1,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
- <name>jBPM3 - EJB3</name>
+ <name>jBPM3 - Enterprise JEE5</name>
<groupId>org.jbpm.jbpm3</groupId>
<artifactId>jbpm-enterprise-jee5</artifactId>
<packaging>ejb</packaging>
Modified: jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/ejb/JobListenerBean.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/ejb/JobListenerBean.java 2010-09-30 20:15:46 UTC (rev 6720)
+++ jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/ejb/JobListenerBean.java 2010-10-01 09:26:04 UTC (rev 6721)
@@ -1,13 +1,11 @@
package org.jbpm.ejb;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-
import javax.jms.JMSException;
import javax.jms.Message;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+
import org.jbpm.command.Command;
import org.jbpm.jms.ExecuteJobCommand;
@@ -28,23 +26,25 @@
*/
public class JobListenerBean extends CommandListenerBean {
- private static final DateFormat sdf = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z");
private static final long serialVersionUID = 1L;
private static final Log log = LogFactory.getLog(JobListenerBean.class);
@Override
protected Command extractCommand(Message message) throws JMSException {
- // checking for jobId property
+ // check for jobId property
if (message.propertyExists("jobId")) {
long jobId = message.getLongProperty("jobId");
return new ExecuteJobCommand(jobId);
}
- else if(super.extractCommand(message)!=null)
- {
- return super.extractCommand(message);
- }
else {
- log.warn("property jobId not found and command not found.");
+ // check for command object
+ Command command = super.extractCommand(message);
+ if (command != null) {
+ return command;
+ }
+ else {
+ log.warn("neither property jobId nor command found");
+ }
}
return null;
}
More information about the jbpm-commits
mailing list