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());