[jbpm-commits] JBoss JBPM SVN: r2613 - in jbpm3/trunk/modules/enterprise/jar/src: main/resources/META-INF and 1 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Fri Oct 24 11:52:53 EDT 2008
Author: alex.guizar at jboss.com
Date: 2008-10-24 11:52:52 -0400 (Fri, 24 Oct 2008)
New Revision: 2613
Modified:
jbpm3/trunk/modules/enterprise/jar/src/main/java/org/jbpm/ejb/impl/ExecuteJobCommand.java
jbpm3/trunk/modules/enterprise/jar/src/main/resources/META-INF/ejb-jar.xml
jbpm3/trunk/modules/enterprise/jar/src/main/resources/META-INF/jboss.xml
jbpm3/trunk/modules/enterprise/jar/src/test/java/org/jbpm/msg/jms/JmsMessageTest.java
Log:
[JBPM-1709] support for exclusive jobs in jms message service, first cut
Modified: jbpm3/trunk/modules/enterprise/jar/src/main/java/org/jbpm/ejb/impl/ExecuteJobCommand.java
===================================================================
--- jbpm3/trunk/modules/enterprise/jar/src/main/java/org/jbpm/ejb/impl/ExecuteJobCommand.java 2008-10-24 15:34:48 UTC (rev 2612)
+++ jbpm3/trunk/modules/enterprise/jar/src/main/java/org/jbpm/ejb/impl/ExecuteJobCommand.java 2008-10-24 15:52:52 UTC (rev 2613)
@@ -2,12 +2,14 @@
import java.io.PrintWriter;
import java.io.StringWriter;
+import java.util.Iterator;
+import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.hibernate.criterion.Restrictions;
import org.jbpm.JbpmContext;
import org.jbpm.command.Command;
-import org.jbpm.db.JobSession;
import org.jbpm.job.Job;
public class ExecuteJobCommand implements Command {
@@ -21,13 +23,37 @@
}
public Object execute(JbpmContext jbpmContext) throws Exception {
- JobSession jobSession = jbpmContext.getJobSession();
- Job job = jobSession.loadJob(jobId);
- job.setLockOwner(getClass().getName()); // prevent others from removing job
+ Job job = (Job) jbpmContext.getSession().get(Job.class, jobId);
+ if (job == null || job.getLockOwner() != null) {
+ jbpmContext.setRollbackOnly();
+ return null;
+ }
+ if (job.isExclusive()) {
+ // acquire exclusive jobs
+ List exclusiveJobs = jbpmContext.getSession().createCriteria(Job.class)
+ .add(Restrictions.isNull("lockMode"))
+ .add(Restrictions.eq("processInstance", job.getProcessInstance()))
+ .list();
+ String lockOwner = Long.toString(jobId);
+ for (Iterator i = exclusiveJobs.iterator(); i.hasNext();) {
+ Job exclusiveJob = (Job) i.next();
+ exclusiveJob.setLockOwner(lockOwner);
+ }
+ // execute exclusive jobs in separate transaction
+
+ }
+ else {
+ executeJob(job, jbpmContext);
+ }
+ return job;
+ }
+
+ private static void executeJob(Job job, JbpmContext jbpmContext) {
+ job.setLockOwner(ExecuteJobCommand.class.getName()); // prevent others from removing job
log.debug("executing " + job);
try {
if (job.execute(jbpmContext)) {
- jobSession.deleteJob(job);
+ jbpmContext.getJobSession().deleteJob(job);
}
}
catch (RuntimeException e) {
@@ -42,7 +68,6 @@
job.setException(memoryWriter.toString());
job.setRetries(job.getRetries() - 1);
}
- return job;
}
private static Log log = LogFactory.getLog(ExecuteJobCommand.class);
Modified: jbpm3/trunk/modules/enterprise/jar/src/main/resources/META-INF/ejb-jar.xml
===================================================================
--- jbpm3/trunk/modules/enterprise/jar/src/main/resources/META-INF/ejb-jar.xml 2008-10-24 15:34:48 UTC (rev 2612)
+++ jbpm3/trunk/modules/enterprise/jar/src/main/resources/META-INF/ejb-jar.xml 2008-10-24 15:52:52 UTC (rev 2613)
@@ -91,6 +91,19 @@
<message-destination-usage>Produces</message-destination-usage>
<message-destination-link>JobQueue</message-destination-link>
</message-destination-ref>
+
+ <message-destination-ref>
+ <description>
+ The command listener bean receives messages from the queue referenced here. To ensure this
+ is the same queue to which command messages can be sent, the message-destination-link
+ element points to a common logical destination, CommandQueue.
+ </description>
+ <message-destination-ref-name>jms/CommandQueue</message-destination-ref-name>
+ <message-destination-type>javax.jms.Queue</message-destination-type>
+ <message-destination-usage>Produces</message-destination-usage>
+ <message-destination-link>CommandQueue</message-destination-link>
+ </message-destination-ref>
+
</session>
<!-- Timer service bean ==>
@@ -129,6 +142,7 @@
<ejb-class>org.jbpm.ejb.impl.CommandListenerBean</ejb-class>
<transaction-type>Container</transaction-type>
<message-destination-type>javax.jms.Queue</message-destination-type>
+ <message-destination-link>CommandQueue</message-destination-link>
<ejb-local-ref>
<description>
@@ -328,6 +342,10 @@
<message-destination-name>JobQueue</message-destination-name>
</message-destination>
+ <message-destination>
+ <message-destination-name>CommandQueue</message-destination-name>
+ </message-destination>
+
</assembly-descriptor>
</ejb-jar>
Modified: jbpm3/trunk/modules/enterprise/jar/src/main/resources/META-INF/jboss.xml
===================================================================
--- jbpm3/trunk/modules/enterprise/jar/src/main/resources/META-INF/jboss.xml 2008-10-24 15:34:48 UTC (rev 2612)
+++ jbpm3/trunk/modules/enterprise/jar/src/main/resources/META-INF/jboss.xml 2008-10-24 15:52:52 UTC (rev 2613)
@@ -23,7 +23,6 @@
<message-driven>
<ejb-name>CommandListenerBean</ejb-name>
- <destination-jndi-name>queue/JbpmCommandQueue</destination-jndi-name>
<resource-ref>
<res-ref-name>jms/JbpmConnectionFactory</res-ref-name>
<jndi-name>java:JmsXA</jndi-name>
@@ -60,6 +59,10 @@
<message-destination-name>JobQueue</message-destination-name>
<jndi-name>queue/JbpmJobQueue</jndi-name>
</message-destination>
+ <message-destination>
+ <message-destination-name>CommandQueue</message-destination-name>
+ <jndi-name>queue/JbpmCommandQueue</jndi-name>
+ </message-destination>
</assembly-descriptor>
Modified: jbpm3/trunk/modules/enterprise/jar/src/test/java/org/jbpm/msg/jms/JmsMessageTest.java
===================================================================
--- jbpm3/trunk/modules/enterprise/jar/src/test/java/org/jbpm/msg/jms/JmsMessageTest.java 2008-10-24 15:34:48 UTC (rev 2612)
+++ jbpm3/trunk/modules/enterprise/jar/src/test/java/org/jbpm/msg/jms/JmsMessageTest.java 2008-10-24 15:52:52 UTC (rev 2613)
@@ -183,7 +183,7 @@
+ " <node name='e' async='true'>"
+ " <transition to='j' />"
+ " </node>"
- + " <join name='j'>"
+ + " <join name='j' async='exclusive'>"
+ " <transition to='end' />"
+ " </join>"
+ " <end-state name='end' />"
More information about the jbpm-commits
mailing list