[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