You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2010/10/19 09:02:58 UTC

svn commit: r1024138 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/builder/ camel-core/src/main/java/org/apache/camel/processor/ camel-core/src/test/java/org/apache/camel/processor/onexception/ components/camel-blueprint/src/main/java/or...

Author: davsclaus
Date: Tue Oct 19 07:02:58 2010
New Revision: 1024138

URL: http://svn.apache.org/viewvc?rev=1024138&view=rev
Log:
CAMEL-3242: Added retryWhile to error handler.

Added:
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/DefaultErrorHandlerRetryWhileTest.java
      - copied, changed from r1023225, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionRetryUntilTest.java
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDefaultErrorHandlerRetryWhileTest.java   (contents, props changed)
      - copied, changed from r1024106, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringShutdownCompleteAllTasksTest.java
    camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/DefaultErrorHandlerRetryWhileTest.xml
      - copied, changed from r1024106, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringCustomPredicateTest.xml
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DefaultErrorHandlerBuilder.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DefaultErrorHandler.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/processor/LoggingErrorHandler.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java
    camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/ErrorHandlerDefinition.java
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.java
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandler.java
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerBuilder.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java?rev=1024138&r1=1024137&r2=1024138&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java Tue Oct 19 07:02:58 2010
@@ -56,7 +56,7 @@ public class DeadLetterChannelBuilder ex
 
         DeadLetterChannel answer = new DeadLetterChannel(routeContext.getCamelContext(), processor, getLogger(),
                 getOnRedelivery(), getRedeliveryPolicy(), getHandledPolicy(), getExceptionPolicyStrategy(),
-                getFailureProcessor(), getDeadLetterUri(), isUseOriginalMessage());
+                getFailureProcessor(), getDeadLetterUri(), isUseOriginalMessage(), getRetryWhilePolicy(routeContext.getCamelContext()));
         // configure error handler before we can use it
         configure(answer);
         return answer;

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=1024138&r1=1024137&r2=1024138&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 Tue Oct 19 07:02:58 2010
@@ -16,17 +16,21 @@
  */
 package org.apache.camel.builder;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Expression;
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
+import org.apache.camel.language.bean.BeanExpression;
 import org.apache.camel.processor.DefaultErrorHandler;
 import org.apache.camel.processor.ErrorHandlerSupport;
 import org.apache.camel.processor.Logger;
 import org.apache.camel.processor.RedeliveryPolicy;
 import org.apache.camel.processor.exceptionpolicy.ExceptionPolicyStrategy;
+import org.apache.camel.spi.Language;
 import org.apache.camel.spi.RouteContext;
+import org.apache.camel.util.CamelContextHelper;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import static org.apache.camel.builder.PredicateBuilder.toPredicate;
@@ -43,6 +47,8 @@ public class DefaultErrorHandlerBuilder 
     protected RedeliveryPolicy redeliveryPolicy;
     protected Processor onRedelivery;
     protected Predicate handledPolicy;
+    protected Predicate retryWhile;
+    protected String retryWhileRef;
     protected Processor failureProcessor;
     protected Endpoint deadLetter;
     protected String deadLetterUri;
@@ -54,7 +60,8 @@ public class DefaultErrorHandlerBuilder 
 
     public Processor createErrorHandler(RouteContext routeContext, Processor processor) throws Exception {
         DefaultErrorHandler answer = new DefaultErrorHandler(routeContext.getCamelContext(), processor, getLogger(),
-                getOnRedelivery(), getRedeliveryPolicy(), getHandledPolicy(), getExceptionPolicyStrategy());
+                getOnRedelivery(), getRedeliveryPolicy(), getHandledPolicy(), getExceptionPolicyStrategy(),
+                getRetryWhilePolicy(routeContext.getCamelContext()));
         // configure error handler before we can use it
         configure(answer);
         return answer;
