Author: ningjiang Date: Fri Dec 2 07:27:25 2011 New Revision: 1209377 URL: http://svn.apache.org/viewvc?rev=1209377&view=rev Log: CAMEL-4732 Allow camel-freemarker template cache duration to be specified
Modified: camel/trunk/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerComponent.java camel/trunk/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerContentCacheTest.java Modified: camel/trunk/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerComponent.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerComponent.java?rev=1209377&r1=1209376&r2=1209377&view=diff ============================================================================== --- camel/trunk/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerComponent.java (original) +++ camel/trunk/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerComponent.java Fri Dec 2 07:27:25 2011 @@ -47,6 +47,10 @@ public class FreemarkerComponent extends boolean cache = getAndRemoveParameter(parameters, "contentCache", Boolean.class, Boolean.TRUE); if (cache) { config = getConfiguration(); + int templateUpdateDelay = getAndRemoveParameter(parameters, "templateUpdateDelay", Integer.class, 0); + if (templateUpdateDelay > 0) { + config.setTemplateUpdateDelay(templateUpdateDelay); + } } else { config = getNoCacheConfiguration(); } Modified: camel/trunk/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerContentCacheTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerContentCacheTest.java?rev=1209377&r1=1209376&r2=1209377&view=diff ============================================================================== --- camel/trunk/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerContentCacheTest.java (original) +++ camel/trunk/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerContentCacheTest.java Fri Dec 2 07:27:25 2011 @@ -72,6 +72,36 @@ public class FreemarkerContentCacheTest template.sendBodyAndHeader("direct:b", "Body", "name", "Paris"); mock.assertIsSatisfied(); } + + @Test + public void testTemplateUpdateDelay() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:result"); + mock.expectedBodiesReceived("Hello London"); + + template.sendBodyAndHeader("direct:c", "Body", "name", "London"); + mock.assertIsSatisfied(); + + // now change content in the file in the classpath and try again .... with no delay + template.sendBodyAndHeader("file://target/test-classes/org/apache/camel/component/freemarker?fileExist=Override", "Bye ${headers.name}", Exchange.FILE_NAME, "hello.ftl"); + + mock.reset(); + // we must expected the original filecontent as the cache is enabled, so its Hello and not Bye + mock.expectedBodiesReceived("Hello Paris"); + + template.sendBodyAndHeader("direct:c", "Body", "name", "Paris"); + mock.assertIsSatisfied(); + + // now change content in the file in the classpath and try again .... after delaying longer than the cache update delay + Thread.sleep(5000); + template.sendBodyAndHeader("file://target/test-classes/org/apache/camel/component/freemarker?fileExist=Override", "Bye ${headers.name}", Exchange.FILE_NAME, "hello.ftl"); + + mock.reset(); + // we must expected the new content, because the cache has expired + mock.expectedBodiesReceived("Bye Paris"); + template.sendBodyAndHeader("direct:c", "Body", "name", "Paris"); + mock.assertIsSatisfied(); + } + protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { @@ -79,6 +109,8 @@ public class FreemarkerContentCacheTest from("direct:a").to("freemarker://org/apache/camel/component/freemarker/hello.ftl?contentCache=false").to("mock:result"); from("direct:b").to("freemarker://org/apache/camel/component/freemarker/hello.ftl?contentCache=true").to("mock:result"); + + from("direct:c").to("freemarker://org/apache/camel/component/freemarker/hello.ftl?contentCache=true&templateUpdateDelay=4").to("mock:result"); } }; }