[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