Author: davsclaus
Date: Wed Aug 25 15:45:11 2010
New Revision: 989179
URL: http://svn.apache.org/viewvc?rev=989179&view=rev
Log:
CAMEL-3079: Improved job rescheduling. Thanks to Ingo Duppe for patch.
Modified:
camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/CamelJob.java
camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzComponent.java
camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzEndpoint.java
camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/StatefulCamelJob.java
Modified:
camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/CamelJob.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/CamelJob.java?rev=989179&r1=989178&r2=989179&view=diff
==============================================================================
---
camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/CamelJob.java
(original)
+++
camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/CamelJob.java
Wed Aug 25 15:45:11 2010
@@ -30,6 +30,8 @@ import org.quartz.SchedulerException;
*/
public class CamelJob implements Job, Serializable {
+ private static final long serialVersionUID = 26L;
+
public void execute(JobExecutionContext context) throws
JobExecutionException {
String camelContextName = (String)
context.getJobDetail().getJobDataMap().get(QuartzConstants.QUARTZ_CAMEL_CONTEXT_NAME);
String endpointUri = (String)
context.getJobDetail().getJobDataMap().get(QuartzConstants.QUARTZ_ENDPOINT_URI);
Modified:
camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzComponent.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzComponent.java?rev=989179&r1=989178&r2=989179&view=diff
==============================================================================
---
camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzComponent.java
(original)
+++
camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzComponent.java
Wed Aug 25 15:45:11 2010
@@ -194,16 +194,36 @@ public class QuartzComponent extends Def
private void doAddJob(JobDetail job, Trigger trigger) throws
SchedulerException {
JOBS.incrementAndGet();
- if (getScheduler().getTrigger(trigger.getName(), trigger.getGroup())
== null) {
+ Trigger existingTrigger = getScheduler().getTrigger(trigger.getName(),
trigger.getGroup());
+ if (existingTrigger == null) {
if (LOG.isDebugEnabled()) {
LOG.debug("Adding job using trigger: " + trigger.getGroup() +
"/" + trigger.getName());
}
getScheduler().scheduleJob(job, trigger);
+ } else if (hasTriggerChanged(existingTrigger, trigger)) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Trigger: " + trigger.getGroup() + "/" +
trigger.getName() + " already exists and will be updated by Quartz.");
+ }
+ scheduler.addJob(job, true);
+ trigger.setJobName(job.getName());
+ scheduler.rescheduleJob(trigger.getName(), trigger.getGroup(),
trigger);
} else {
if (LOG.isDebugEnabled()) {
- LOG.debug("Resuming job using trigger: " + trigger.getGroup()
+ "/" + trigger.getName());
+ LOG.debug("Trigger: " + trigger.getGroup() + "/" +
trigger.getName() + " already exists and will be resumed automatically by
Quartz.");
}
- getScheduler().resumeTrigger(trigger.getName(),
trigger.getGroup());
+ if (!isClustered()) {
+ scheduler.resumeTrigger(trigger.getName(), trigger.getGroup());
+ }
+ }
+ }
+
+ private boolean hasTriggerChanged(Trigger oldTrigger, Trigger newTrigger) {
+ if (oldTrigger instanceof CronTrigger &&
oldTrigger.equals(newTrigger)) {
+ CronTrigger oldCron = (CronTrigger) oldTrigger;
+ CronTrigger newCron = (CronTrigger) newTrigger;
+ return
!oldCron.getCronExpression().equals(newCron.getCronExpression());
+ } else {
+ return !newTrigger.equals(oldTrigger);
}
}
Modified:
camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzEndpoint.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzEndpoint.java?rev=989179&r1=989178&r2=989179&view=diff
==============================================================================
---
camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzEndpoint.java
(original)
+++
camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzEndpoint.java
Wed Aug 25 15:45:11 2010
@@ -39,7 +39,7 @@ import org.quartz.Trigger;
/**
* A <a href="http://activemq.apache.org/quartz.html">Quartz Endpoint</a>
- *
+ *
* @version $Revision:520964 $
*/
public class QuartzEndpoint extends DefaultEndpoint implements Service {
@@ -74,7 +74,7 @@ public class QuartzEndpoint extends Defa
detail.setJobClass(isStateful() ? StatefulCamelJob.class :
CamelJob.class);
}
if (detail.getName() == null) {
- detail.setName(getEndpointUri());
+ detail.setName(getJobName());
}
getComponent().addJob(detail, trigger);
}
@@ -85,7 +85,7 @@ public class QuartzEndpoint extends Defa
/**
* This method is invoked when a Quartz job is fired.
- *
+ *
* @param jobExecutionContext the Quartz Job context
*/
public void onJobExecute(final JobExecutionContext jobExecutionContext)
throws JobExecutionException {
@@ -143,6 +143,14 @@ public class QuartzEndpoint extends Defa
return "quartz://" + getTrigger().getGroup() + "/" +
getTrigger().getName();
}
+ protected String getJobName() {
+ String jobName = getEndpointUri();
+ if (jobName.contains("?")) {
+ jobName = ObjectHelper.before(jobName, "?");
+ }
+ return jobName;
+ }
+
// Properties
//
-------------------------------------------------------------------------
@@ -195,6 +203,7 @@ public class QuartzEndpoint extends Defa
// Implementation methods
//
-------------------------------------------------------------------------
+
public synchronized void consumerStarted(final QuartzConsumer consumer)
throws SchedulerException {
ObjectHelper.notNull(trigger, "trigger");
if (LOG.isDebugEnabled()) {
Modified:
camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/StatefulCamelJob.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/StatefulCamelJob.java?rev=989179&r1=989178&r2=989179&view=diff
==============================================================================
---
camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/StatefulCamelJob.java
(original)
+++
camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/StatefulCamelJob.java
Wed Aug 25 15:45:11 2010
@@ -23,4 +23,6 @@ import org.quartz.StatefulJob;
*/
public class StatefulCamelJob extends CamelJob implements StatefulJob {
+ private static final long serialVersionUID = 25L;
+
}