[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