[jboss-svn-commits] JBL Code SVN: r27752 - in labs/jbossesb/workspace/platform/JBESB_4_4_SOA_4_3_GA/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/integration: msg and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Jul 8 13:38:33 EDT 2009
Author: kevin.conner at jboss.com
Date: 2009-07-08 13:38:32 -0400 (Wed, 08 Jul 2009)
New Revision: 27752
Modified:
labs/jbossesb/workspace/platform/JBESB_4_4_SOA_4_3_GA/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/integration/AbstractJmsJobService.java
labs/jbossesb/workspace/platform/JBESB_4_4_SOA_4_3_GA/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/integration/msg/RetryExecutor.java
labs/jbossesb/workspace/platform/JBESB_4_4_SOA_4_3_GA/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/integration/timer/QuartzSchedulerService.java
labs/jbossesb/workspace/platform/JBESB_4_4_SOA_4_3_GA/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/integration/timer/QuartzSchedulerServiceFactory.java
Log:
Merge 4.4.0.GA_CP3_CR4 into SOA branch
Modified: labs/jbossesb/workspace/platform/JBESB_4_4_SOA_4_3_GA/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/integration/AbstractJmsJobService.java
===================================================================
--- labs/jbossesb/workspace/platform/JBESB_4_4_SOA_4_3_GA/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/integration/AbstractJmsJobService.java 2009-07-08 17:31:11 UTC (rev 27751)
+++ labs/jbossesb/workspace/platform/JBESB_4_4_SOA_4_3_GA/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/integration/AbstractJmsJobService.java 2009-07-08 17:38:32 UTC (rev 27752)
@@ -31,6 +31,7 @@
import javax.jms.Session;
import org.apache.log4j.Logger;
+import org.hibernate.Hibernate;
import org.jbpm.JbpmContext;
import org.jbpm.JbpmException;
import org.jbpm.db.JobSession;
@@ -133,6 +134,8 @@
if (log.isDebugEnabled()) {
log.debug("Sending" + type + job.getId()) ;
}
+ // Force initialisation of any proxy, JBESB-2720
+ Hibernate.initialize(job) ;
jobSession.saveJob(job);
try {
Message message = session.createMessage();
Modified: labs/jbossesb/workspace/platform/JBESB_4_4_SOA_4_3_GA/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/integration/msg/RetryExecutor.java
===================================================================
--- labs/jbossesb/workspace/platform/JBESB_4_4_SOA_4_3_GA/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/integration/msg/RetryExecutor.java 2009-07-08 17:31:11 UTC (rev 27751)
+++ labs/jbossesb/workspace/platform/JBESB_4_4_SOA_4_3_GA/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/integration/msg/RetryExecutor.java 2009-07-08 17:38:32 UTC (rev 27752)
@@ -108,7 +108,8 @@
{
final Set<Long> monitoredJobs = new HashSet<Long>() ;
final long now = System.currentTimeMillis() ;
- for(int count = 0 ; count < maxRetryJobs ; count++)
+ int count = 0 ;
+ do
{
final Job job = jobSession.getFirstDueJob(RETRY_EXECUTOR, monitoredJobs) ;
if ((job == null) || (job.getDueDate().getTime() > now))
@@ -118,6 +119,7 @@
monitoredJobs.add(Long.valueOf(job.getId())) ;
if (RETRY_EXECUTOR.equals(job.getLockOwner()))
{
+ count++ ;
job.setLockOwner(null) ;
if (job instanceof Timer)
{
@@ -136,6 +138,7 @@
}
}
}
+ while(count < maxRetryJobs) ;
}
}
catch (final Throwable th)
Modified: labs/jbossesb/workspace/platform/JBESB_4_4_SOA_4_3_GA/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/integration/timer/QuartzSchedulerService.java
===================================================================
--- labs/jbossesb/workspace/platform/JBESB_4_4_SOA_4_3_GA/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/integration/timer/QuartzSchedulerService.java 2009-07-08 17:31:11 UTC (rev 27751)
+++ labs/jbossesb/workspace/platform/JBESB_4_4_SOA_4_3_GA/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/integration/timer/QuartzSchedulerService.java 2009-07-08 17:38:32 UTC (rev 27752)
@@ -4,6 +4,7 @@
import java.util.List;
import org.apache.log4j.Logger;
+import org.hibernate.Hibernate;
import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.JbpmException;
@@ -42,12 +43,20 @@
* Name of the timer id within the quartz map.
*/
private static final String TIMER_ID = "id" ;
+ /**
+ * Name of the max refire count within the quartz map.
+ */
+ private static final String MAX_REFIRE_COUNT = "maxRefireCount" ;
/**
* The associated quartz scheduler.
*/
private final Scheduler scheduler ;
/**
+ * The maximum refire count.
+ */
+ private final int maxRefireCount ;
+ /**
* The associated jBPM job session.
*/
private final JobSession jobSession ;
@@ -57,9 +66,10 @@
* @param jbpmContext The associated jBPM context.
* @param scheduler The quartz scheduler.
*/
- public QuartzSchedulerService(final JbpmContext jbpmContext, final Scheduler scheduler)
+ public QuartzSchedulerService(final JbpmContext jbpmContext, final Scheduler scheduler, final int maxRefireCount)
{
this.scheduler = scheduler ;
+ this.maxRefireCount = maxRefireCount ;
jobSession = jbpmContext.getJobSession();
}
@@ -69,6 +79,8 @@
*/
public void createTimer(final Timer timer)
{
+ // Force initialisation of any proxy, JBESB-2720
+ Hibernate.initialize(timer) ;
jobSession.saveJob(timer) ;
final String name = getTimerName(timer) ;
final Trigger trigger = new SimpleTrigger(name, JBPM_GROUP, timer.getDueDate()) ;
@@ -76,6 +88,7 @@
final JobDataMap jobDataMap = new JobDataMap() ;
jobDataMap.put(TIMER_ID, new Long(timer.getId())) ;
+ jobDataMap.put(MAX_REFIRE_COUNT, Integer.valueOf(maxRefireCount)) ;
jobDetail.setJobDataMap(jobDataMap) ;
try
@@ -214,9 +227,10 @@
if (jobId != null)
{
final JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext() ;
+ Job job = null ;
try
{
- final Job job = jbpmContext.getJobSession().loadJob(jobId) ;
+ job = jbpmContext.getJobSession().loadJob(jobId) ;
if (job != null)
{
jbpmContext.getServices().getMessageService().send(job) ;
@@ -227,6 +241,25 @@
return ;
}
}
+ catch (final RuntimeException re)
+ {
+ final Integer maxRefireCount = (Integer) jobDataMap.get(MAX_REFIRE_COUNT) ;
+ if ((maxRefireCount != null) && (maxRefireCount > context.getRefireCount()))
+ {
+ final JobExecutionException jobEx = new JobExecutionException(re, true);
+ jobEx.setErrorCode(JobExecutionException.ERR_JOB_EXECUTION_THREW_EXCEPTION);
+ throw jobEx ;
+ }
+ else
+ {
+ if (job != null)
+ {
+ // zero the retries to remove from the list of outstanding jobs.
+ job.setRetries(0) ;
+ }
+ throw re ;
+ }
+ }
finally
{
jbpmContext.close() ;
Modified: labs/jbossesb/workspace/platform/JBESB_4_4_SOA_4_3_GA/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/integration/timer/QuartzSchedulerServiceFactory.java
===================================================================
--- labs/jbossesb/workspace/platform/JBESB_4_4_SOA_4_3_GA/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/integration/timer/QuartzSchedulerServiceFactory.java 2009-07-08 17:31:11 UTC (rev 27751)
+++ labs/jbossesb/workspace/platform/JBESB_4_4_SOA_4_3_GA/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/integration/timer/QuartzSchedulerServiceFactory.java 2009-07-08 17:38:32 UTC (rev 27752)
@@ -55,12 +55,20 @@
* The thread count property.
*/
public static final String THREAD_COUNT = "org.quartz.threadPool.threadCount" ;
+ /**
+ * The default maximum refire count.
+ */
+ public static final int DEFAULT_MAX_REFIRE_COUNT = 5 ;
/**
* Quartz configuration.
*/
String quartzConfiguration = "jbpm-quartz.properties" ;
/**
+ * Quartz maximum refire count.
+ */
+ int maxRefireCount = DEFAULT_MAX_REFIRE_COUNT ;
+ /**
* The quartz scheduler associated with this factory.
*/
private Scheduler scheduler ;
@@ -107,6 +115,10 @@
throw new JbpmException("Failed to initialise the scheduler", se) ;
}
this.scheduler = scheduler ;
+ if (maxRefireCount < 0)
+ {
+ maxRefireCount = DEFAULT_MAX_REFIRE_COUNT ;
+ }
}
/**
@@ -114,7 +126,7 @@
*/
public Service openService()
{
- return new QuartzSchedulerService(JbpmConfiguration.getInstance().getCurrentJbpmContext(), scheduler) ;
+ return new QuartzSchedulerService(JbpmConfiguration.getInstance().getCurrentJbpmContext(), scheduler, maxRefireCount) ;
}
/**
More information about the jboss-svn-commits
mailing list