@@ -259,10 +266,11 @@ public class DefaultErrorHandlerBuilder 
     }
 
     /**
-     * Sets a processor that should be processed <b>before</b> a redelivey attempt.
+     * Sets a processor that should be processed <b>before</b> a redelivery attempt.
      * <p/>
      * Can be used to change the {@link org.apache.camel.Exchange} <b>before</b> its being redelivered.
      *
+     * @param processor the processor
      * @return the builder
      */
     public DefaultErrorHandlerBuilder onRedelivery(Processor processor) {
@@ -271,6 +279,19 @@ public class DefaultErrorHandlerBuilder 
     }
 
     /**
+     * Sets the retry while expression.
+     * <p/>
+     * Will continue retrying until expression evaluates to <tt>false</tt>.
+     *
+     * @param retryWhile expression that determines when to stop retrying
+     * @return the builder
+     */
+    public DefaultErrorHandlerBuilder retryWhile(Expression retryWhile) {
+        setRetryWhile(toPredicate(retryWhile));
+        return this;
+    }
+
+    /**
      * Will use the original input {@link org.apache.camel.Message} when an {@link org.apache.camel.Exchange}
      * is moved to the dead letter queue.
      * <p/>
@@ -350,6 +371,34 @@ public class DefaultErrorHandlerBuilder 
         this.onRedelivery = onRedelivery;
     }
 
+    public Predicate getRetryWhilePolicy(CamelContext context) {
+        Predicate answer = getRetryWhile();
+
+        if (getRetryWhileRef() != null) {
+            // its a bean expression
+            Language bean = context.resolveLanguage("bean");
+            answer = bean.createPredicate(getRetryWhileRef());
+        }
+
+        return answer;
+    }
+
+    public Predicate getRetryWhile() {
+        return retryWhile;
+    }
+
+    public void setRetryWhile(Predicate retryWhile) {
+        this.retryWhile = retryWhile;
+    }
+
+    public String getRetryWhileRef() {
+        return retryWhileRef;
+    }
+
+    public void setRetryWhileRef(String retryWhileRef) {
+        this.retryWhileRef = retryWhileRef;
+    }
+
     @Deprecated
     public Predicate getHandledPolicy() {
         if (handledPolicy == null) {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java?rev=1024138&r1=1024137&r2=1024138&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java Tue Oct 19 07:02:58 2010
@@ -45,11 +45,12 @@ public class DeadLetterChannel extends R
      * @param deadLetter                the failure processor to send failed exchanges to
      * @param deadLetterUri             an optional uri for logging purpose
      * @param useOriginalBodyPolicy     should the original IN body be moved to the dead letter queue or the current exchange IN body?
+     * @param retryWhile                retry while
      */
     public DeadLetterChannel(CamelContext camelContext, Processor output, Logger logger, Processor redeliveryProcessor, RedeliveryPolicy redeliveryPolicy,
-                             Predicate handledPolicy, ExceptionPolicyStrategy exceptionPolicyStrategy,
-                             Processor deadLetter, String deadLetterUri, boolean useOriginalBodyPolicy) {
-        super(camelContext, output, logger, redeliveryProcessor, redeliveryPolicy, handledPolicy, deadLetter, deadLetterUri, useOriginalBodyPolicy);
+                             Predicate handledPolicy, ExceptionPolicyStrategy exceptionPolicyStrategy, Processor deadLetter,
+                             String deadLetterUri, boolean useOriginalBodyPolicy, Predicate retryWhile) {
+        super(camelContext, output, logger, redeliveryProcessor, redeliveryPolicy, handledPolicy, deadLetter, deadLetterUri, useOriginalBodyPolicy, retryWhile);
         setExceptionPolicy(exceptionPolicyStrategy);
     }
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DefaultErrorHandler.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DefaultErrorHandler.java?rev=1024138&r1=1024137&r2=1024138&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DefaultErrorHandler.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DefaultErrorHandler.java Tue Oct 19 07:02:58 2010
@@ -39,10 +39,12 @@ public class DefaultErrorHandler extends
      * @param redeliveryPolicy          policy for redelivery
      * @param handledPolicy             policy for handling failed exception that are moved to the dead letter queue
      * @param exceptionPolicyStrategy   strategy for onException handling
