Author: davsclaus
Date: Thu Sep  6 10:58:51 2012
New Revision: 1381552

URL: http://svn.apache.org/viewvc?rev=1381552&view=rev
Log:
CAMEL-5573: Redelivery error handler only need thread pool if redelivery is 
enabeled.

Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DefaultErrorHandlerBuilder.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java

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=1381552&r1=1381551&r2=1381552&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
 Thu Sep  6 10:58:51 2012
@@ -419,8 +419,9 @@ public class DefaultErrorHandlerBuilder 
                     throw new IllegalArgumentException("ExecutorServiceRef " + 
executorServiceRef + " not found in registry.");
                 }
             } else {
-                // use default shared thread pool for error handlers
-                executorService = 
camelContext.getErrorHandlerExecutorService();
+                // no explicit configured thread pool, so leave it up to the 
error handler to deceide if it need
+                // a default thread pool from 
CamelContext#getErrorHandlerExecutorService
+                executorService = null;
             }
         }
         return executorService;

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=1381552&r1=1381551&r2=1381552&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
 Thu Sep  6 10:58:51 2012
@@ -1279,7 +1279,11 @@ public class DefaultCamelContext extends
         this.errorHandlerBuilder = errorHandlerBuilder;
     }
 
-    public ScheduledExecutorService getErrorHandlerExecutorService() {
+    public synchronized ScheduledExecutorService 
getErrorHandlerExecutorService() {
+        if (errorHandlerExecutorService == null) {
+            // setup default thread pool for error handler
+            errorHandlerExecutorService = 
getExecutorServiceManager().newDefaultScheduledThreadPool("ErrorHandlerRedeliveryThreadPool",
 "ErrorHandlerRedeliveryTask");
+        }
         return errorHandlerExecutorService;
     }
 
@@ -1562,11 +1566,6 @@ public class DefaultCamelContext extends
         // start components
         startServices(components.values());
 
-        // setup default thread pool for error handler
-        if (errorHandlerExecutorService == null || 
errorHandlerExecutorService.isShutdown()) {
-            errorHandlerExecutorService = 
getExecutorServiceManager().newDefaultScheduledThreadPool("ErrorHandlerRedeliveryThreadPool",
 "ErrorHandlerRedeliveryTask");
-        }
-
         // start the route definitions before the routes is started
         startRouteDefinitions(routeDefinitions);
 

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=1381552&r1=1381551&r2=1381552&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
 Thu Sep  6 10:58:51 2012
@@ -283,6 +283,10 @@ public abstract class RedeliveryErrorHan
                     // okay there is a delay so create a scheduled task to 
have it executed in the future
 
                     if 
(data.currentRedeliveryPolicy.isAsyncDelayedRedelivery() && 
!exchange.isTransacted()) {
+
+                        // we are doing a redelivery then a thread pool must 
be configured (see the doStart method)
+                        ObjectHelper.notNull(executorService, "Redelivery is 
enabled but ExecutorService has not been configured.", this);
+
                         // let the RedeliverTask be the logic which tries to 
redeliver the Exchange which we can used a scheduler to
                         // have it being executed in the future, or immediately
                         // we are continuing asynchronously
@@ -442,6 +446,9 @@ public abstract class RedeliveryErrorHan
         }
 
         if (data.redeliveryCounter > 0) {
+            // we are doing a redelivery then a thread pool must be configured 
(see the doStart method)
+            ObjectHelper.notNull(executorService, "Redelivery is enabled but 
ExecutorService has not been configured.", this);
+
             // let the RedeliverTask be the logic which tries to redeliver the 
Exchange which we can used a scheduler to
             // have it being executed in the future, or immediately
             // Note: the data.redeliverFromSync should be kept as is, in case 
it was enabled previously
@@ -1048,16 +1055,22 @@ public abstract class RedeliveryErrorHan
     protected void doStart() throws Exception {
         ServiceHelper.startServices(output, outputAsync, deadLetter);
 
-        if (executorService == null) {
-            // use default shared executor service
-            executorService = camelContext.getErrorHandlerExecutorService();
-        }
-
         // determine if redeliver is enabled or not
         redeliveryEnabled = determineIfRedeliveryIsEnabled();
         if (log.isDebugEnabled()) {
             log.debug("Redelivery enabled: {} on error handler: {}", 
redeliveryEnabled, this);
         }
+
+        // we only need thread pool if redelivery is enabled
+        if (redeliveryEnabled) {
+            if (executorService == null) {
+                // use default shared executor service
+                executorService = 
camelContext.getErrorHandlerExecutorService();
+            }
+            if (log.isTraceEnabled()) {
+                log.trace("Using ExecutorService: {} for redeliveries on error 
handler: {}", executorService, this);
+            }
+        }
     }
 
     @Override

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java?rev=1381552&r1=1381551&r2=1381552&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java
 Thu Sep  6 10:58:51 2012
@@ -51,7 +51,7 @@ public class MultipleLifecycleStrategyTe
         context.stop();
 
         List<String> expectedEvents = Arrays.asList("onContextStart", 
"onServiceAdd", "onServiceAdd", "onServiceAdd",
-                "onServiceAdd", "onServiceAdd", "onServiceAdd", 
"onServiceAdd", "onThreadPoolAdd", "onServiceAdd",
+                "onServiceAdd", "onServiceAdd", "onServiceAdd", 
"onServiceAdd", "onServiceAdd",
                 "onThreadPoolAdd", "onComponentAdd", "onEndpointAdd", 
"onComponentRemove", "onContextStop");
         
         assertEquals(expectedEvents, dummy1.getEvents());


Reply via email to