Author: akarpe Date: Thu Jan 27 15:21:27 2011 New Revision: 1064154 URL: http://svn.apache.org/viewvc?rev=1064154&view=rev Log: CAMEL-3575 Fixed issues in allowing ScheduledRoutePolicy to handle more than one action (start, stop, resume, pause)
Added: camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/routepolicy/quartz/ScheduledJobState.java camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/routepolicy/quartz/SimpleScheduledCombinedRoutePolicyTest.java Modified: camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/routepolicy/quartz/ScheduledJob.java camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/routepolicy/quartz/ScheduledRoutePolicy.java Modified: camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/routepolicy/quartz/ScheduledJob.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/routepolicy/quartz/ScheduledJob.java?rev=1064154&r1=1064153&r2=1064154&view=diff ============================================================================== --- camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/routepolicy/quartz/ScheduledJob.java (original) +++ camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/routepolicy/quartz/ScheduledJob.java Thu Jan 27 15:21:27 2011 @@ -41,8 +41,11 @@ public class ScheduledJob implements Job throw new JobExecutionException("Failed to obtain scheduler context for job " + jobExecutionContext.getJobDetail().getName()); } - Action storedAction = (Action) schedulerContext.get(SCHEDULED_ACTION); - storedRoute = (Route) schedulerContext.get(SCHEDULED_ROUTE); +/* Action storedAction = (Action) schedulerContext.get(SCHEDULED_ACTION); + storedRoute = (Route) schedulerContext.get(SCHEDULED_ROUTE);*/ + ScheduledJobState state = (ScheduledJobState) schedulerContext.get(jobExecutionContext.getJobDetail().getName()); + Action storedAction = state.getAction(); + storedRoute = state.getRoute(); ScheduledRoutePolicy policy = (ScheduledRoutePolicy) storedRoute.getRouteContext().getRoutePolicy(); try { Added: camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/routepolicy/quartz/ScheduledJobState.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/routepolicy/quartz/ScheduledJobState.java?rev=1064154&view=auto ============================================================================== --- camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/routepolicy/quartz/ScheduledJobState.java (added) +++ camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/routepolicy/quartz/ScheduledJobState.java Thu Jan 27 15:21:27 2011 @@ -0,0 +1,37 @@ +/** + * 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.routepolicy.quartz; + +import org.apache.camel.Route; + +public class ScheduledJobState { + private final ScheduledRoutePolicyConstants.Action action; + private final Route route; + + public ScheduledJobState(ScheduledRoutePolicyConstants.Action action, Route route) { + this.action = action; + this.route = route; + } + + public ScheduledRoutePolicyConstants.Action getAction() { + return action; + } + + public Route getRoute() { + return route; + } +} Modified: camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/routepolicy/quartz/ScheduledRoutePolicy.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/routepolicy/quartz/ScheduledRoutePolicy.java?rev=1064154&r1=1064153&r2=1064154&view=diff ============================================================================== --- camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/routepolicy/quartz/ScheduledRoutePolicy.java (original) +++ camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/routepolicy/quartz/ScheduledRoutePolicy.java Thu Jan 27 15:21:27 2011 @@ -78,7 +78,7 @@ public abstract class ScheduledRoutePoli Trigger trigger = createTrigger(action, route); updateScheduledRouteDetails(action, jobDetail, trigger); - loadCallbackDataIntoSchedulerContext(action, route); + loadCallbackDataIntoSchedulerContext(jobDetail, action, route); getScheduler().scheduleJob(jobDetail, trigger); if (LOG.isDebugEnabled()) { @@ -153,9 +153,10 @@ public abstract class ScheduledRoutePoli } } - protected void loadCallbackDataIntoSchedulerContext(Action action, Route route) throws SchedulerException { - getScheduler().getContext().put(SCHEDULED_ACTION, action); - getScheduler().getContext().put(SCHEDULED_ROUTE, route); + protected void loadCallbackDataIntoSchedulerContext(JobDetail jobDetail, Action action, Route route) throws SchedulerException { +/* getScheduler().getContext().put(SCHEDULED_ACTION, action); + getScheduler().getContext().put(SCHEDULED_ROUTE, route);*/ + getScheduler().getContext().put(jobDetail.getName(), new ScheduledJobState(action, route)); } public String retrieveTriggerName(Action action) { Added: camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/routepolicy/quartz/SimpleScheduledCombinedRoutePolicyTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/routepolicy/quartz/SimpleScheduledCombinedRoutePolicyTest.java?rev=1064154&view=auto ============================================================================== --- camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/routepolicy/quartz/SimpleScheduledCombinedRoutePolicyTest.java (added) +++ camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/routepolicy/quartz/SimpleScheduledCombinedRoutePolicyTest.java Thu Jan 27 15:21:27 2011 @@ -0,0 +1,93 @@ +/** + * 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.routepolicy.quartz; + +import java.util.Date; +import java.util.concurrent.TimeUnit; + +import org.apache.camel.CamelExecutionException; +import org.apache.camel.ServiceStatus; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.component.quartz.QuartzComponent; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.apache.camel.util.ServiceHelper; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Test; + +/** + * @version $Revision: 882486 $ + */ +public class SimpleScheduledCombinedRoutePolicyTest extends CamelTestSupport { + private static final transient Log LOG = LogFactory.getLog(SimpleScheduledCombinedRoutePolicyTest.class); + + /* (non-Javadoc) + * @see org.apache.camel.test.junit4.CamelTestSupport#s;etUp() + */ + @Override + public void setUp() throws Exception { + super.setUp(); + } + + /* (non-Javadoc) + * @see org.apache.camel.test.junit4.CamelTestSupport#isUseRouteBuilder() + */ + @Override + public boolean isUseRouteBuilder() { + return false; + } + + @Test + public void testScheduledStartAndStopRoutePolicy() throws Exception { + MockEndpoint success = (MockEndpoint) context.getEndpoint("mock:success"); + + success.expectedMessageCount(1); + + context.getComponent("quartz", QuartzComponent.class).setPropertiesFile("org/apache/camel/routepolicy/quartz/myquartz.properties"); + context.getComponent("quartz", QuartzComponent.class).start(); + context.addRoutes(new RouteBuilder() { + public void configure() { + SimpleScheduledRoutePolicy policy = new SimpleScheduledRoutePolicy(); + long startTime = System.currentTimeMillis() + 3000L; + long stopTime = System.currentTimeMillis() + 8000L; + policy.setRouteStartDate(new Date(startTime)); + policy.setRouteStartRepeatCount(1); + policy.setRouteStartRepeatInterval(3000); + policy.setRouteStopDate(new Date(stopTime)); + policy.setRouteStopRepeatCount(1); + policy.setRouteStopRepeatInterval(3000); + + from("direct:start") + .routeId("test") + .routePolicy(policy) + .to("mock:success"); + } + }); + context.start(); + + Thread.sleep(5000); + assertTrue(context.getRouteStatus("test") == ServiceStatus.Started); + template.sendBody("direct:start", "Ready or not, Here, I come"); + Thread.sleep(5000); + assertTrue(context.getRouteStatus("test") == ServiceStatus.Stopped); + + context.getComponent("quartz", QuartzComponent.class).stop(); + success.assertIsSatisfied(); + } + +}