+     * @param retryWhile                retry while
      */
     public DefaultErrorHandler(CamelContext camelContext, Processor output, Logger logger, Processor redeliveryProcessor,
-                               RedeliveryPolicy redeliveryPolicy, Predicate handledPolicy, ExceptionPolicyStrategy exceptionPolicyStrategy) {
-        super(camelContext, output, logger, redeliveryProcessor, redeliveryPolicy, handledPolicy, null, null, false);
+                               RedeliveryPolicy redeliveryPolicy, Predicate handledPolicy,
+                               ExceptionPolicyStrategy exceptionPolicyStrategy, Predicate retryWhile) {
+        super(camelContext, output, logger, redeliveryProcessor, redeliveryPolicy, handledPolicy, null, null, false, retryWhile);
         setExceptionPolicy(exceptionPolicyStrategy);
     }
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/LoggingErrorHandler.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/LoggingErrorHandler.java?rev=1024138&r1=1024137&r2=1024138&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/LoggingErrorHandler.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/LoggingErrorHandler.java Tue Oct 19 07:02:58 2010
@@ -36,7 +36,7 @@ public class LoggingErrorHandler extends
      * @param exceptionPolicyStrategy strategy for onException handling
      */
     public LoggingErrorHandler(CamelContext camelContext, Processor output, Logger logger, ExceptionPolicyStrategy exceptionPolicyStrategy) {
-        super(camelContext, output, logger, null, new RedeliveryPolicy(), null, exceptionPolicyStrategy);
+        super(camelContext, output, logger, null, new RedeliveryPolicy(), null, exceptionPolicyStrategy, null);
     }
 
     @Override

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=1024138&r1=1024137&r2=1024138&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 Tue Oct 19 07:02:58 2010
@@ -58,6 +58,7 @@ public abstract class RedeliveryErrorHan
     protected final Processor redeliveryProcessor;
     protected final RedeliveryPolicy redeliveryPolicy;
     protected final Predicate handledPolicy;
+    protected final Predicate retryWhilePolicy;
     protected final Logger logger;
     protected final boolean useOriginalMessagePolicy;
 
@@ -68,7 +69,7 @@ public abstract class RedeliveryErrorHan
         boolean sync = true;
         int redeliveryCounter;
         long redeliveryDelay;
-        Predicate retryWhilePredicate;
+        Predicate retryWhilePredicate = retryWhilePolicy;
         boolean redeliverFromSync;
 
         // default behavior which can be overloaded on a per exception basis
