You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2015/07/10 16:18:01 UTC
camel git commit: CAMEL-8950 - make CamelContext available from
injected schedulers too
Repository: camel
Updated Branches:
refs/heads/camel-2.15.x 8a0cd0d0f -> cb0935e3a
CAMEL-8950 - make CamelContext available from injected schedulers too
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/cb0935e3
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/cb0935e3
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/cb0935e3
Branch: refs/heads/camel-2.15.x
Commit: cb0935e3af05b333b5c85a4fb3b1846836218f11
Parents: 8a0cd0d
Author: Jonathan Anstey <ja...@gmail.com>
Authored: Fri Jul 10 11:46:55 2015 -0230
Committer: Jonathan Anstey <ja...@gmail.com>
Committed: Fri Jul 10 11:47:18 2015 -0230
----------------------------------------------------------------------
.../component/quartz2/QuartzComponent.java | 21 +++--
...omponentCamelContextSharedSchedulerTest.java | 94 ++++++++++++++++++++
2 files changed, 109 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/cb0935e3/components/camel-quartz2/src/main/java/org/apache/camel/component/quartz2/QuartzComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-quartz2/src/main/java/org/apache/camel/component/quartz2/QuartzComponent.java b/components/camel-quartz2/src/main/java/org/apache/camel/component/quartz2/QuartzComponent.java
index a6cab8f..4ac630f 100644
--- a/components/camel-quartz2/src/main/java/org/apache/camel/component/quartz2/QuartzComponent.java
+++ b/components/camel-quartz2/src/main/java/org/apache/camel/component/quartz2/QuartzComponent.java
@@ -320,11 +320,7 @@ public class QuartzComponent extends UriEndpointComponent implements StartupList
LOG.info("Create and initializing scheduler.");
scheduler = createScheduler();
- // Store CamelContext into QuartzContext space
- SchedulerContext quartzContext = scheduler.getContext();
- String camelContextName = QuartzHelper.getQuartzContextName(getCamelContext());
- LOG.debug("Storing camelContextName={} into Quartz Context space.", camelContextName);
- quartzContext.put(QuartzConstants.QUARTZ_CAMEL_CONTEXT + "-" + camelContextName, getCamelContext());
+ SchedulerContext quartzContext = storeCamelContextInQuartzContext();
// Set camel job counts to zero. We needed this to prevent shutdown in case there are multiple Camel contexts
// that has not completed yet, and the last one with job counts to zero will eventually shutdown.
@@ -335,6 +331,15 @@ public class QuartzComponent extends UriEndpointComponent implements StartupList
}
}
+ private SchedulerContext storeCamelContextInQuartzContext() throws SchedulerException {
+ // Store CamelContext into QuartzContext space
+ SchedulerContext quartzContext = scheduler.getContext();
+ String camelContextName = QuartzHelper.getQuartzContextName(getCamelContext());
+ LOG.debug("Storing camelContextName={} into Quartz Context space.", camelContextName);
+ quartzContext.put(QuartzConstants.QUARTZ_CAMEL_CONTEXT + "-" + camelContextName, getCamelContext());
+ return quartzContext;
+ }
+
private Scheduler createScheduler() throws SchedulerException {
return getSchedulerFactory().getScheduler();
}
@@ -361,8 +366,12 @@ public class QuartzComponent extends UriEndpointComponent implements StartupList
// to create and init the scheduler first.
if (scheduler == null) {
createAndInitScheduler();
+ } else {
+ // in case custom scheduler was injected (i.e. created elsewhere), we may need to add
+ // current camel context to quartz context so jobs have access
+ storeCamelContextInQuartzContext();
}
-
+
// Now scheduler is ready, let see how we should start it.
if (!autoStartScheduler) {
LOG.info("Not starting scheduler because autoStartScheduler is set to false.");
http://git-wip-us.apache.org/repos/asf/camel/blob/cb0935e3/components/camel-quartz2/src/test/java/org/apache/camel/component/quartz2/QuartzComponentCamelContextSharedSchedulerTest.java
----------------------------------------------------------------------
diff --git a/components/camel-quartz2/src/test/java/org/apache/camel/component/quartz2/QuartzComponentCamelContextSharedSchedulerTest.java b/components/camel-quartz2/src/test/java/org/apache/camel/component/quartz2/QuartzComponentCamelContextSharedSchedulerTest.java
new file mode 100644
index 0000000..a4b0301
--- /dev/null
+++ b/components/camel-quartz2/src/test/java/org/apache/camel/component/quartz2/QuartzComponentCamelContextSharedSchedulerTest.java
@@ -0,0 +1,94 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.quartz2;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.hamcrest.CoreMatchers;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.quartz.CronTrigger;
+import org.quartz.JobDetail;
+import org.quartz.Scheduler;
+import org.quartz.Trigger;
+
+public class QuartzComponentCamelContextSharedSchedulerTest {
+
+ private DefaultCamelContext camel1;
+ private DefaultCamelContext camel2;
+
+ @Before
+ public void setUp() throws Exception {
+ camel1 = new DefaultCamelContext();
+ camel1.setName("camel-1");
+ camel1.addRoutes(new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("quartz2://myGroup/myTimerName?cron=0/2+*+*+*+*+?").to("mock:one");
+ }
+ });
+ camel1.start();
+
+ camel2 = new DefaultCamelContext();
+ camel2.setName("camel-2");
+
+ Scheduler camel1Scheduler = camel1.getComponent("quartz2", QuartzComponent.class).getScheduler();
+ QuartzComponent camel2QuartzComponent = camel2.getComponent("quartz2", QuartzComponent.class);
+ camel2QuartzComponent.setScheduler(camel1Scheduler);
+
+ camel2.addRoutes(new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("quartz2://myOtherGroup/myOtherTimerName?cron=0/1+*+*+*+*+?").to("mock:two");
+ }
+ });
+
+ camel2.start();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ camel1.stop();
+ camel2.stop();
+ }
+
+ @Test
+ public void testTwoCamelContext() throws Exception {
+ MockEndpoint mock1 = camel1.getEndpoint("mock:one", MockEndpoint.class);
+ mock1.expectedMinimumMessageCount(2);
+
+ MockEndpoint mock2 = camel2.getEndpoint("mock:two", MockEndpoint.class);
+ mock2.expectedMinimumMessageCount(6);
+ mock1.assertIsSatisfied();
+
+ JobDetail detail = mock1.getReceivedExchanges().get(0).getIn().getHeader("jobDetail", JobDetail.class);
+ Assert.assertThat(detail.getJobDataMap().get(QuartzConstants.QUARTZ_TRIGGER_CRON_EXPRESSION).equals("0/2 * * * * ?"), CoreMatchers.is(true));
+
+ camel1.stop();
+
+ mock2.assertIsSatisfied();
+
+ detail = mock2.getReceivedExchanges().get(0).getIn().getHeader("jobDetail", JobDetail.class);
+ Assert.assertThat(detail.getJobDataMap().get(QuartzConstants.QUARTZ_TRIGGER_CRON_EXPRESSION).equals("0/1 * * * * ?"), CoreMatchers.is(true));
+
+ camel2.stop();
+ }
+}