You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2014/11/21 09:52:05 UTC
[1/2] camel git commit: CAMEL-7978 Added usingFixedCamelContextName
option to QuartzEndpoint and catch the ObjectAlreadyExistsException in
cluster mode
Repository: camel
Updated Branches:
refs/heads/master 38cf62984 -> 18f5bf453
CAMEL-7978 Added usingFixedCamelContextName option to QuartzEndpoint and catch the ObjectAlreadyExistsException in cluster mode
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/01d71b31
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/01d71b31
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/01d71b31
Branch: refs/heads/master
Commit: 01d71b31e583e81584ae441cbe199f426e607149
Parents: 38cf629
Author: Willem Jiang <wi...@gmail.com>
Authored: Fri Nov 21 16:44:01 2014 +0800
Committer: Willem Jiang <wi...@gmail.com>
Committed: Fri Nov 21 16:44:01 2014 +0800
----------------------------------------------------------------------
.../camel/component/quartz2/QuartzEndpoint.java | 34 +++++++++++++++++---
.../camel/component/quartz2/QuartzHelper.java | 21 ++++++++++--
2 files changed, 49 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/01d71b31/components/camel-quartz2/src/main/java/org/apache/camel/component/quartz2/QuartzEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-quartz2/src/main/java/org/apache/camel/component/quartz2/QuartzEndpoint.java b/components/camel-quartz2/src/main/java/org/apache/camel/component/quartz2/QuartzEndpoint.java
index 607fe25..f3a458e 100644
--- a/components/camel-quartz2/src/main/java/org/apache/camel/component/quartz2/QuartzEndpoint.java
+++ b/components/camel-quartz2/src/main/java/org/apache/camel/component/quartz2/QuartzEndpoint.java
@@ -36,14 +36,15 @@ import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
+import org.quartz.ObjectAlreadyExistsException;
import org.quartz.Scheduler;
+import org.quartz.SchedulerException;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
@@ -77,6 +78,11 @@ public class QuartzEndpoint extends DefaultEndpoint {
* ensure endpoint is fully started before the job kicks in. */
@UriParam
private long triggerStartDelay = 500; // in millis second
+ /** If it is true, the CamelContext name is used,
+ * if it is false, use the CamelContext management name which could be changed during the deploy time
+ **/
+ @UriParam
+ private boolean usingFixedCamelContextName;
// An internal variables to track whether a job has been in scheduler or not, and has it paused or not.
private final AtomicBoolean jobAdded = new AtomicBoolean(false);
@@ -146,6 +152,14 @@ public class QuartzEndpoint extends DefaultEndpoint {
this.recoverableJob = recoverableJob;
}
+ public boolean isUsingFixedCamelContextName() {
+ return usingFixedCamelContextName;
+ }
+
+ public void setUsingFixedCamelContextName(boolean usingFixedCamelContextName) {
+ this.usingFixedCamelContextName = usingFixedCamelContextName;
+ }
+
public void setTriggerParameters(Map<String, Object> triggerParameters) {
this.triggerParameters = triggerParameters;
}
@@ -246,7 +260,7 @@ public class QuartzEndpoint extends DefaultEndpoint {
jobDetail = createJobDetail();
Trigger trigger = createTrigger(jobDetail);
- QuartzHelper.updateJobDataMap(getCamelContext(), jobDetail, getEndpointUri());
+ QuartzHelper.updateJobDataMap(getCamelContext(), jobDetail, getEndpointUri(), isUsingFixedCamelContextName());
if (triggerExisted) {
// Reschedule job if trigger settings were changed
@@ -254,8 +268,20 @@ public class QuartzEndpoint extends DefaultEndpoint {
scheduler.rescheduleJob(triggerKey, trigger);
}
} else {
- // Schedule it now. Remember that scheduler might not be started it, but we can schedule now.
- scheduler.scheduleJob(jobDetail, trigger);
+ try {
+ // Schedule it now. Remember that scheduler might not be started it, but we can schedule now.
+ scheduler.scheduleJob(jobDetail, trigger);
+ } catch (ObjectAlreadyExistsException ex) {
+ // some other VM might may have stored the job & trigger in DB in clustered mode, in the mean time
+ if (!(getComponent().isClustered())) {
+ throw ex;
+ } else {
+ trigger = scheduler.getTrigger(triggerKey);
+ if (trigger == null) {
+ throw new SchedulerException("Trigger could not be found in quartz scheduler.");
+ }
+ }
+ }
}
if (LOG.isInfoEnabled()) {
http://git-wip-us.apache.org/repos/asf/camel/blob/01d71b31/components/camel-quartz2/src/main/java/org/apache/camel/component/quartz2/QuartzHelper.java
----------------------------------------------------------------------
diff --git a/components/camel-quartz2/src/main/java/org/apache/camel/component/quartz2/QuartzHelper.java b/components/camel-quartz2/src/main/java/org/apache/camel/component/quartz2/QuartzHelper.java
index 7263bae..1a78d79 100644
--- a/components/camel-quartz2/src/main/java/org/apache/camel/component/quartz2/QuartzHelper.java
+++ b/components/camel-quartz2/src/main/java/org/apache/camel/component/quartz2/QuartzHelper.java
@@ -38,7 +38,7 @@ public final class QuartzHelper {
return camelContext.getManagementNameStrategy().getName();
}
}
-
+
/**
* Adds the current CamelContext name and endpoint URI to the Job's jobData
* map.
@@ -48,9 +48,26 @@ public final class QuartzHelper {
* @param endpointUri URI of the endpoint name, if any. May be {@code null}
*/
public static void updateJobDataMap(CamelContext camelContext, JobDetail jobDetail, String endpointUri) {
+ updateJobDataMap(camelContext, jobDetail, endpointUri, false);
+ }
+
+ /**
+ * Adds the current CamelContext name and endpoint URI to the Job's jobData
+ * map.
+ *
+ * @param camelContext The currently active camelContext
+ * @param jobDetail The job for which the jobData map shall be updated
+ * @param endpointUri URI of the endpoint name, if any. May be {@code null}
+ * @param usingFixedCamelContextName If it is true, jobDataMap uses the CamelContext name;
+ * if it is false, jobDataMap uses the CamelContext management name which could be changed during the deploy time
+ */
+ public static void updateJobDataMap(CamelContext camelContext, JobDetail jobDetail, String endpointUri, boolean usingFixedCamelContextName) {
// Store this camelContext name into the job data
JobDataMap jobDataMap = jobDetail.getJobDataMap();
- String camelContextName = QuartzHelper.getQuartzContextName(camelContext);
+ String camelContextName = camelContext.getName();
+ if (!usingFixedCamelContextName) {
+ camelContextName = QuartzHelper.getQuartzContextName(camelContext);
+ }
LOG.debug("Adding camelContextName={}, endpointUri={} into job data map.", camelContextName, endpointUri);
jobDataMap.put(QuartzConstants.QUARTZ_CAMEL_CONTEXT_NAME, camelContextName);
jobDataMap.put(QuartzConstants.QUARTZ_ENDPOINT_URI, endpointUri);
[2/2] camel git commit: CAMEL-7978 Added usingFixedCamelContextName
option to camel-quartz component
Posted by ni...@apache.org.
CAMEL-7978 Added usingFixedCamelContextName option to camel-quartz component
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/18f5bf45
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/18f5bf45
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/18f5bf45
Branch: refs/heads/master
Commit: 18f5bf45382286b11cf5a5b0f21a838e78a20f2f
Parents: 01d71b3
Author: Willem Jiang <wi...@gmail.com>
Authored: Fri Nov 21 16:44:39 2014 +0800
Committer: Willem Jiang <wi...@gmail.com>
Committed: Fri Nov 21 16:44:39 2014 +0800
----------------------------------------------------------------------
.../camel/component/quartz/QuartzEndpoint.java | 21 ++++++++++++++++++--
1 file changed, 19 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/18f5bf45/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzEndpoint.java b/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzEndpoint.java
index 63ffd50..b1c6ac0 100644
--- a/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzEndpoint.java
+++ b/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzEndpoint.java
@@ -58,6 +58,11 @@ public class QuartzEndpoint extends DefaultEndpoint implements ShutdownableServi
private boolean deleteJob = true;
@UriParam
private boolean pauseJob;
+ /** If it is true, the CamelContext name is used,
+ * if it is false, use the CamelContext management name which could be changed during the deploy time
+ **/
+ @UriParam
+ private boolean usingFixedCamelContextName;
public QuartzEndpoint(final String endpointUri, final QuartzComponent component) {
super(endpointUri, component);
@@ -78,8 +83,12 @@ public class QuartzEndpoint extends DefaultEndpoint implements ShutdownableServi
trigger.setStartTime(new Date());
}
detail.getJobDataMap().put(QuartzConstants.QUARTZ_ENDPOINT_URI, getEndpointUri());
- // must use management name as it should be unique in the same JVM
- detail.getJobDataMap().put(QuartzConstants.QUARTZ_CAMEL_CONTEXT_NAME, QuartzHelper.getQuartzContextName(getCamelContext()));
+ if (isUsingFixedCamelContextName()) {
+ detail.getJobDataMap().put(QuartzConstants.QUARTZ_CAMEL_CONTEXT_NAME, getCamelContext().getName());
+ } else {
+ // must use management name as it should be unique in the same JVM
+ detail.getJobDataMap().put(QuartzConstants.QUARTZ_CAMEL_CONTEXT_NAME, QuartzHelper.getQuartzContextName(getCamelContext()));
+ }
if (detail.getJobClass() == null) {
detail.setJobClass(isStateful() ? StatefulCamelJob.class : CamelJob.class);
}
@@ -227,6 +236,14 @@ public class QuartzEndpoint extends DefaultEndpoint implements ShutdownableServi
// Implementation methods
// -------------------------------------------------------------------------
+ public boolean isUsingFixedCamelContextName() {
+ return usingFixedCamelContextName;
+ }
+
+ public void setUsingFixedCamelContextName(boolean usingFixedCamelContextName) {
+ this.usingFixedCamelContextName = usingFixedCamelContextName;
+ }
+
public synchronized void consumerStarted(final QuartzConsumer consumer) throws SchedulerException {
ObjectHelper.notNull(trigger, "trigger");
LOG.debug("Adding consumer {}", consumer.getProcessor());