@@ -174,7 +175,7 @@ public abstract class RedeliveryErrorHan
 
     public RedeliveryErrorHandler(CamelContext camelContext, Processor output, Logger logger, Processor redeliveryProcessor,
                                   RedeliveryPolicy redeliveryPolicy, Predicate handledPolicy, Processor deadLetter,
-                                  String deadLetterUri, boolean useOriginalMessagePolicy) {
+                                  String deadLetterUri, boolean useOriginalMessagePolicy, Predicate retryWhile) {
         ObjectHelper.notNull(camelContext, "CamelContext", this);
         ObjectHelper.notNull(redeliveryPolicy, "RedeliveryPolicy", this);
 
@@ -188,6 +189,7 @@ public abstract class RedeliveryErrorHan
         this.deadLetterUri = deadLetterUri;
         this.handledPolicy = handledPolicy;
         this.useOriginalMessagePolicy = useOriginalMessagePolicy;
+        this.retryWhilePolicy = retryWhile;
     }
 
     public boolean supportTransacted() {

Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/DefaultErrorHandlerRetryWhileTest.java (from r1023225, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionRetryUntilTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/DefaultErrorHandlerRetryWhileTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/DefaultErrorHandlerRetryWhileTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionRetryUntilTest.java&r1=1023225&r2=1024138&rev=1024138&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionRetryUntilTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/DefaultErrorHandlerRetryWhileTest.java Tue Oct 19 07:02:58 2010
@@ -16,11 +16,8 @@
  */
 package org.apache.camel.processor.onexception;
 
-import org.apache.camel.Body;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExchangeException;
-import org.apache.camel.Header;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.JndiRegistry;
@@ -28,7 +25,7 @@ import org.apache.camel.impl.JndiRegistr
 /**
  * Unit test for the retry until predicate
  */
-public class OnExceptionRetryUntilTest extends ContextTestSupport {
+public class DefaultErrorHandlerRetryWhileTest extends ContextTestSupport {
 
     private static int invoked;
 
@@ -40,51 +37,40 @@ public class OnExceptionRetryUntilTest e
     }
 
     public void testRetryUntil() throws Exception {
-        context.addRoutes(new RouteBuilder() {
+        Object out = template.requestBody("direct:start", "Hello World");
+        assertEquals("Bye World", out);
+        assertEquals(3, invoked);
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                // as its based on a unit test we do not have any delays between and do not log the stack trace
-                errorHandler(deadLetterChannel("mock:error").maximumRedeliveries(1).redeliveryDelay(0).logStackTrace(false));
+                errorHandler(defaultErrorHandler().retryWhile(bean("myRetryHandler")));
 
-                // START SNIPPET: e1
-                // we want to use a predicate for retries so we can determine in our bean
-                // when retry should stop, notice it will overrule the global error handler
-                // where we defined at most 1 redelivery attempt. Here we will continue until
-                // the predicate returns false
-                onException(MyFunctionalException.class)
-                        .retryWhile(bean("myRetryHandler"))
-                        .handled(true)
-                        .transform().constant("Sorry");
-                // END SNIPPET: e1
-
-                from("direct:start").process(new Processor() {
-                    public void process(Exchange exchange) throws Exception {
-                        throw new MyFunctionalException("Sorry you cannot do this");
-                    }
-                });
+                from("direct:start").process(new MyProcessor());
             }
-        });
-
-        Object out = template.requestBody("direct:start", "Hello World");
-        assertEquals("Sorry", out);
-        assertEquals(3, invoked);
+        };
     }
 
-    // START SNIPPET: e2
-    public class MyRetryBean {
+    public static class MyProcessor implements Processor {
 
-        // using bean binding we can bind the information from the exchange to the types we have in our method signature
-        public boolean retry(@Header(Exchange.REDELIVERY_COUNTER) Integer counter, @Body String body, @ExchangeException Exception causedBy) {
-            // NOTE: counter is the redelivery attempt, will start from 1
-            invoked++;
+        public void process(Exchange exchange) throws Exception {
+            if (invoked < 3) {
+                throw new MyFunctionalException("Sorry you cannot do this");
+            }
+            exchange.getIn().setBody("Bye World");
+        }
+    }
 
-            assertEquals("Hello World", body);
-            assertTrue(causedBy instanceof MyFunctionalException);
+    public static class MyRetryBean {
 
-            // we can of course do what ever we want to determine the result but this is a unit test so we end after 3 attempts
-            return counter < 3;
+        public boolean retry() {
+            // force retry forever
+            invoked++;
+            return true;
         }
     }
-    // END SNIPPET: e2
 
 }
\ No newline at end of file

Modified: camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/ErrorHandlerDefinition.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/ErrorHandlerDefinition.java?rev=1024138&r1=1024137&r2=1024138&view=diff
==============================================================================
--- camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/ErrorHandlerDefinition.java (original)
+++ camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/ErrorHandlerDefinition.java Tue Oct 19 07:02:58 2010
@@ -49,6 +49,8 @@ public class ErrorHandlerDefinition exte
     private String transactionManagerRef;
     @XmlAttribute
     private String onRedeliveryRef;
+    @XmlAttribute
+    private String retryWhileRef;
     @XmlElement
     private RedeliveryPolicyDefinition redeliveryPolicy;
 

Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java?rev=1024138&r1=1024137&r2=1024138&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java Tue Oct 19 07:02:58 2010
@@ -49,6 +49,8 @@ public class ErrorHandlerDefinition exte
     private String transactionManagerRef;
     @XmlAttribute
     private String onRedeliveryRef;
+    @XmlAttribute
+    private String retryWhileRef;
     @XmlElement
     private RedeliveryPolicyDefinition redeliveryPolicy;
    

Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.java?rev=1024138&r1=1024137&r2=1024138&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.java Tue Oct 19 07:02:58 2010
@@ -56,8 +56,10 @@ public class ErrorHandlerDefinitionParse
             return false;
         }
         return !attributeName.equals("xmlns") && !attributeName.startsWith("xmlns:")
-                && !attributeName.equals("type") && !attributeName.equals("onRedeliveryRef")
-                && !attributeName.equals("transactionTemplateRef") 
+                && !attributeName.equals("type")
+                && !attributeName.equals("onRedeliveryRef")
+                && !attributeName.equals("onRetryWhileRef")
+                && !attributeName.equals("transactionTemplateRef")
                 && !attributeName.equals("transactionManagerRef");
     }
 
@@ -89,7 +91,6 @@ public class ErrorHandlerDefinitionParse
                     }
                 }
             }
