Author: davsclaus
Date: Fri Apr  8 16:08:30 2011
New Revision: 1090316

URL: http://svn.apache.org/viewvc?rev=1090316&view=rev
Log:
CAMEL-3623: redelivery thread pool can be configured on error handler.

Added:
    
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncDeadLetterChannelExecutorServiceRefTest.java
      - copied, changed from r1090254, 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncDeadLetterChannelTest.java
    
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/async/SpringAsyncDeadLetterChannelExecutorServiceRefTest.java
    
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/async/SpringAsyncDeadLetterChannelExecutorServiceRefTest.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/impl/DefaultExecutorServiceStrategy.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/CamelErrorHandlerFactoryBean.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=1090316&r1=1090315&r2=1090316&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
 Fri Apr  8 16:08:30 2011
@@ -56,7 +56,8 @@ public class DeadLetterChannelBuilder ex
 
         DeadLetterChannel answer = new 
DeadLetterChannel(routeContext.getCamelContext(), processor, getLogger(),
                 getOnRedelivery(), getRedeliveryPolicy(), getHandledPolicy(), 
getExceptionPolicyStrategy(),
-                getFailureProcessor(), getDeadLetterUri(), 
isUseOriginalMessage(), getRetryWhilePolicy(routeContext.getCamelContext()));
+                getFailureProcessor(), getDeadLetterUri(), 
isUseOriginalMessage(),
+                getRetryWhilePolicy(routeContext.getCamelContext()), 
getExecutorServiceRef());
         // 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=1090316&r1=1090315&r2=1090316&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 Apr  8 16:08:30 2011
@@ -52,6 +52,7 @@ public class DefaultErrorHandlerBuilder 
     protected String deadLetterUri;
     protected boolean useOriginalMessage;
     protected boolean asyncDelayedRedelivery;
+    protected String executorServiceRef;
 
     public DefaultErrorHandlerBuilder() {
     }
@@ -59,7 +60,7 @@ public class DefaultErrorHandlerBuilder 
     public Processor createErrorHandler(RouteContext routeContext, Processor 
processor) throws Exception {
         DefaultErrorHandler answer = new 
DefaultErrorHandler(routeContext.getCamelContext(), processor, getLogger(),
                 getOnRedelivery(), getRedeliveryPolicy(), getHandledPolicy(), 
getExceptionPolicyStrategy(),
-                getRetryWhilePolicy(routeContext.getCamelContext()));
+                getRetryWhilePolicy(routeContext.getCamelContext()), 
getExecutorServiceRef());
         // configure error handler before we can use it
         configure(answer);
         return answer;
