Repository: camel Updated Branches: refs/heads/camel-2.16.x 84842ded9 -> 35b55e257 refs/heads/master 5d77c1162 -> e3aa8ae42
CAMEL-9424 Correctly build TriggerKey using the trigger prefix relevant to the Action. This fixes the fuplicate trigger name issue when setting both start and stop route times on a CronScheduledRoutePolicy. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/c96a7c88 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/c96a7c88 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/c96a7c88 Branch: refs/heads/master Commit: c96a7c88551b167efe471a0711d494658945f1fb Parents: 5d77c11 Author: Donovan Muller <donovan.mul...@gmail.com> Authored: Wed Dec 16 00:56:44 2015 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Wed Dec 16 07:35:06 2015 +0100 ---------------------------------------------------------------------- .../quartz2/CronScheduledRoutePolicy.java | 18 +++++-- .../quartz2/CronScheduledRoutePolicyTest.java | 56 ++++++++++++++++++++ 2 files changed, 69 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/c96a7c88/components/camel-quartz2/src/main/java/org/apache/camel/routepolicy/quartz2/CronScheduledRoutePolicy.java ---------------------------------------------------------------------- diff --git a/components/camel-quartz2/src/main/java/org/apache/camel/routepolicy/quartz2/CronScheduledRoutePolicy.java b/components/camel-quartz2/src/main/java/org/apache/camel/routepolicy/quartz2/CronScheduledRoutePolicy.java index eb7978a..1b917a7 100644 --- a/components/camel-quartz2/src/main/java/org/apache/camel/routepolicy/quartz2/CronScheduledRoutePolicy.java +++ b/components/camel-quartz2/src/main/java/org/apache/camel/routepolicy/quartz2/CronScheduledRoutePolicy.java @@ -25,6 +25,7 @@ import org.apache.camel.util.ObjectHelper; import org.quartz.CronScheduleBuilder; import org.quartz.Trigger; import org.quartz.TriggerBuilder; +import org.quartz.TriggerKey; public class CronScheduledRoutePolicy extends ScheduledRoutePolicy implements ScheduledRoutePolicyConstants { private String routeStartTime; @@ -33,7 +34,7 @@ public class CronScheduledRoutePolicy extends ScheduledRoutePolicy implements Sc private String routeResumeTime; private String timeZoneString; private TimeZone timeZone; - + public void onInit(Route route) { try { doOnInit(route); @@ -80,25 +81,32 @@ public class CronScheduledRoutePolicy extends ScheduledRoutePolicy implements Sc @Override protected Trigger createTrigger(Action action, Route route) throws Exception { - Trigger trigger = null; - + Trigger trigger = null; + CronScheduleBuilder scheduleBuilder = null; + String triggerPrefix = null; if (action == Action.START) { scheduleBuilder = CronScheduleBuilder.cronSchedule(getRouteStartTime()); + triggerPrefix = TRIGGER_START; } else if (action == Action.STOP) { scheduleBuilder = CronScheduleBuilder.cronSchedule(getRouteStopTime()); + triggerPrefix = TRIGGER_STOP; } else if (action == Action.SUSPEND) { scheduleBuilder = CronScheduleBuilder.cronSchedule(getRouteSuspendTime()); + triggerPrefix = TRIGGER_SUSPEND; } else if (action == Action.RESUME) { scheduleBuilder = CronScheduleBuilder.cronSchedule(getRouteResumeTime()); + triggerPrefix = TRIGGER_RESUME; } - + if (scheduleBuilder != null) { if (timeZone != null) { scheduleBuilder.inTimeZone(timeZone); } + + TriggerKey triggerKey = new TriggerKey(triggerPrefix + route.getId(), TRIGGER_GROUP + route.getId()); trigger = TriggerBuilder.newTrigger() - .withIdentity(TRIGGER_START + route.getId(), TRIGGER_GROUP + route.getId()) + .withIdentity(triggerKey) .withSchedule(scheduleBuilder) .build(); } http://git-wip-us.apache.org/repos/asf/camel/blob/c96a7c88/components/camel-quartz2/src/test/java/org/apache/camel/routepolicy/quartz2/CronScheduledRoutePolicyTest.java ---------------------------------------------------------------------- diff --git a/components/camel-quartz2/src/test/java/org/apache/camel/routepolicy/quartz2/CronScheduledRoutePolicyTest.java b/components/camel-quartz2/src/test/java/org/apache/camel/routepolicy/quartz2/CronScheduledRoutePolicyTest.java index f8d9b2e..73ec425 100644 --- a/components/camel-quartz2/src/test/java/org/apache/camel/routepolicy/quartz2/CronScheduledRoutePolicyTest.java +++ b/components/camel-quartz2/src/test/java/org/apache/camel/routepolicy/quartz2/CronScheduledRoutePolicyTest.java @@ -16,9 +16,11 @@ */ package org.apache.camel.routepolicy.quartz2; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import org.apache.camel.Consumer; +import org.apache.camel.Route; import org.apache.camel.ServiceStatus; import org.apache.camel.SuspendableService; import org.apache.camel.builder.RouteBuilder; @@ -156,6 +158,60 @@ public class CronScheduledRoutePolicyTest extends CamelTestSupport { Thread.sleep(5000); assertTrue(context.getRouteStatus("test") == ServiceStatus.Stopped); } + + @Test + public void testScheduledStartAndStopRoutePolicy() throws Exception { + MockEndpoint success = context.getEndpoint("mock:success", MockEndpoint.class); + success.expectedMessageCount(1); + + final CountDownLatch startedLatch = new CountDownLatch(1); + final CountDownLatch stoppedLatch = new CountDownLatch(1); + + context.getComponent("quartz2", QuartzComponent.class).setPropertiesFile("org/apache/camel/routepolicy/quartz2/myquartz.properties"); + context.addRoutes(new RouteBuilder() { + public void configure() { + CronScheduledRoutePolicy policy = new CronScheduledRoutePolicy() { + + @Override + public void onStart(final Route route) { + super.onStart(route); + + startedLatch.countDown(); + } + + @Override + public void onStop(final Route route) { + super.onStop(route); + + stoppedLatch.countDown(); + } + }; + policy.setRouteStartTime("*/3 * * * * ?"); + policy.setRouteStopTime("*/6 * * * * ?"); + policy.setRouteStopGracePeriod(0); + + from("direct:start") + .routeId("test") + .routePolicy(policy) + .noAutoStartup() + .to("mock:success"); + } + }); + context.start(); + + startedLatch.await(5000, TimeUnit.SECONDS); + + ServiceStatus startedStatus = context.getRouteStatus("test"); + assertTrue(startedStatus == ServiceStatus.Started || startedStatus == ServiceStatus.Starting); + template.sendBody("direct:start", "Ready or not, Here, I come"); + + stoppedLatch.await(5000, TimeUnit.SECONDS); + + ServiceStatus stoppedStatus = context.getRouteStatus("test"); + assertTrue(stoppedStatus == ServiceStatus.Stopped || stoppedStatus == ServiceStatus.Stopping); + + success.assertIsSatisfied(); + } @Test public void testScheduledStopRoutePolicyWithExtraPolicy() throws Exception {