Author: davsclaus
Date: Fri Mar 16 09:41:31 2012
New Revision: 1301394
URL: http://svn.apache.org/viewvc?rev=1301394&view=rev
Log:
CAMEL-4900: Fixed issue with restarting app with persistent Quartz job store.
Added:
camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppTest.java
(contents, props changed)
- copied, changed from r1301376,
camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreTest.java
camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartRouteTest.java
- copied, changed from r1301376,
camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreTest.java
camel/trunk/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartTest.xml
- copied, changed from r1301376,
camel/trunk/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreTest.xml
Modified:
camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzComponent.java
camel/trunk/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreTest.xml
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=1301394&r1=1301393&r2=1301394&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
Fri Mar 16 09:41:31 2012
@@ -21,7 +21,6 @@ import java.io.InputStream;
import java.net.URI;
import java.text.ParseException;
import java.util.ArrayList;
-import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -223,14 +222,23 @@ public class QuartzComponent extends Def
getScheduler().scheduleJob(job, trigger);
} else if (hasTriggerChanged(existingTrigger, trigger)) {
LOG.debug("Trigger: {}/{} already exists and will be updated by
Quartz.", trigger.getGroup(), trigger.getName());
+ // fast forward start time to now, as we do not want any misfire
to kick in
+ trigger.setStartTime(new Date());
+ // replace job, and relate trigger to previous job name, which is
needed to reschedule job
scheduler.addJob(job, true);
- trigger.setJobName(job.getName());
+ trigger.setJobName(existingTrigger.getJobName());
scheduler.rescheduleJob(trigger.getName(), trigger.getGroup(),
trigger);
} else {
- LOG.debug("Trigger: {}/{} already exists and will be resumed
automatically by Quartz.", trigger.getGroup(), trigger.getName());
if (!isClustered()) {
- trigger.setStartTime(Calendar.getInstance().getTime());
+ LOG.debug("Trigger: {}/{} already exists and will be resumed
by Quartz.", trigger.getGroup(), trigger.getName());
+ // fast forward start time to now, as we do not want any
misfire to kick in
+ trigger.setStartTime(new Date());
+ // replace job, and relate trigger to previous job name, which
is needed to reschedule job
+ scheduler.addJob(job, true);
+ trigger.setJobName(existingTrigger.getJobName());
scheduler.rescheduleJob(trigger.getName(), trigger.getGroup(),
trigger);
+ } else {
+ LOG.debug("Trigger: {}/{} already exists and is already
scheduled by clustered JobStore.", trigger.getGroup(), trigger.getName());
}
}
}
Copied:
camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppTest.java
(from r1301376,
camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreTest.java)
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppTest.java?p2=camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppTest.java&p1=camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreTest.java&r1=1301376&r2=1301394&rev=1301394&view=diff
==============================================================================
---
camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreTest.java
(original)
+++
camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppTest.java
Fri Mar 16 09:41:31 2012
@@ -16,8 +16,10 @@
*/
package org.apache.camel.component.quartz;
+import org.apache.camel.CamelContext;
import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.junit4.CamelSpringTestSupport;
+import org.apache.camel.test.junit4.TestSupport;
+import org.apache.camel.util.ObjectHelper;
import org.junit.Test;
import org.springframework.context.support.AbstractXmlApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
@@ -25,19 +27,50 @@ import org.springframework.context.suppo
/**
* @version
*/
-public class SpringQuartzPersistentStoreTest extends CamelSpringTestSupport {
-
- @Override
- protected AbstractXmlApplicationContext createApplicationContext() {
- return new
ClassPathXmlApplicationContext("org/apache/camel/component/quartz/SpringQuartzPersistentStoreTest.xml");
- }
+public class SpringQuartzPersistentStoreRestartAppTest extends TestSupport {
@Test
- public void testQuartzPersistentStore() throws Exception {
- MockEndpoint mock = getMockEndpoint("mock:result");
+ public void testQuartzPersistentStoreRestart() throws Exception {
+ // load spring app
+ AbstractXmlApplicationContext app = new
ClassPathXmlApplicationContext("org/apache/camel/component/quartz/SpringQuartzPersistentStoreTest.xml");
+
+ app.start();
+
+ CamelContext camel = app.getBean("camelContext", CamelContext.class);
+ assertNotNull(camel);
+
+ MockEndpoint mock = camel.getEndpoint("mock:result",
MockEndpoint.class);
mock.expectedMinimumMessageCount(3);
- assertMockEndpointsSatisfied();
+ mock.assertIsSatisfied();
+
+ app.stop();
+
+ log.info("Restarting ...");
+ log.info("Restarting ...");
+ log.info("Restarting ...");
+
+ // NOTE:
+ // To test a restart where the app has crashed, then you can in
QuartzEndpoint
+ // in the doShutdown method, then remove the following code line
+ // deleteTrigger(getTrigger());
+ // then when we restart then there is old stale data which
QuartzComponent
+ // is supposed to handle and start again
+
+ // load spring app
+ AbstractXmlApplicationContext app2 = new
ClassPathXmlApplicationContext("org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartTest.xml");
+
+ app2.start();
+
+ CamelContext camel2 = app2.getBean("camelContext", CamelContext.class);
+ assertNotNull(camel2);
+
+ MockEndpoint mock2 = camel2.getEndpoint("mock:result",
MockEndpoint.class);
+ mock2.expectedMinimumMessageCount(3);
+
+ mock2.assertIsSatisfied();
+
+ app2.stop();
}
}
Propchange:
camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied:
camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartRouteTest.java
(from r1301376,
camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreTest.java)
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartRouteTest.java?p2=camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartRouteTest.java&p1=camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreTest.java&r1=1301376&r2=1301394&rev=1301394&view=diff
==============================================================================
---
camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreTest.java
(original)
+++
camel/trunk/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartRouteTest.java
Fri Mar 16 09:41:31 2012
@@ -25,7 +25,7 @@ import org.springframework.context.suppo
/**
* @version
*/
-public class SpringQuartzPersistentStoreTest extends CamelSpringTestSupport {
+public class SpringQuartzPersistentStoreRestartRouteTest extends
CamelSpringTestSupport {
@Override
protected AbstractXmlApplicationContext createApplicationContext() {
@@ -35,7 +35,25 @@ public class SpringQuartzPersistentStore
@Test
public void testQuartzPersistentStore() throws Exception {
MockEndpoint mock = getMockEndpoint("mock:result");
- mock.expectedMinimumMessageCount(3);
+ mock.expectedMinimumMessageCount(2);
+
+ assertMockEndpointsSatisfied();
+
+ // restart route
+ context().stopRoute("myRoute");
+ mock.reset();
+ mock.expectedMessageCount(0);
+
+ // wait a bit
+ Thread.sleep(2000);
+
+ assertMockEndpointsSatisfied();
+
+ // start route, and we got messages again
+ mock.reset();
+ mock.expectedMinimumMessageCount(2);
+
+ context().startRoute("myRoute");
assertMockEndpointsSatisfied();
}
Copied:
camel/trunk/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartTest.xml
(from r1301376,
camel/trunk/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreTest.xml)
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartTest.xml?p2=camel/trunk/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartTest.xml&p1=camel/trunk/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreTest.xml&r1=1301376&r2=1301394&rev=1301394&view=diff
==============================================================================
---
camel/trunk/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreTest.xml
(original)
+++
camel/trunk/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartTest.xml
Fri Mar 16 09:41:31 2012
@@ -26,7 +26,7 @@
<!-- the persistent store for quartz -->
<jdbc:embedded-database id="camel_quartz" type="DERBY">
- <jdbc:script location="classpath:tables_derby.sql"/>
+ <!-- do not load script as database alreaady exists -->
</jdbc:embedded-database>
<bean id="quartz" class="org.apache.camel.component.quartz.QuartzComponent">
Modified:
camel/trunk/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreTest.xml
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreTest.xml?rev=1301394&r1=1301393&r2=1301394&view=diff
==============================================================================
---
camel/trunk/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreTest.xml
(original)
+++
camel/trunk/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreTest.xml
Fri Mar 16 09:41:31 2012
@@ -57,7 +57,7 @@
</bean>
<camelContext id="camelContext"
xmlns="http://camel.apache.org/schema/spring">
- <route>
+ <route id="myRoute">
<from
uri="quartz://app/test?trigger.repeatInterval=1000&trigger.repeatCount=-1&stateful=true"/>
<to uri="log:trigger"/>
<to uri="mock:result"/>