Author: davsclaus Date: Fri Jul 2 16:45:14 2010 New Revision: 960053 URL: http://svn.apache.org/viewvc?rev=960053&view=rev Log: CAMEL-2890: sync delayed redelivery is default on error handlers. You have to use asyncDelayedRedelivery() to allow Camel to schedule delayed redeliveries and use the async routing engine to continue routing the message.
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DefaultErrorHandlerBuilder.java camel/trunk/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java camel/trunk/camel-core/src/main/java/org/apache/camel/model/RedeliveryPolicyDefinition.java camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryPolicy.java camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RedeliveryErrorHandlerBlockedDelayTest.java camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RedeliveryErrorHandlerNonBlockedDelayTest.java camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RedeliveryOnExceptionBlockedDelayTest.java camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointRedeliveryErrorHandlerNonBlockedDelay2Test.java camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointRedeliveryErrorHandlerNonBlockedDelay3Test.java camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointRedeliveryErrorHandlerNonBlockedDelayTest.java camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParserTest.java camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/SpringErrorHandlerConfigTest.xml camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.xml Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DefaultErrorHandlerBuilder.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DefaultErrorHandlerBuilder.java?rev=960053&r1=960052&r2=960053&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DefaultErrorHandlerBuilder.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DefaultErrorHandlerBuilder.java Fri Jul 2 16:45:14 2010 @@ -47,6 +47,7 @@ public class DefaultErrorHandlerBuilder protected Endpoint deadLetter; protected String deadLetterUri; protected boolean useOriginalMessage; + protected boolean asyncDelayedRedelivery; public DefaultErrorHandlerBuilder() { } @@ -87,11 +88,6 @@ public class DefaultErrorHandlerBuilder return this; } - public DefaultErrorHandlerBuilder syncDelayedRedelivery() { - getRedeliveryPolicy().syncDelayedRedelivery(); - return this; - } - public DefaultErrorHandlerBuilder delayPattern(String delayPattern) { getRedeliveryPolicy().delayPattern(delayPattern); return this; @@ -153,6 +149,17 @@ public class DefaultErrorHandlerBuilder } /** + * Will allow asynchronous delayed redeliveries. + * + * @see org.apache.camel.processor.RedeliveryPolicy#setAsyncDelayedRedelivery(boolean) + * @return the builder + */ + public DefaultErrorHandlerBuilder asyncDelayedRedelivery() { + getRedeliveryPolicy().setAsyncDelayedRedelivery(true); + return this; + } + + /** * Sets whether the exchange should be marked as handled or not. * * @param handled handled or not @@ -390,6 +397,14 @@ public class DefaultErrorHandlerBuilder this.useOriginalMessage = useOriginalMessage; } + public boolean isAsyncDelayedRedelivery() { + return asyncDelayedRedelivery; + } + + public void setAsyncDelayedRedelivery(boolean asyncDelayedRedelivery) { + this.asyncDelayedRedelivery = asyncDelayedRedelivery; + } + protected Predicate createHandledPolicy() { // should NOT be handled by default for default error handler return PredicateBuilder.toPredicate(ExpressionBuilder.constantExpression(false)); Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java?rev=960053&r1=960052&r2=960053&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java Fri Jul 2 16:45:14 2010 @@ -367,13 +367,13 @@ public class OnExceptionDefinition exten } /** - * Only allow synchronous delayed redelivery. + * Allow synchronous delayed redelivery. * * @see org.apache.camel.processor.RedeliveryPolicy#setAsyncDelayedRedelivery(boolean) * @return the builder */ - public OnExceptionDefinition syncDelayedRedelivery() { - getOrCreateRedeliveryPolicy().setSyncDelayedRedelivery(true); + public OnExceptionDefinition asyncDelayedRedelivery() { + getOrCreateRedeliveryPolicy().setAsyncDelayedRedelivery(true); return this; } @@ -690,6 +690,13 @@ public class OnExceptionDefinition exten this.useOriginalMessagePolicy = useOriginalMessagePolicy; } + public boolean isAsyncDelayedRedelivery() { + if (getRedeliveryPolicy() != null) { + return getRedeliveryPolicy().getAsyncDelayedRedelivery() != null && getRedeliveryPolicy().getAsyncDelayedRedelivery(); + } + return false; + } + // Implementation methods //------------------------------------------------------------------------- Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/RedeliveryPolicyDefinition.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RedeliveryPolicyDefinition.java?rev=960053&r1=960052&r2=960053&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/model/RedeliveryPolicyDefinition.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/RedeliveryPolicyDefinition.java Fri Jul 2 16:45:14 2010 @@ -41,7 +41,7 @@ public class RedeliveryPolicyDefinition @XmlAttribute private Long redeliveryDelay; @XmlAttribute - private Boolean syncDelayedRedelivery; + private Boolean asyncDelayedRedelivery; @XmlAttribute private Double backOffMultiplier; @XmlAttribute @@ -93,8 +93,8 @@ public class RedeliveryPolicyDefinition if (redeliveryDelay != null) { answer.setRedeliveryDelay(redeliveryDelay); } - if (syncDelayedRedelivery != null && syncDelayedRedelivery) { - answer.syncDelayedRedelivery(); + if (asyncDelayedRedelivery != null && asyncDelayedRedelivery) { + answer.asyncDelayedRedelivery(); } if (retriesExhaustedLogLevel != null) { answer.setRetriesExhaustedLogLevel(retriesExhaustedLogLevel); @@ -385,12 +385,12 @@ public class RedeliveryPolicyDefinition this.redeliveryDelay = delay; } - public Boolean getSyncDelayedRedelivery() { - return syncDelayedRedelivery; + public Boolean getAsyncDelayedRedelivery() { + return asyncDelayedRedelivery; } - public void setSyncDelayedRedelivery(Boolean syncDelayedRedelivery) { - this.syncDelayedRedelivery = syncDelayedRedelivery; + public void setAsyncDelayedRedelivery(Boolean asyncDelayedRedelivery) { + this.asyncDelayedRedelivery = asyncDelayedRedelivery; } public Integer getMaximumRedeliveries() { Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java?rev=960053&r1=960052&r2=960053&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java Fri Jul 2 16:45:14 2010 @@ -78,6 +78,7 @@ public abstract class RedeliveryErrorHan Predicate handledPredicate = handledPolicy; Predicate continuedPredicate; boolean useOriginalInMessage = useOriginalMessagePolicy; + boolean asyncDelayedRedelivery = redeliveryPolicy.isAsyncDelayedRedelivery(); } /** @@ -477,6 +478,7 @@ public abstract class RedeliveryErrorHan data.continuedPredicate = exceptionPolicy.getContinuedPolicy(); data.retryWhilePredicate = exceptionPolicy.getRetryWhilePolicy(); data.useOriginalInMessage = exceptionPolicy.getUseOriginalMessagePolicy(); + data.asyncDelayedRedelivery = exceptionPolicy.isAsyncDelayedRedelivery(); // route specific failure handler? Processor processor = exceptionPolicy.getErrorHandler(); Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryPolicy.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryPolicy.java?rev=960053&r1=960052&r2=960053&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryPolicy.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryPolicy.java Fri Jul 2 16:45:14 2010 @@ -37,7 +37,7 @@ import org.apache.commons.logging.LogFac * <li>maximumRedeliveries = 0</li> * <li>redeliveryDelay = 1000L (the initial delay)</li> * <li>maximumRedeliveryDelay = 60 * 1000L</li> - * <li>asyncDelayedRedelivery = true</li> + * <li>asyncDelayedRedelivery = false</li> * <li>backOffMultiplier = 2</li> * <li>useExponentialBackOff = false</li> * <li>collisionAvoidanceFactor = 0.15d</li> @@ -95,7 +95,7 @@ public class RedeliveryPolicy implements protected boolean logExhausted = true; protected boolean logRetryAttempted = true; protected String delayPattern; - protected boolean asyncDelayedRedelivery = true; + protected boolean asyncDelayedRedelivery; public RedeliveryPolicy() { } @@ -395,12 +395,12 @@ public class RedeliveryPolicy implements } /** - * Only allow synchronous delayed redelivery. + * Allow asynchronous delayed redelivery. * * @see #setAsyncDelayedRedelivery(boolean) */ - public RedeliveryPolicy syncDelayedRedelivery() { - setAsyncDelayedRedelivery(false); + public RedeliveryPolicy asyncDelayedRedelivery() { + setAsyncDelayedRedelivery(true); return this; } @@ -628,9 +628,10 @@ public class RedeliveryPolicy implements /** * Sets whether asynchronous delayed redelivery is allowed. * <p/> - * This is enabled by default, which allows Camel to schedule a future task for delayed - * redelivery which prevents current thread from blocking while waiting. You can use - * this option to turn it off to ensure current thread will block. + * This is disabled by default. + * <p/> + * When enabled it allows Camel to schedule a future task for delayed + * redelivery which prevents current thread from blocking while waiting. * <p/> * Exchange which is transacted will however always use synchronous delayed redelivery * because the transaction must execute in the same thread context. Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RedeliveryErrorHandlerBlockedDelayTest.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RedeliveryErrorHandlerBlockedDelayTest.java?rev=960053&r1=960052&r2=960053&view=diff ============================================================================== --- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RedeliveryErrorHandlerBlockedDelayTest.java (original) +++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RedeliveryErrorHandlerBlockedDelayTest.java Fri Jul 2 16:45:14 2010 @@ -52,9 +52,9 @@ public class RedeliveryErrorHandlerBlock return new RouteBuilder() { @Override public void configure() throws Exception { - // do block redelivery attempts + // will by default block errorHandler(defaultErrorHandler() - .maximumRedeliveries(5).redeliveryDelay(2000).syncDelayedRedelivery()); + .maximumRedeliveries(5).redeliveryDelay(2000)); from("seda:start") .to("log:before") Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RedeliveryErrorHandlerNonBlockedDelayTest.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RedeliveryErrorHandlerNonBlockedDelayTest.java?rev=960053&r1=960052&r2=960053&view=diff ============================================================================== --- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RedeliveryErrorHandlerNonBlockedDelayTest.java (original) +++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RedeliveryErrorHandlerNonBlockedDelayTest.java Fri Jul 2 16:45:14 2010 @@ -52,7 +52,8 @@ public class RedeliveryErrorHandlerNonBl return new RouteBuilder() { @Override public void configure() throws Exception { - errorHandler(defaultErrorHandler().maximumRedeliveries(5).redeliveryDelay(2000)); + // use async delayed which means non blocking + errorHandler(defaultErrorHandler().maximumRedeliveries(5).redeliveryDelay(2000).asyncDelayedRedelivery()); from("seda:start") .to("log:before") Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RedeliveryOnExceptionBlockedDelayTest.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RedeliveryOnExceptionBlockedDelayTest.java?rev=960053&r1=960052&r2=960053&view=diff ============================================================================== --- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RedeliveryOnExceptionBlockedDelayTest.java (original) +++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RedeliveryOnExceptionBlockedDelayTest.java Fri Jul 2 16:45:14 2010 @@ -52,9 +52,9 @@ public class RedeliveryOnExceptionBlocke return new RouteBuilder() { @Override public void configure() throws Exception { - // do block if this exception was thrown + // will by default block onException(IllegalArgumentException.class) - .maximumRedeliveries(5).redeliveryDelay(2000).syncDelayedRedelivery(); + .maximumRedeliveries(5).redeliveryDelay(2000); from("seda:start") .to("log:before") Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointRedeliveryErrorHandlerNonBlockedDelay2Test.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointRedeliveryErrorHandlerNonBlockedDelay2Test.java?rev=960053&r1=960052&r2=960053&view=diff ============================================================================== --- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointRedeliveryErrorHandlerNonBlockedDelay2Test.java (original) +++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointRedeliveryErrorHandlerNonBlockedDelay2Test.java Fri Jul 2 16:45:14 2010 @@ -56,7 +56,7 @@ public class AsyncEndpointRedeliveryErro public void configure() throws Exception { context.addComponent("async", new MyAsyncComponent()); - errorHandler(defaultErrorHandler().maximumRedeliveries(5).redeliveryDelay(2000)); + errorHandler(defaultErrorHandler().maximumRedeliveries(5).redeliveryDelay(2000).asyncDelayedRedelivery()); from("seda:start") .to("log:before") Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointRedeliveryErrorHandlerNonBlockedDelay3Test.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointRedeliveryErrorHandlerNonBlockedDelay3Test.java?rev=960053&r1=960052&r2=960053&view=diff ============================================================================== --- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointRedeliveryErrorHandlerNonBlockedDelay3Test.java (original) +++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointRedeliveryErrorHandlerNonBlockedDelay3Test.java Fri Jul 2 16:45:14 2010 @@ -51,7 +51,7 @@ public class AsyncEndpointRedeliveryErro public void configure() throws Exception { context.addComponent("async", new MyAsyncComponent()); - errorHandler(defaultErrorHandler().maximumRedeliveries(5).redeliveryDelay(1000)); + errorHandler(defaultErrorHandler().maximumRedeliveries(5).redeliveryDelay(1000).asyncDelayedRedelivery()); from("seda:start") .to("log:before") Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointRedeliveryErrorHandlerNonBlockedDelayTest.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointRedeliveryErrorHandlerNonBlockedDelayTest.java?rev=960053&r1=960052&r2=960053&view=diff ============================================================================== --- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointRedeliveryErrorHandlerNonBlockedDelayTest.java (original) +++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointRedeliveryErrorHandlerNonBlockedDelayTest.java Fri Jul 2 16:45:14 2010 @@ -57,7 +57,7 @@ public class AsyncEndpointRedeliveryErro public void configure() throws Exception { context.addComponent("async", new MyAsyncComponent()); - errorHandler(defaultErrorHandler().maximumRedeliveries(5).redeliveryDelay(2000)); + errorHandler(defaultErrorHandler().maximumRedeliveries(5).redeliveryDelay(2000).asyncDelayedRedelivery()); from("seda:start") .to("log:before") Modified: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParserTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParserTest.java?rev=960053&r1=960052&r2=960053&view=diff ============================================================================== --- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParserTest.java (original) +++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParserTest.java Fri Jul 2 16:45:14 2010 @@ -80,6 +80,7 @@ public class ErrorHandlerDefinitionParse assertEquals("Wrong maximumRedeliveries", 2, policy.getMaximumRedeliveries()); assertEquals("Wrong redeliveryDelay", 1000, policy.getRedeliveryDelay()); assertEquals("Wrong logStackTrace", true, policy.isLogHandled()); + assertEquals("Wrong asyncRedeliveryDelayed", true, policy.isAsyncDelayedRedelivery()); } public void testErrorHandlerInsideCamelContext() { Modified: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/SpringErrorHandlerConfigTest.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/SpringErrorHandlerConfigTest.xml?rev=960053&r1=960052&r2=960053&view=diff ============================================================================== --- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/SpringErrorHandlerConfigTest.xml (original) +++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/SpringErrorHandlerConfigTest.xml Fri Jul 2 16:45:14 2010 @@ -33,7 +33,7 @@ <camelContext xmlns="http://camel.apache.org/schema/spring"> <errorHandler id="defaultEH"> - <redeliveryPolicy maximumRedeliveries="2" redeliveryDelay="0"/> + <redeliveryPolicy maximumRedeliveries="2" redeliveryDelay="1000" asyncDelayedRedelivery="true"/> </errorHandler> <errorHandler id="dlc" type="DeadLetterChannel" deadLetterUri="mock:dlc"> Modified: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.xml?rev=960053&r1=960052&r2=960053&view=diff ============================================================================== --- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.xml (original) +++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.xml Fri Jul 2 16:45:14 2010 @@ -35,7 +35,7 @@ </camel:errorHandler> <camel:errorHandler id="deadLetterErrorHandler" type="DeadLetterChannel" deadLetterUri="log:dead"> - <camel:redeliveryPolicy maximumRedeliveries="2" redeliveryDelay="1000" logHandled="true"/> + <camel:redeliveryPolicy maximumRedeliveries="2" redeliveryDelay="1000" logHandled="true" asyncDelayedRedelivery="true"/> </camel:errorHandler> <bean id="myErrorProcessor" class="org.apache.camel.spring.handler.MyErrorProcessor"/>