[jbpm-commits] JBoss JBPM SVN: r4128 - in jbpm3/branches/jbpm-3.2.6.GA/modules/core/src: main/java/org/jbpm/graph/exe and 5 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Tue Mar 3 19:46:18 EST 2009
Author: alex.guizar at jboss.com
Date: 2009-03-03 19:46:18 -0500 (Tue, 03 Mar 2009)
New Revision: 4128
Modified:
jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/main/java/org/jbpm/db/JobSession.java
jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/main/java/org/jbpm/graph/exe/ProcessInstance.java
jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/main/java/org/jbpm/job/CleanUpProcessJob.java
jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/main/resources/org/jbpm/db/hibernate.queries.hbm.xml
jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/test/java/org/jbpm/jbpm1798/JBPM1798Test.java
jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/test/java/org/jbpm/msg/command/AsyncExecutionDbTest.java
jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/test/java/org/jbpm/perf/SimplePerformanceTest.java
Log:
JBPM-2043: merge r4126 from branch jbpm-3.2.5.SP
Modified: jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/main/java/org/jbpm/db/JobSession.java
===================================================================
--- jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/main/java/org/jbpm/db/JobSession.java 2009-03-03 23:20:30 UTC (rev 4127)
+++ jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/main/java/org/jbpm/db/JobSession.java 2009-03-04 00:46:18 UTC (rev 4128)
@@ -217,20 +217,21 @@
}
}
+ public int countDeletableJobsForProcessInstance(ProcessInstance processInstance) {
+ Number jobCount = (Number) session.getNamedQuery("JobSession.countDeletableJobsForProcessInstance")
+ .setParameter("processInstance", processInstance)
+ .uniqueResult();
+ return jobCount.intValue();
+ }
+
public void deleteJobsForProcessInstance(ProcessInstance processInstance) {
try {
- // delete node execution jobs
- int entityCount = session.getNamedQuery("JobSession.deleteExecuteNodeJobsForProcessInstance")
+ // delete unowned node-execute-jobs and timers
+ int entityCount = session.getNamedQuery("JobSession.deleteJobsForProcessInstance")
.setParameter("processInstance", processInstance)
.executeUpdate();
- log.debug("deleted " + entityCount + " execute-node-jobs for " + processInstance);
+ log.debug("deleted " + entityCount + " jobs for " + processInstance);
- // delete unowned timers
- entityCount = session.getNamedQuery("JobSession.deleteTimersForProcessInstance")
- .setParameter("processInstance", processInstance)
- .executeUpdate();
- log.debug("deleted " + entityCount + " timers for " + processInstance);
-
// prevent further repetitions
List<?> timers = session.getNamedQuery("JobSession.findRepeatingTimersForProcessInstance")
.setParameter("processInstance", processInstance)
Modified: jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/main/java/org/jbpm/graph/exe/ProcessInstance.java
===================================================================
--- jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/main/java/org/jbpm/graph/exe/ProcessInstance.java 2009-03-03 23:20:30 UTC (rev 4127)
+++ jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/main/java/org/jbpm/graph/exe/ProcessInstance.java 2009-03-04 00:46:18 UTC (rev 4128)
@@ -29,8 +29,10 @@
import java.util.List;
import java.util.Map;
+import org.jbpm.JbpmContext;
import org.jbpm.JbpmException;
import org.jbpm.context.exe.ContextInstance;
+import org.jbpm.db.JobSession;
import org.jbpm.graph.def.Event;
import org.jbpm.graph.def.Identifiable;
import org.jbpm.graph.def.Node;
@@ -44,6 +46,7 @@
import org.jbpm.module.def.ModuleDefinition;
import org.jbpm.module.exe.ModuleInstance;
import org.jbpm.msg.MessageService;
+import org.jbpm.persistence.PersistenceService;
import org.jbpm.svc.Services;
import org.jbpm.taskmgmt.exe.TaskMgmtInstance;
import org.jbpm.util.Clock;
@@ -359,15 +362,22 @@
superProcessToken.signal(superExecutionContext);
}
- // make sure all the timers for this process instance are canceled after the process end updates are posted to the
- // database
- // NOTE Only timers should be deleted, messages should be kept.
- MessageService messageService = (MessageService)Services.getCurrentService(Services.SERVICENAME_MESSAGE, false);
- if (messageService != null)
+ // make sure jobs for this process instance are canceled
+ // after the process end updates are posted to the database
+ JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
+ if (jbpmContext != null)
{
- CleanUpProcessJob job = new CleanUpProcessJob(this);
- job.setDueDate(new Date());
- messageService.send(job);
+ Services services = jbpmContext.getServices();
+ MessageService messageService = services.getMessageService();
+ PersistenceService persistenceService = services.getPersistenceService();
+ if (messageService != null
+ && persistenceService != null
+ && persistenceService.getJobSession().countDeletableJobsForProcessInstance(this) > 0)
+ {
+ CleanUpProcessJob job = new CleanUpProcessJob(rootToken);
+ job.setDueDate(new Date());
+ messageService.send(job);
+ }
}
}
}
Modified: jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/main/java/org/jbpm/job/CleanUpProcessJob.java
===================================================================
--- jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/main/java/org/jbpm/job/CleanUpProcessJob.java 2009-03-03 23:20:30 UTC (rev 4127)
+++ jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/main/java/org/jbpm/job/CleanUpProcessJob.java 2009-03-04 00:46:18 UTC (rev 4128)
@@ -22,7 +22,7 @@
package org.jbpm.job;
import org.jbpm.JbpmContext;
-import org.jbpm.graph.exe.ProcessInstance;
+import org.jbpm.graph.exe.Token;
import org.jbpm.scheduler.SchedulerService;
/**
@@ -36,8 +36,8 @@
// default constructor
}
- public CleanUpProcessJob(ProcessInstance processInstance) {
- this.processInstance = processInstance;
+ public CleanUpProcessJob(Token token) {
+ super(token);
}
public boolean execute(JbpmContext jbpmContext) throws Exception {
Modified: jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/main/resources/org/jbpm/db/hibernate.queries.hbm.xml
===================================================================
--- jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/main/resources/org/jbpm/db/hibernate.queries.hbm.xml 2009-03-03 23:20:30 UTC (rev 4127)
+++ jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/main/resources/org/jbpm/db/hibernate.queries.hbm.xml 2009-03-04 00:46:18 UTC (rev 4128)
@@ -345,14 +345,25 @@
]]>
</query>
- <query name="JobSession.deleteTimersForProcessInstance">
+ <query name="JobSession.countDeletableJobsForProcessInstance">
<![CDATA[
- delete from org.jbpm.job.Timer timer
- where timer.processInstance = :processInstance
- and timer.lockOwner is null
+ select count(job.id)
+ from org.jbpm.job.Job job
+ where job.processInstance = :processInstance
+ and job.lockOwner is null
+ and job.class in (org.jbpm.job.ExecuteNodeJob, org.jbpm.job.Timer)
]]>
</query>
+ <query name="JobSession.deleteJobsForProcessInstance">
+ <![CDATA[
+ delete from org.jbpm.job.Job job
+ where job.processInstance = :processInstance
+ and job.lockOwner is null
+ and job.class in (org.jbpm.job.ExecuteNodeJob, org.jbpm.job.Timer)
+ ]]>
+ </query>
+
<query name="JobSession.findRepeatingTimersForProcessInstance">
<![CDATA[
select timer
@@ -362,14 +373,6 @@
]]>
</query>
- <query name="JobSession.deleteExecuteNodeJobsForProcessInstance">
- <![CDATA[
- delete from org.jbpm.job.ExecuteNodeJob job
- where job.processInstance = :processInstance
- and job.lockOwner is null
- ]]>
- </query>
-
<query name="JobSession.findJobsByToken">
<![CDATA[
select job
Modified: jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/test/java/org/jbpm/jbpm1798/JBPM1798Test.java
===================================================================
--- jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/test/java/org/jbpm/jbpm1798/JBPM1798Test.java 2009-03-03 23:20:30 UTC (rev 4127)
+++ jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/test/java/org/jbpm/jbpm1798/JBPM1798Test.java 2009-03-04 00:46:18 UTC (rev 4128)
@@ -34,7 +34,7 @@
try {
pd.createProcessInstance();
newTransaction();
- assertEquals(2, getNbrOfJobsAvailable());
+ assertEquals(1, getNbrOfJobsAvailable());
processJobs(maxWaitTime);
}
finally {
Modified: jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/test/java/org/jbpm/msg/command/AsyncExecutionDbTest.java
===================================================================
--- jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/test/java/org/jbpm/msg/command/AsyncExecutionDbTest.java 2009-03-03 23:20:30 UTC (rev 4127)
+++ jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/test/java/org/jbpm/msg/command/AsyncExecutionDbTest.java 2009-03-04 00:46:18 UTC (rev 4128)
@@ -162,7 +162,7 @@
processInstance.signal();
jbpmContext.save(processInstance);
assertEquals(processDefinition.getNode("end"), processInstance.getRootToken().getNode());
- assertEquals(7, getNbrOfJobsAvailable());
+ assertEquals(6, getNbrOfJobsAvailable());
assertEquals(0, recordedActionNumbers.size());
processJobs(5000);
Modified: jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/test/java/org/jbpm/perf/SimplePerformanceTest.java
===================================================================
--- jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/test/java/org/jbpm/perf/SimplePerformanceTest.java 2009-03-03 23:20:30 UTC (rev 4127)
+++ jbpm3/branches/jbpm-3.2.6.GA/modules/core/src/test/java/org/jbpm/perf/SimplePerformanceTest.java 2009-03-04 00:46:18 UTC (rev 4128)
@@ -21,10 +21,8 @@
*/
package org.jbpm.perf;
-// $Id$
+import java.util.concurrent.Semaphore;
-import java.text.NumberFormat;
-
import org.jbpm.db.AbstractDbTestCase;
import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.def.ProcessDefinition;
@@ -32,72 +30,93 @@
import org.jbpm.graph.exe.ProcessInstance;
/**
- * This tests creates a number of process instances.
- * Every instance has a call to an ActionHandler.
+ * This tests creates a number of process instances. Every instance has a call to an ActionHandler.
+ * https://jira.jboss.org/jira/browse/JBPM-2043
*
- * https://jira.jboss.org/jira/browse/JBPM-2043
- *
* @author mvecera at redhat.com
* @author pmacik at redhat.com
* @author thomas.diesler at jboss.com
* @author alex.guizar at jboss.com
* @since 18-Feb-2009
*/
-public class SimplePerformanceTest extends AbstractDbTestCase
-{
- private static final int INSTANCES = 1000;
- private static int count;
-
- ProcessDefinition processDefinition;
+public class SimplePerformanceTest extends AbstractDbTestCase {
- public void setUp() throws Exception
- {
+ private static final int WARMUP_INSTANCES = 100;
+ private static final int MEASUREMENT_INSTANCES = 1000;
+
+ private static final Semaphore signalLight = new Semaphore(0);
+
+ private ProcessDefinition processDefinition;
+
+ @Override
+ public void setUp() throws Exception {
super.setUp();
- processDefinition = ProcessDefinition.parseXmlString(
- "<process-definition name='perf' xmlns='urn:jbpm.org:jpdl-3.1'>" +
- " <start-state name='start'>" +
- " <transition name='to_state' to='end'>" +
- " <action class='" + PerfActionHandler.class.getName() + "'/>" +
- " </transition>" +
- " </start-state>" +
- " <end-state name='end'/>" +
- "</process-definition>");
+ processDefinition = ProcessDefinition.parseXmlString("<process-definition name='perf'>"
+ + " <event type='process-start'>"
+ + " <action class='"
+ + AsyncSignalAction.class.getName()
+ + "' async='true'/>"
+ + " </event>"
+ + " <start-state name='start'>"
+ + " <transition to='end'/>"
+ + " </start-state>"
+ + " <end-state name='end'/>"
+ + "</process-definition>");
jbpmContext.deployProcessDefinition(processDefinition);
- newTransaction();
+
+ startJobExecutor();
}
- public void tearDown() throws Exception
- {
+ @Override
+ public void tearDown() throws Exception {
+ stopJobExecutor();
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
super.tearDown();
}
- public void testAsyncCall()
- {
- long start = System.currentTimeMillis();
+ public void testAsyncCall() {
+ launchProcessInstances(WARMUP_INSTANCES);
- for (count = 1; count <= INSTANCES; count++)
- {
+ long startTime = System.currentTimeMillis();
+ launchProcessInstances(MEASUREMENT_INSTANCES);
+
+ long duration = System.currentTimeMillis() - startTime;
+ System.out.println("=== Test finished processing "
+ + MEASUREMENT_INSTANCES
+ + " instances in "
+ + duration
+ + "ms ===");
+ System.out.println("=== This is "
+ + Math.round(1000f * MEASUREMENT_INSTANCES / duration)
+ + " instances per second ===");
+ }
+
+ private void launchProcessInstances(int count) {
+ for (int i = 0; i < count; i++) {
+ newTransaction();
ProcessInstance pi = new ProcessInstance(processDefinition);
- pi.signal();
jbpmContext.save(pi);
- newTransaction();
}
- long stop = System.currentTimeMillis();
- System.out.println("=== Test finished processing " + INSTANCES + " instances in " + (stop - start) + "ms ===");
- System.out.println("=== This is " + Math.round(1000 * INSTANCES / (stop - start)) + " instances per second ===");
+ commitAndCloseSession();
+ try {
+ signalLight.acquire(count);
+ }
+ catch (InterruptedException e) {
+ fail(getName() + " got interrupted while waiting for process instances to end");
+ }
+ finally {
+ beginSessionTransaction();
+ }
}
- public static class PerfActionHandler implements ActionHandler
- {
- private static final long serialVersionUID = 1L;
+ public static class AsyncSignalAction implements ActionHandler {
+ private static final long serialVersionUID = -8617329370138396271L;
- public void execute(ExecutionContext executionContext) throws Exception
- {
- if (count % (INSTANCES / 4) == 0)
- System.out.println(NumberFormat.getPercentInstance().format((double) count / INSTANCES));
+ public void execute(final ExecutionContext executionContext) throws Exception {
+ signalLight.release();
+ executionContext.leaveNode();
}
}
}
More information about the jbpm-commits
mailing list