@@ -165,6 +166,17 @@ public class DefaultErrorHandlerBuilder 
     }
 
     /**
+     * Sets a reference to a thread pool to be used for redelivery.
+     *
+     * @param ref reference to a scheduled thread pool
+     * @return the builder.
+     */
+    public DefaultErrorHandlerBuilder executorServiceRef(String ref) {
+        setExecutorServiceRef(ref);
+        return this;
+    }
+
+    /**
      * Sets whether the exchange should be marked as handled or not.
      *
      * @param handled  handled or not
@@ -452,6 +464,14 @@ public class DefaultErrorHandlerBuilder 
         this.asyncDelayedRedelivery = asyncDelayedRedelivery;
     }
 
+    public String getExecutorServiceRef() {
+        return executorServiceRef;
+    }
+
+    public void setExecutorServiceRef(String executorServiceRef) {
+        this.executorServiceRef = executorServiceRef;
+    }
+
     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/impl/DefaultExecutorServiceStrategy.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceStrategy.java?rev=1090316&r1=1090315&r2=1090316&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceStrategy.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceStrategy.java
 Fri Apr  8 16:08:30 2011
@@ -166,9 +166,12 @@ public class DefaultExecutorServiceStrat
         }
 
         if (answer == null) {
-            ThreadPoolProfile profile = getThreadPoolProfile(name);
+            ThreadPoolProfile profile = 
getThreadPoolProfile(executorServiceRef);
             if (profile != null) {
-                int poolSize = profile.getPoolSize();
+                Integer poolSize = profile.getPoolSize();
+                if (poolSize == null) {
+                    poolSize = getDefaultThreadPoolProfile().getPoolSize();
+                }
                 answer = newScheduledThreadPool(source, name, poolSize);
                 if (answer != null) {
                     LOG.debug("Looking up ScheduledExecutorService with ref: 
{} and found a matching ThreadPoolProfile to create the 
ScheduledExecutorService: {}",

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=1090316&r1=1090315&r2=1090316&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
 Fri Apr  8 16:08:30 2011
@@ -46,11 +46,12 @@ public class DeadLetterChannel extends R
      * @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
+     * @param executorServiceRef        reference to a {@link 
java.util.concurrent.ScheduledExecutorService} to be used for redelivery thread 
pool. Can be <tt>null</tt>.
      */
     public DeadLetterChannel(CamelContext camelContext, Processor output, 
CamelLogger logger, Processor redeliveryProcessor, RedeliveryPolicy 
redeliveryPolicy,
                              Predicate handledPolicy, ExceptionPolicyStrategy 
exceptionPolicyStrategy, Processor deadLetter,
-                             String deadLetterUri, boolean 
useOriginalBodyPolicy, Predicate retryWhile) {
-        super(camelContext, output, logger, redeliveryProcessor, 
redeliveryPolicy, handledPolicy, deadLetter, deadLetterUri, 
useOriginalBodyPolicy, retryWhile);
+                             String deadLetterUri, boolean 
useOriginalBodyPolicy, Predicate retryWhile, String executorServiceRef) {
+        super(camelContext, output, logger, redeliveryProcessor, 
redeliveryPolicy, handledPolicy, deadLetter, deadLetterUri, 
useOriginalBodyPolicy, retryWhile, executorServiceRef);
         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=1090316&r1=1090315&r2=1090316&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
 Fri Apr  8 16:08:30 2011
@@ -40,11 +40,12 @@ public class DefaultErrorHandler extends
      * @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
+     * @param executorServiceRef        reference to a {@link 
java.util.concurrent.ScheduledExecutorService} to be used for redelivery thread 
pool. Can be <tt>null</tt>.
      */
     public DefaultErrorHandler(CamelContext camelContext, Processor output, 
CamelLogger logger, Processor redeliveryProcessor,
                                RedeliveryPolicy redeliveryPolicy, Predicate 
handledPolicy,
-                               ExceptionPolicyStrategy 
exceptionPolicyStrategy, Predicate retryWhile) {
-        super(camelContext, output, logger, redeliveryProcessor, 
redeliveryPolicy, handledPolicy, null, null, false, retryWhile);
+                               ExceptionPolicyStrategy 
exceptionPolicyStrategy, Predicate retryWhile, String executorServiceRef) {
+        super(camelContext, output, logger, redeliveryProcessor, 
redeliveryPolicy, handledPolicy, null, null, false, retryWhile, 
executorServiceRef);
         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=1090316&r1=1090315&r2=1090316&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
 Fri Apr  8 16:08:30 2011
@@ -36,7 +36,7 @@ public class LoggingErrorHandler extends
      * @param exceptionPolicyStrategy strategy for onException handling
      */
     public LoggingErrorHandler(CamelContext camelContext, Processor output, 
CamelLogger logger, ExceptionPolicyStrategy exceptionPolicyStrategy) {
-        super(camelContext, output, logger, null, new RedeliveryPolicy(), 
null, exceptionPolicyStrategy, null);
+        super(camelContext, output, logger, null, new RedeliveryPolicy(), 
null, exceptionPolicyStrategy, null, 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=1090316&r1=1090315&r2=1090316&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 Apr  8 16:08:30 2011
@@ -50,6 +50,7 @@ import org.apache.camel.util.ServiceHelp
 public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport 
implements AsyncProcessor {
 
     private static ScheduledExecutorService executorService;
+    protected final String executorServiceRef;
     protected final CamelContext camelContext;
     protected final Processor deadLetter;
     protected final String deadLetterUri;
@@ -169,7 +170,7 @@ public abstract class RedeliveryErrorHan
 
     public RedeliveryErrorHandler(CamelContext camelContext, Processor output, 
CamelLogger logger, Processor redeliveryProcessor,
                                   RedeliveryPolicy redeliveryPolicy, Predicate 
handledPolicy, Processor deadLetter,
-                                  String deadLetterUri, boolean 
useOriginalMessagePolicy, Predicate retryWhile) {
+                                  String deadLetterUri, boolean 
useOriginalMessagePolicy, Predicate retryWhile, String executorServiceRef) {
         ObjectHelper.notNull(camelContext, "CamelContext", this);
         ObjectHelper.notNull(redeliveryPolicy, "RedeliveryPolicy", this);
 
@@ -184,6 +185,7 @@ public abstract class RedeliveryErrorHan
         this.handledPolicy = handledPolicy;
         this.useOriginalMessagePolicy = useOriginalMessagePolicy;
         this.retryWhilePolicy = retryWhile;
+        this.executorServiceRef = executorServiceRef;
     }
 
     public boolean supportTransacted() {
@@ -825,7 +827,14 @@ public abstract class RedeliveryErrorHan
         // use a shared scheduler
         if (executorService == null || executorService.isShutdown()) {
             // camel context will shutdown the executor when it shutdown so no 
need to shut it down when stopping
-            executorService = 
camelContext.getExecutorServiceStrategy().newScheduledThreadPool(this, 
"ErrorHandlerRedeliveryTask");
+            if (executorServiceRef != null) {
+                executorService = 
camelContext.getExecutorServiceStrategy().lookupScheduled(this, 
"ErrorHandlerRedeliveryTask", executorServiceRef);
+                if (executorService == null) {
+                    throw new IllegalArgumentException("ExecutorServiceRef " + 
executorServiceRef + " not found in registry.");
+                }
+            } else {
+                executorService = 
camelContext.getExecutorServiceStrategy().newScheduledThreadPool(this, 
"ErrorHandlerRedeliveryTask");
+            }
         }
     }
 

Copied: 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncDeadLetterChannelExecutorServiceRefTest.java
 (from r1090254, 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncDeadLetterChannelTest.java)
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncDeadLetterChannelExecutorServiceRefTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncDeadLetterChannelExecutorServiceRefTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncDeadLetterChannelTest.java&r1=1090254&r2=1090316&rev=1090316&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncDeadLetterChannelTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncDeadLetterChannelExecutorServiceRefTest.java
 Fri Apr  8 16:08:30 2011
@@ -20,16 +20,17 @@ import org.apache.camel.CamelExecutionEx
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
-import org.apache.camel.WaitForTaskToComplete;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.impl.ThreadPoolProfileSupport;
+import org.apache.camel.spi.ThreadPoolProfile;
 
 /**
  * Unit test to verify that error handling using async() also works as 
expected.
  *
  * @version 
  */
-public class AsyncDeadLetterChannelTest extends ContextTestSupport {
+public class AsyncDeadLetterChannelExecutorServiceRefTest extends 
ContextTestSupport {
 
     @Override
     public boolean isUseRouteBuilder() {
@@ -40,7 +41,12 @@ public class AsyncDeadLetterChannelTest 
         context.addRoutes(new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                
errorHandler(deadLetterChannel("mock:dead").maximumRedeliveries(2).redeliveryDelay(0).logStackTrace(false).handled(false));
+                ThreadPoolProfile profile = new 
ThreadPoolProfileSupport("myAsyncPool");
+                profile.setPoolSize(5);
+                
context.getExecutorServiceStrategy().registerThreadPoolProfile(profile);
+
+                errorHandler(deadLetterChannel("mock:dead")
+                        
.maximumRedeliveries(2).redeliveryDelay(0).logStackTrace(false).handled(false).executorServiceRef("myAsyncPool"));
 
                 from("direct:in")
                     .threads(2)

Modified: 
camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelErrorHandlerFactoryBean.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelErrorHandlerFactoryBean.java?rev=1090316&r1=1090315&r2=1090316&view=diff
==============================================================================
--- 
camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelErrorHandlerFactoryBean.java
 (original)
+++ 
camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelErrorHandlerFactoryBean.java
 Fri Apr  8 16:08:30 2011
@@ -55,6 +55,8 @@ public class CamelErrorHandlerFactoryBea
     @XmlAttribute
     private String retryWhileRef;
     @XmlAttribute
+    private String executorServiceRef;
+    @XmlAttribute
     private String redeliveryPolicyRef;
     @XmlElement
     private RedeliveryPolicyDefinition redeliveryPolicy;
@@ -86,6 +88,9 @@ public class CamelErrorHandlerFactoryBea
             if (retryWhileRef != null) {
                 handler.setRetryWhileRef(retryWhileRef);
             }
+            if (executorServiceRef != null) {
+                handler.setExecutorServiceRef(executorServiceRef);
+            }
         } else if (errorHandler instanceof LoggingErrorHandlerBuilder) {
             LoggingErrorHandlerBuilder handler = (LoggingErrorHandlerBuilder) 
errorHandler;
             if (level != null) {

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=1090316&r1=1090315&r2=1090316&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
 Fri Apr  8 16:08:30 2011
@@ -55,7 +55,10 @@ public class ErrorHandlerDefinition exte
     private String retryWhileRef;
     @XmlAttribute
     private String redeliveryPolicyRef;
+    @XmlAttribute
+    private String executorServiceRef;
     @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=1090316&r1=1090315&r2=1090316&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
 Fri Apr  8 16:08:30 2011
@@ -145,6 +145,11 @@ public class ErrorHandlerDefinitionParse
             throw new IllegalArgumentException("Attribute redeliveryPolicyRef 
is not supported by error handler type: "
                     + type.name() + ", in error handler with id: " + id);
         }
+        String executorServiceRef = element.getAttribute("executorServiceRef");
+        if (ObjectHelper.isNotEmpty(executorServiceRef) && 
(type.equals(ErrorHandlerType.LoggingErrorHandler) || 
type.equals(ErrorHandlerType.NoErrorHandler))) {
+            throw new IllegalArgumentException("Attribute executorServiceRef 
is not supported by error handler type: "
+                    + type.name() + ", in error handler with id: " + id);
+        }
     }
 
     private void parserRefAttribute(Element element, String attributeName, 
String propertyName, BeanDefinitionBuilder builder) {

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=1090316&r1=1090315&r2=1090316&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
 Fri Apr  8 16:08:30 2011
@@ -54,11 +54,12 @@ public class TransactionErrorHandler ext
      * @param exceptionPolicyStrategy strategy for onException handling
      * @param transactionTemplate     the transaction template
      * @param retryWhile              retry while
+     * @param executorServiceRef      reference to a {@link 
java.util.concurrent.ScheduledExecutorService} to be used for redelivery thread 
pool. Can be <tt>null</tt>.
      */
     public TransactionErrorHandler(CamelContext camelContext, Processor 
output, CamelLogger logger, Processor redeliveryProcessor,
                                    RedeliveryPolicy redeliveryPolicy, 
Predicate handledPolicy, ExceptionPolicyStrategy exceptionPolicyStrategy,
-                                   TransactionTemplate transactionTemplate, 
Predicate retryWhile) {
-        super(camelContext, output, logger, redeliveryProcessor, 
redeliveryPolicy, handledPolicy, null, null, false, retryWhile);
+                                   TransactionTemplate transactionTemplate, 
Predicate retryWhile, String executorServiceRef) {
+        super(camelContext, output, logger, redeliveryProcessor, 
redeliveryPolicy, handledPolicy, null, null, false, retryWhile, 
executorServiceRef);
         setExceptionPolicy(exceptionPolicyStrategy);
         this.transactionTemplate = transactionTemplate;
         this.transactionKey = 
ObjectHelper.getIdentityHashCode(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=1090316&r1=1090315&r2=1090316&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
 Fri Apr  8 16:08:30 2011
@@ -112,7 +112,7 @@ public class TransactionErrorHandlerBuil
 
         TransactionErrorHandler answer = new 
TransactionErrorHandler(routeContext.getCamelContext(), processor,
                 getLogger(), getOnRedelivery(), getRedeliveryPolicy(), 
getHandledPolicy(),
-                getExceptionPolicyStrategy(), transactionTemplate, 
getRetryWhilePolicy(routeContext.getCamelContext()));
+                getExceptionPolicyStrategy(), transactionTemplate, 
getRetryWhilePolicy(routeContext.getCamelContext()), getExecutorServiceRef());
         // configure error handler before we can use it
         configure(answer);
         return answer;

Added: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/async/SpringAsyncDeadLetterChannelExecutorServiceRefTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/async/SpringAsyncDeadLetterChannelExecutorServiceRefTest.java?rev=1090316&view=auto
==============================================================================
--- 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/async/SpringAsyncDeadLetterChannelExecutorServiceRefTest.java
 (added)
+++ 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/async/SpringAsyncDeadLetterChannelExecutorServiceRefTest.java
 Fri Apr  8 16:08:30 2011
@@ -0,0 +1,45 @@
+/**
+ * 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.spring.processor.async;
+
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.spring.SpringTestSupport;
+import org.springframework.context.support.AbstractXmlApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+/**
+ *
+ */
+public class SpringAsyncDeadLetterChannelExecutorServiceRefTest extends 
SpringTestSupport {
+
+    @Override
+    protected AbstractXmlApplicationContext createApplicationContext() {
+        return new 
ClassPathXmlApplicationContext("org/apache/camel/spring/processor/async/SpringAsyncDeadLetterChannelExecutorServiceRefTest.xml");
+    }
+
+    public void testAsyncDLCExecutorServiceRefTest() throws Exception {
+        getMockEndpoint("mock:foo").expectedBodiesReceived("Hello World");
+
+        MockEndpoint mock = getMockEndpoint("mock:dead");
+        mock.expectedMessageCount(1);
+
+        template.sendBody("direct:in", "Hello World");
+
+        assertMockEndpointsSatisfied();
+    }
+
+}

Added: 
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/async/SpringAsyncDeadLetterChannelExecutorServiceRefTest.xml
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/async/SpringAsyncDeadLetterChannelExecutorServiceRefTest.xml?rev=1090316&view=auto
==============================================================================
--- 
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/async/SpringAsyncDeadLetterChannelExecutorServiceRefTest.xml
 (added)
+++ 
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/async/SpringAsyncDeadLetterChannelExecutorServiceRefTest.xml
 Fri Apr  8 16:08:30 2011
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans";
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://camel.apache.org/schema/spring 
http://camel.apache.org/schema/spring/camel-spring.xsd
+    ">
+
+    <camelContext xmlns="http://camel.apache.org/schema/spring";>
+
+        <errorHandler id="dlc" type="DeadLetterChannel" 
deadLetterUri="mock:dead" executorServiceRef="myAsyncPool">
+            <redeliveryPolicy maximumRedeliveries="2" redeliveryDelay="0" 
logStackTrace="false" asyncDelayedRedelivery="true"/>
+        </errorHandler>
+
+        <threadPoolProfile id="myAsyncPool" poolSize="5"/>
+
+        <route errorHandlerRef="dlc">
+            <from uri="direct:in"/>
+            <threads poolSize="2">
+                <to uri="mock:foo"/>
+                <throwException ref="damn"/>
+            </threads>
+        </route>
+
+    </camelContext>
+
+    <bean id="damn" class="java.lang.IllegalArgumentException">
+        <constructor-arg index="0" value="Forced by unit test"/>
+    </bean>
+
+</beans>


Reply via email to