[jbpm-commits] JBoss JBPM SVN: r6172 - jbpm3/branches/jbpm-3.2-soa/modules/enterprise/src/main/java/org/jbpm/ejb/impl.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Feb 17 19:03:12 EST 2010


Author: alex.guizar at jboss.com
Date: 2010-02-17 19:03:11 -0500 (Wed, 17 Feb 2010)
New Revision: 6172

Modified:
   jbpm3/branches/jbpm-3.2-soa/modules/enterprise/src/main/java/org/jbpm/ejb/impl/CommandListenerBean.java
   jbpm3/branches/jbpm-3.2-soa/modules/enterprise/src/main/java/org/jbpm/ejb/impl/ExecuteJobCommand.java
   jbpm3/branches/jbpm-3.2-soa/modules/enterprise/src/main/java/org/jbpm/ejb/impl/ExecuteJobsCommand.java
   jbpm3/branches/jbpm-3.2-soa/modules/enterprise/src/main/java/org/jbpm/ejb/impl/JobListenerBean.java
Log:
account for deleted jobs in ExecuteJobCommand

Modified: jbpm3/branches/jbpm-3.2-soa/modules/enterprise/src/main/java/org/jbpm/ejb/impl/CommandListenerBean.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/enterprise/src/main/java/org/jbpm/ejb/impl/CommandListenerBean.java	2010-02-16 19:01:50 UTC (rev 6171)
+++ jbpm3/branches/jbpm-3.2-soa/modules/enterprise/src/main/java/org/jbpm/ejb/impl/CommandListenerBean.java	2010-02-18 00:03:11 UTC (rev 6172)
@@ -105,6 +105,8 @@
   ConnectionFactory jmsConnectionFactory;
   Connection jmsConnection;
 