-            // deal with onRedeliveryRef
             parserRefAttribute(element, "onRedeliveryRef", "onRedelivery", builder);
         }
         if (type.equals(ErrorHandlerType.TransactionErrorHandler)) {

Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandler.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandler.java?rev=1024138&r1=1024137&r2=1024138&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandler.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandler.java Tue Oct 19 07:02:58 2010
@@ -52,11 +52,12 @@ public class TransactionErrorHandler ext
      * @param handledPolicy           policy for handling failed exception that are moved to the dead letter queue
      * @param exceptionPolicyStrategy strategy for onException handling
      * @param transactionTemplate     the transaction template
+     * @param retryWhile              retry while
      */
     public TransactionErrorHandler(CamelContext camelContext, Processor output, Logger logger, Processor redeliveryProcessor,
-                                   RedeliveryPolicy redeliveryPolicy, Predicate handledPolicy,
-                                   ExceptionPolicyStrategy exceptionPolicyStrategy, TransactionTemplate transactionTemplate) {
-        super(camelContext, output, logger, redeliveryProcessor, redeliveryPolicy, handledPolicy, null, null, false);
+                                   RedeliveryPolicy redeliveryPolicy, Predicate handledPolicy, ExceptionPolicyStrategy exceptionPolicyStrategy,
+                                   TransactionTemplate transactionTemplate, Predicate retryWhile) {
+        super(camelContext, output, logger, redeliveryProcessor, redeliveryPolicy, handledPolicy, null, null, false, retryWhile);
         setExceptionPolicy(exceptionPolicyStrategy);
         this.transactionTemplate = transactionTemplate;
     }

Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerBuilder.java?rev=1024138&r1=1024137&r2=1024138&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerBuilder.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerBuilder.java Tue Oct 19 07:02:58 2010
@@ -112,7 +112,7 @@ public class TransactionErrorHandlerBuil
 
         TransactionErrorHandler answer = new TransactionErrorHandler(routeContext.getCamelContext(), processor,
                 getLogger(), getOnRedelivery(), getRedeliveryPolicy(), getHandledPolicy(),
-                getExceptionPolicyStrategy(), transactionTemplate);
+                getExceptionPolicyStrategy(), transactionTemplate, getRetryWhilePolicy(routeContext.getCamelContext()));
         // configure error handler before we can use it
         configure(answer);
         return answer;

Copied: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDefaultErrorHandlerRetryWhileTest.java (from r1024106, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringShutdownCompleteAllTasksTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDefaultErrorHandlerRetryWhileTest.java?p2=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDefaultErrorHandlerRetryWhileTest.java&p1=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringShutdownCompleteAllTasksTest.java&r1=1024106&r2=1024138&rev=1024138&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringShutdownCompleteAllTasksTest.java (original)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDefaultErrorHandlerRetryWhileTest.java Tue Oct 19 07:02:58 2010
@@ -17,16 +17,16 @@
 package org.apache.camel.spring.processor;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.processor.ShutdownCompleteAllTasksTest;
+import org.apache.camel.processor.onexception.DefaultErrorHandlerRetryWhileTest;
 
 import static org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
 
 /**
  * @version $Revision$
  */
-public class SpringShutdownCompleteAllTasksTest extends ShutdownCompleteAllTasksTest {
+public class SpringDefaultErrorHandlerRetryWhileTest extends DefaultErrorHandlerRetryWhileTest {
 
     protected CamelContext createCamelContext() throws Exception {
-        return createSpringCamelContext(this, "org/apache/camel/spring/processor/ShutdownCompleteAllTasksTest.xml");
+        return createSpringCamelContext(this, "org/apache/camel/spring/processor/DefaultErrorHandlerRetryWhileTest.xml");
     }
 }
\ No newline at end of file

Propchange: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDefaultErrorHandlerRetryWhileTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDefaultErrorHandlerRetryWhileTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Copied: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/DefaultErrorHandlerRetryWhileTest.xml (from r1024106, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringCustomPredicateTest.xml)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/DefaultErrorHandlerRetryWhileTest.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/DefaultErrorHandlerRetryWhileTest.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringCustomPredicateTest.xml&r1=1024106&r2=1024138&rev=1024138&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringCustomPredicateTest.xml (original)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/DefaultErrorHandlerRetryWhileTest.xml Tue Oct 19 07:02:58 2010
@@ -22,16 +22,19 @@
        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
     ">
 
-    <bean id="myPredicate" class="org.apache.camel.spring.processor.SpringCustomPredicateTest$MyPredicate"/>
+    <bean id="myProcessor" class="org.apache.camel.processor.onexception.DefaultErrorHandlerRetryWhileTest$MyProcessor"/>
+
+    <bean id="myRetryBean" class="org.apache.camel.processor.onexception.DefaultErrorHandlerRetryWhileTest$MyRetryBean"/>
+
+    <!-- use the error handler -->
+    <camelContext errorHandlerRef="eh" xmlns="http://camel.apache.org/schema/spring">
+
+        <!-- use retry while on error handler -->
+        <errorHandler id="eh" retryWhileRef="myRetryBean"/>
 
-    <camelContext xmlns="http://camel.apache.org/schema/spring">
         <route>
             <from uri="direct:start"/>
-            <filter>
-                <method ref="myPredicate"/>
-                <to uri="mock:foo"/>
-            </filter>
-            <to uri="mock:result"/>
+            <process ref="myProcessor"/>
         </route>
     </camelContext>