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 2012/09/06 12:58:51 UTC
svn commit: r1381552 - in /camel/trunk/camel-core/src:
main/java/org/apache/camel/builder/ main/java/org/apache/camel/impl/
main/java/org/apache/camel/processor/ test/java/org/apache/camel/impl/
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());