+  transient final Log log = LogFactory.getLog(getClass());
+
   public void onMessage(Message message) {
     try {
       // extract command from message
@@ -144,7 +146,6 @@
 
   protected Command extractCommand(Message message) throws JMSException {
     if (message instanceof ObjectMessage) {
-      log.debug("deserializing command from jms message...");
       ObjectMessage objectMessage = (ObjectMessage) message;
       Serializable object = objectMessage.getObject();
       if (object instanceof Command) {
@@ -169,7 +170,7 @@
             (Destination) jndiContext.lookup("java:comp/env/jms/DeadLetterQueue");
       }
       catch (NamingException e) {
-        log.debug("failed to retrieve dead letter queue, rejecting message: "
+        log.debug("failed to retrieve dead letter queue, rejecting: "
           + message);
         messageDrivenContext.setRollbackOnly();
         return;
@@ -187,7 +188,7 @@
 
   private void sendResult(Serializable result, Destination destination,
       String correlationId) throws JMSException {
-    log.debug("sending result " + result + " to " + destination);
+    log.debug("sending " + result + " to " + destination);
     Session jmsSession = createSession();
     try {
       Message resultMessage = jmsSession.createObjectMessage(result);
@@ -250,6 +251,4 @@
       throw new EJBException("error creating command service", e);
     }
   }
-
-  private static final Log log = LogFactory.getLog(CommandListenerBean.class);
 }

Modified: jbpm3/branches/jbpm-3.2-soa/modules/enterprise/src/main/java/org/jbpm/ejb/impl/ExecuteJobCommand.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/enterprise/src/main/java/org/jbpm/ejb/impl/ExecuteJobCommand.java	2010-02-16 19:01:50 UTC (rev 6171)
+++ jbpm3/branches/jbpm-3.2-soa/modules/enterprise/src/main/java/org/jbpm/ejb/impl/ExecuteJobCommand.java	2010-02-18 00:03:11 UTC (rev 6172)
@@ -21,6 +21,9 @@
  */
 package org.jbpm.ejb.impl;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
 import org.jbpm.JbpmContext;
 import org.jbpm.command.Command;
 import org.jbpm.graph.exe.ProcessInstance;
@@ -36,37 +39,49 @@
   private final long jobId;
 
   private static final long serialVersionUID = 1L;
+  private static final Log log = LogFactory.getLog(ExecuteJobCommand.class.getName());
 
   public ExecuteJobCommand(long jobId) {
     this.jobId = jobId;
   }
 
   public Object execute(JbpmContext jbpmContext) throws Exception {
-    Job job = acquireJob(jbpmContext);
-    executeJob(job, jbpmContext);
+    Job job = acquireJob(jobId, jbpmContext);
+    if (job != null) executeJob(job, jbpmContext);
     return job;
   }
 
-  private Job acquireJob(JbpmContext jbpmContext) {
-    Job job = jbpmContext.getJobSession().loadJob(jobId);
+  static Job acquireJob(long jobId, JbpmContext jbpmContext) {
+    boolean debug = log.isDebugEnabled();
+    if (debug) log.debug("acquiring job: " + jobId);
+    Job job = jbpmContext.getJobSession().getJob(jobId);
 
-    // register process instance for automatic save
-    // see https://jira.jboss.org/jira/browse/JBPM-1015
-    ProcessInstance processInstance = job.getProcessInstance();
-    jbpmContext.addAutoSaveProcessInstance(processInstance);
+    // job could have been deleted manually
+    // or by ending the process instance
+    if (job != null) {
+      // register process instance for automatic save
+      // see https://jira.jboss.org/jira/browse/JBPM-1015
+      ProcessInstance processInstance = job.getProcessInstance();
+      jbpmContext.addAutoSaveProcessInstance(processInstance);
 
-    // if job is exclusive, lock process instance
-    if (job.isExclusive()) {
-      jbpmContext.getGraphSession().lockProcessInstance(processInstance);
+      // if job is exclusive, lock process instance
+      if (job.isExclusive()) {
+        jbpmContext.getGraphSession().lockProcessInstance(processInstance);
+      }
+
+      // mark job as locked to prevent it from being deleted
+      job.setLockOwner(Thread.currentThread().getName());
+      if (debug) log.debug("acquired " + job);
     }
+    else if (debug) {
+      log.debug("job not found: " + jobId);
+    }
 
-    // mark job as locked to prevent other parts of the engine from deleting it
-    job.setLockOwner(toString());
     return job;
   }
 
-  private static void executeJob(Job job, JbpmContext jbpmContext)
-      throws Exception {
+  static void executeJob(Job job, JbpmContext jbpmContext) throws Exception {
+    if (log.isDebugEnabled()) log.debug("executing " + job);
     if (job.execute(jbpmContext)) {
       jbpmContext.getJobSession().deleteJob(job);
     }

Modified: jbpm3/branches/jbpm-3.2-soa/modules/enterprise/src/main/java/org/jbpm/ejb/impl/ExecuteJobsCommand.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/enterprise/src/main/java/org/jbpm/ejb/impl/ExecuteJobsCommand.java	2010-02-16 19:01:50 UTC (rev 6171)
+++ jbpm3/branches/jbpm-3.2-soa/modules/enterprise/src/main/java/org/jbpm/ejb/impl/ExecuteJobsCommand.java	2010-02-18 00:03:11 UTC (rev 6172)
@@ -21,11 +21,9 @@
  */
 package org.jbpm.ejb.impl;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.jbpm.JbpmContext;
 import org.jbpm.command.Command;
-import org.jbpm.util.ArrayUtil;
+import org.jbpm.job.Job;
 
 /**
  * Batch job processing command.
@@ -37,19 +35,16 @@
   private long[] jobIds;
 
   private static final long serialVersionUID = 1L;
-  private static Log log = LogFactory.getLog(ExecuteJobsCommand.class);
 
   public ExecuteJobsCommand(long[] jobIds) {
+    if (jobIds == null) throw new IllegalArgumentException("jobIds is null");
     this.jobIds = jobIds;
   }
 
   public Object execute(JbpmContext jbpmContext) throws Exception {
-    log.debug("executing jobs " + ArrayUtil.toString(jobIds));
-    if (jobIds!=null) {
-      for (int jobId=0; jobId<jobIds.length; jobId++) {
-        ExecuteJobCommand executeJobCommand = new ExecuteJobCommand(jobId);
-        executeJobCommand.execute(jbpmContext);
-      }
+    for (int i = 0; i < jobIds.length; i++) {
+      Job job = ExecuteJobCommand.acquireJob(jobIds[i], jbpmContext);
+      if (job != null) ExecuteJobCommand.executeJob(job, jbpmContext);
     }
     return null;
   }

Modified: jbpm3/branches/jbpm-3.2-soa/modules/enterprise/src/main/java/org/jbpm/ejb/impl/JobListenerBean.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/enterprise/src/main/java/org/jbpm/ejb/impl/JobListenerBean.java	2010-02-16 19:01:50 UTC (rev 6171)
+++ jbpm3/branches/jbpm-3.2-soa/modules/enterprise/src/main/java/org/jbpm/ejb/impl/JobListenerBean.java	2010-02-18 00:03:11 UTC (rev 6172)
@@ -3,18 +3,16 @@
 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;
 
 /**
- * Message-driven bean that listens for {@link Message messages} containing
- * a reference to a pending {@linkplain Job job}. to support asynchronous 
+ * Message-driven bean that listens for {@link Message messages} containing a
+ * reference to a pending {@linkplain Job job}. to support asynchronous
  * continuations.
  * 
- * The message must have a property called <code>jobId</code> of type 
- * <code>long</code> which references a pending <literal>Job</literal> 
- * in the database. The message body, if any, is ignored.
+ * The message must have a property called <code>jobId</code> of type
+ * <code>long</code> which references a pending <literal>Job</literal> in the
+ * database. The message body, if any, is ignored.
  * 
  * <h3>Environment</h3>
  * 
@@ -29,18 +27,14 @@
   private static final long serialVersionUID = 1L;
 
   protected Command extractCommand(Message message) throws JMSException {
-    Command command = null;
-    // checking for availability of the jobId property
-    log.debug("getting job id from jms message...");
-    Long jobId = (Long) message.getObjectProperty("jobId");
-    if (jobId != null) {
-      log.debug("retrieved jobId '"+jobId+"' via jms message");
-      command = new ExecuteJobCommand(jobId.longValue());
-    } else {
-      log.warn("ignoring message '"+message+"' cause it doesn't have property jobId");
+    // checking for jobId property
+    if (message.propertyExists("jobId")) {
+      long jobId = message.getLongProperty("jobId");
+      return new ExecuteJobCommand(jobId);
     }
-    return command;
+    else {
+      log.warn("property jobId not found");
+    }
+    return null;
   }
-
-  private static Log log = LogFactory.getLog(JobListenerBean.class);
 }



More information about the jbpm-commits mailing list