[jbpm-commits] JBoss JBPM SVN: r4146 - in jbpm3/branches/jbpm-3.2.6.GA/modules: core/src/test/java/org/jbpm/jbpm1072 and 3 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Thu Mar 5 01:12:13 EST 2009


Author: alex.guizar at jboss.com
Date: 2009-03-05 01:12:12 -0500 (Thu, 05 Mar 2009)
New Revision: 4146

Modified:
   jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/main/java/org/jbpm/graph/def/EventCallback.java
   jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/test/java/org/jbpm/jbpm1072/JBPM1072Test.java
   jbpm3/branches/jbpm-3.2.6.GA/modules/enterprise/src/test/java/org/jbpm/enterprise/AbstractEnterpriseTestCase.java
   jbpm3/branches/jbpm-3.2.6.GA/modules/enterprise/src/test/java/org/jbpm/enterprise/jbpm1952/JBPM1952Test.java
   jbpm3/branches/jbpm-3.2.6.GA/modules/enterprise/src/test/java/org/jbpm/enterprise/jms/JmsMessageTest.java
Log:
stabilize JBPM-1952 test and JBPM-1072 by leveraging the java.util.concurrent package

Modified: jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/main/java/org/jbpm/graph/def/EventCallback.java
===================================================================
--- jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/main/java/org/jbpm/graph/def/EventCallback.java	2009-03-05 06:02:49 UTC (rev 4145)
+++ jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/main/java/org/jbpm/graph/def/EventCallback.java	2009-03-05 06:12:12 UTC (rev 4146)
@@ -142,14 +142,22 @@
   }
 
   public static void waitForEvent(String event) {
-    waitForEvent(event, DEFAULT_TIMEOUT);
+    waitForEvent(1, event, DEFAULT_TIMEOUT);
   }
 
   public static void waitForEvent(String event, long timeout) {
+    waitForEvent(1, event, timeout);
+  }
+
+  public static void waitForEvent(int occurrences, String event) {
+    waitForEvent(occurrences, event, DEFAULT_TIMEOUT);
+  }
+
+  public static void waitForEvent(int occurrences, String event, long timeout) {
     log.debug("waiting for " + event);
     Semaphore eventSemaphore = getEventSemaphore(event);
     try {
-      if (eventSemaphore.tryAcquire(timeout, TimeUnit.MILLISECONDS)) {
+      if (eventSemaphore.tryAcquire(occurrences, timeout, TimeUnit.MILLISECONDS)) {
         log.debug("received '" + event + "' notification");
       }
       else {

Modified: jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/test/java/org/jbpm/jbpm1072/JBPM1072Test.java
===================================================================
--- jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/test/java/org/jbpm/jbpm1072/JBPM1072Test.java	2009-03-05 06:02:49 UTC (rev 4145)
+++ jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/test/java/org/jbpm/jbpm1072/JBPM1072Test.java	2009-03-05 06:12:12 UTC (rev 4146)
@@ -21,6 +21,8 @@
  */
 package org.jbpm.jbpm1072;
 
+import java.util.concurrent.atomic.AtomicInteger;
+
 import org.jbpm.JbpmConfiguration;
 import org.jbpm.db.AbstractDbTestCase;
 import org.jbpm.graph.def.ActionHandler;
@@ -32,11 +34,9 @@
 import org.jbpm.job.executor.JobExecutor;
 
 /**
- * Concurrent job executors can process the same job in parallel.
- * The test simulates multiple nodes in the network processing a common job set.
- * The key setting is to give each job executor a different name;
- * normally, a job executor is named after the node's inet address
- * 
+ * Concurrent job executors can process the same job in parallel. The test simulates multiple nodes
+ * in the network processing a common job set. The key setting is to give each job executor a
+ * different name; normally, a job executor is named after the node's inet address
  * https://jira.jboss.org/jira/browse/JBPM-1072
  * 
  * @author Jiri Pechanec
@@ -49,8 +49,6 @@
   private JobExecutor[] jobExecutors = new JobExecutor[JOB_EXECUTOR_COUNT];
   private long processDefinitionId;
 
-  private volatile static int executionCount;
-
   private static final String PROCESS_DEFINITION = "<process-definition name='job-executors'>"
       + "<event type='process-end'>"
       + "<action expression='#{eventCallback.processEnd}' />"
@@ -94,16 +92,10 @@
     EventCallback.clear();
   }
 
-  public void testMultipleJobExecutors() 
-  {
-    executionCount = 0;
-
+  public void testMultipleJobExecutors() {
     // Won't Fix [JBPM-1072] Concurrent JobExecutors can process the same job in parallel
-    if (getHibernateDialect().indexOf("HSQL") != -1) 
-    {
-      return;
-    }
-    
+    if (getHibernateDialect().indexOf("HSQL") != -1) return;
+
     // kick off process instance
     ProcessDefinition processDefinition = graphSession.loadProcessDefinition(processDefinitionId);
     ProcessInstance processInstance = new ProcessInstance(processDefinition);
@@ -114,7 +106,7 @@
     commitAndCloseSession();
     try {
       EventCallback.waitForEvent(Event.EVENTTYPE_PROCESS_END);
-      assertEquals(2, executionCount);
+      assertEquals(2, Counter.getCount());
 
       waitForJobs(EventCallback.DEFAULT_TIMEOUT);
     }
@@ -142,17 +134,19 @@
     }
   }
 
-  private static synchronized void incrementCount() {
-    ++executionCount;
-  }
-
   public static class Counter implements ActionHandler {
 
+    private static final AtomicInteger count = new AtomicInteger();
+
     private static final long serialVersionUID = 1L;
 
     public void execute(ExecutionContext exeContext) throws Exception {
-      incrementCount();
+      count.incrementAndGet();
       exeContext.leaveNode();
     }
+
+    public static int getCount() {
+      return count.get();
+    }
   }
 }

Modified: jbpm3/branches/jbpm-3.2.6.GA/modules/enterprise/src/test/java/org/jbpm/enterprise/AbstractEnterpriseTestCase.java
===================================================================
--- jbpm3/branches/jbpm-3.2.6.GA/modules/enterprise/src/test/java/org/jbpm/enterprise/AbstractEnterpriseTestCase.java	2009-03-05 06:02:49 UTC (rev 4145)
+++ jbpm3/branches/jbpm-3.2.6.GA/modules/enterprise/src/test/java/org/jbpm/enterprise/AbstractEnterpriseTestCase.java	2009-03-05 06:12:12 UTC (rev 4146)
@@ -46,7 +46,6 @@
 import org.jbpm.command.SignalCommand;
 import org.jbpm.command.StartProcessInstanceCommand;
 import org.jbpm.ejb.LocalCommandServiceHome;
-import org.jbpm.graph.def.Event;
 import org.jbpm.graph.def.EventCallback;
 import org.jbpm.graph.def.ProcessDefinition;
 import org.jbpm.graph.exe.ProcessInstance;
@@ -64,7 +63,6 @@
   private static Destination commandQueue;
   private static ConnectionFactory jmsConnectionFactory;
 
-  private static final int MAX_WAIT_TIME = 30 * 1000;
   private static final Log log = LogFactory.getLog(AbstractEnterpriseTestCase.class);
 
   protected AbstractEnterpriseTestCase() {
@@ -123,15 +121,6 @@
     return processInstance.hasEnded();
   }
 
-  protected boolean waitForProcessInstanceEnd(long processInstanceId) {
-    long startTime = System.currentTimeMillis();
-    do {
-      EventCallback.waitForEvent(Event.EVENTTYPE_PROCESS_END, 1000);
-      if (System.currentTimeMillis() - startTime > MAX_WAIT_TIME) return false;
-    } while (!hasProcessInstanceEnded(processInstanceId));
-    return true;
-  }
-
   protected Object getVariable(final long processInstanceId, final String variableName) {
     return commandService.execute(new Command() {
       private static final long serialVersionUID = 1L;

Modified: jbpm3/branches/jbpm-3.2.6.GA/modules/enterprise/src/test/java/org/jbpm/enterprise/jbpm1952/JBPM1952Test.java
===================================================================
--- jbpm3/branches/jbpm-3.2.6.GA/modules/enterprise/src/test/java/org/jbpm/enterprise/jbpm1952/JBPM1952Test.java	2009-03-05 06:02:49 UTC (rev 4145)
+++ jbpm3/branches/jbpm-3.2.6.GA/modules/enterprise/src/test/java/org/jbpm/enterprise/jbpm1952/JBPM1952Test.java	2009-03-05 06:12:12 UTC (rev 4146)
@@ -4,6 +4,8 @@
 
 import org.jboss.bpm.api.test.IntegrationTestSetup;
 import org.jbpm.enterprise.AbstractEnterpriseTestCase;
+import org.jbpm.graph.def.Event;
+import org.jbpm.graph.def.EventCallback;
 
 /**
  * Use JMS instead of DBMS for storing jobs, so that each job is not taken by multiple job executor
@@ -62,10 +64,12 @@
       processInstanceIds[i] = startProcessInstance("jbpm1952").getId();
     }
 
+    EventCallback.waitForEvent(PROCESS_EXECUTION_COUNT, Event.EVENTTYPE_PROCESS_END);
+
     for (int i = 0; i < PROCESS_EXECUTION_COUNT; i++) {
       long processInstanceId = processInstanceIds[i];
       assertTrue("expected process instance " + processInstanceId + " to have ended",
-          waitForProcessInstanceEnd(processInstanceId));
+          hasProcessInstanceEnded(processInstanceId));
     }
   }
 

Modified: jbpm3/branches/jbpm-3.2.6.GA/modules/enterprise/src/test/java/org/jbpm/enterprise/jms/JmsMessageTest.java
===================================================================
--- jbpm3/branches/jbpm-3.2.6.GA/modules/enterprise/src/test/java/org/jbpm/enterprise/jms/JmsMessageTest.java	2009-03-05 06:02:49 UTC (rev 4145)
+++ jbpm3/branches/jbpm-3.2.6.GA/modules/enterprise/src/test/java/org/jbpm/enterprise/jms/JmsMessageTest.java	2009-03-05 06:12:12 UTC (rev 4146)
@@ -210,13 +210,14 @@
       processInstanceIds[i] = startProcessInstance("execution").getId();
       EventCallback.waitForEvent(Event.EVENTTYPE_NODE_ENTER);
     }
+
+    EventCallback.waitForEvent(PROCESS_INSTANCE_COUNT, Event.EVENTTYPE_NODE_LEAVE);
+    EventCallback.waitForEvent(PROCESS_INSTANCE_COUNT, Event.EVENTTYPE_PROCESS_END);
+
     for (int i = 0; i < PROCESS_INSTANCE_COUNT; i++) {
-      EventCallback.waitForEvent(Event.EVENTTYPE_NODE_LEAVE);
-    }
-    for (int i = 0; i < PROCESS_INSTANCE_COUNT; i++) {
       long processInstanceId = processInstanceIds[i];
       assertTrue("expected process instance " + processInstanceId + " to have ended",
-          waitForProcessInstanceEnd(processInstanceId));
+          hasProcessInstanceEnded(processInstanceId));
     }
   }
 }




More information about the jbpm-commits mailing list