Author: davsclaus Date: Sat Jun 16 11:42:14 2012 New Revision: 1350910 URL: http://svn.apache.org/viewvc?rev=1350910&view=rev Log: CAMEL-5372: Fixed issue with error handler thread pool for redelivery should be per camel context.
Added: camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/issues/RedeliveryErrorHandlerAsyncDelayedTwoCamelContextIssueTest.java - copied unchanged from r1350909, camel/trunk/camel-core/src/test/java/org/apache/camel/issues/RedeliveryErrorHandlerAsyncDelayedTwoCamelContextIssueTest.java Modified: camel/branches/camel-2.9.x/ (props changed) camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/CamelContext.java camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/builder/DefaultErrorHandlerBuilder.java camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/DefaultErrorHandler.java camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandler.java camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerBuilder.java Propchange: camel/branches/camel-2.9.x/ ------------------------------------------------------------------------------ Merged /camel/trunk:r1350909 Propchange: camel/branches/camel-2.9.x/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/CamelContext.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/CamelContext.java?rev=1350910&r1=1350909&r2=1350910&view=diff ============================================================================== --- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/CamelContext.java (original) +++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/CamelContext.java Sat Jun 16 11:42:14 2012 @@ -20,6 +20,7 @@ import java.io.InputStream; import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import org.apache.camel.builder.ErrorHandlerBuilder; @@ -755,6 +756,12 @@ public interface CamelContext extends Su void setErrorHandlerBuilder(ErrorHandlerFactory errorHandlerBuilder); /** + * Gets the default shared thread pool for error handlers which + * leverages this for asynchronous redelivery tasks. + */ + ScheduledExecutorService getErrorHandlerExecutorService(); + + /** * Sets the data formats that can be referenced in the routes. * * @param dataFormats the data formats Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java?rev=1350910&r1=1350909&r2=1350910&view=diff ============================================================================== --- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java (original) +++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java Sat Jun 16 11:42:14 2012 @@ -55,7 +55,7 @@ public class DeadLetterChannelBuilder ex DeadLetterChannel answer = new DeadLetterChannel(routeContext.getCamelContext(), processor, getLogger(), getOnRedelivery(), getRedeliveryPolicy(), getExceptionPolicyStrategy(), getFailureProcessor(), getDeadLetterUri(), isUseOriginalMessage(), - getRetryWhilePolicy(routeContext.getCamelContext()), getExecutorServiceRef()); + getRetryWhilePolicy(routeContext.getCamelContext()), getExecutorService(routeContext.getCamelContext())); // configure error handler before we can use it configure(routeContext, answer); return answer; Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/builder/DefaultErrorHandlerBuilder.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/builder/DefaultErrorHandlerBuilder.java?rev=1350910&r1=1350909&r2=1350910&view=diff ============================================================================== --- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/builder/DefaultErrorHandlerBuilder.java (original) +++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/builder/DefaultErrorHandlerBuilder.java Sat Jun 16 11:42:14 2012 @@ -16,6 +16,8 @@ */ package org.apache.camel.builder; +import java.util.concurrent.ScheduledExecutorService; + import org.apache.camel.CamelContext; import org.apache.camel.Endpoint; import org.apache.camel.Expression; @@ -24,8 +26,10 @@ import org.apache.camel.Predicate; import org.apache.camel.Processor; import org.apache.camel.processor.DefaultErrorHandler; import org.apache.camel.processor.RedeliveryPolicy; +import org.apache.camel.spi.ExecutorServiceManager; import org.apache.camel.spi.Language; import org.apache.camel.spi.RouteContext; +import org.apache.camel.spi.ThreadPoolProfile; import org.apache.camel.util.CamelLogger; import org.apache.camel.util.ExpressionToPredicateAdapter; import org.slf4j.LoggerFactory; @@ -48,13 +52,14 @@ public class DefaultErrorHandlerBuilder protected boolean useOriginalMessage; protected boolean asyncDelayedRedelivery; protected String executorServiceRef; + protected ScheduledExecutorService executorService; public DefaultErrorHandlerBuilder() { } public Processor createErrorHandler(RouteContext routeContext, Processor processor) throws Exception { DefaultErrorHandler answer = new DefaultErrorHandler(routeContext.getCamelContext(), processor, getLogger(), getOnRedelivery(), - getRedeliveryPolicy(), getExceptionPolicyStrategy(), getRetryWhilePolicy(routeContext.getCamelContext()), getExecutorServiceRef()); + getRedeliveryPolicy(), getExceptionPolicyStrategy(), getRetryWhilePolicy(routeContext.getCamelContext()), getExecutorService(routeContext.getCamelContext())); // configure error handler before we can use it configure(routeContext, answer); return answer; @@ -64,7 +69,6 @@ public class DefaultErrorHandlerBuilder return false; } - // Builder methods // ------------------------------------------------------------------------- public DefaultErrorHandlerBuilder backOffMultiplier(double backOffMultiplier) { @@ -401,6 +405,27 @@ public class DefaultErrorHandlerBuilder return new CamelLogger(LoggerFactory.getLogger(DefaultErrorHandler.class), LoggingLevel.ERROR); } + protected synchronized ScheduledExecutorService getExecutorService(CamelContext camelContext) { + if (executorService == null || executorService.isShutdown()) { + // camel context will shutdown the executor when it shutdown so no need to shut it down when stopping + if (executorServiceRef != null) { + executorService = camelContext.getRegistry().lookup(executorServiceRef, ScheduledExecutorService.class); + if (executorService == null) { + ExecutorServiceManager manager = camelContext.getExecutorServiceManager(); + ThreadPoolProfile profile = manager.getThreadPoolProfile(executorServiceRef); + executorService = manager.newScheduledThreadPool(this, executorServiceRef, profile); + } + if (executorService == null) { + throw new IllegalArgumentException("ExecutorServiceRef " + executorServiceRef + " not found in registry."); + } + } else { + // use default shared thread pool for error handlers + executorService = camelContext.getErrorHandlerExecutorService(); + } + } + return executorService; + } + @Override public String toString() { return "DefaultErrorHandlerBuilder"; Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=1350910&r1=1350909&r2=1350910&view=diff ============================================================================== --- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original) +++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Sat Jun 16 11:42:14 2012 @@ -31,6 +31,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; +import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; @@ -111,6 +112,7 @@ import org.apache.camel.spi.RouteContext import org.apache.camel.spi.RouteStartupOrder; import org.apache.camel.spi.ServicePool; import org.apache.camel.spi.ShutdownStrategy; +import org.apache.camel.spi.ThreadPoolProfile; import org.apache.camel.spi.TypeConverterRegistry; import org.apache.camel.spi.UuidGenerator; import org.apache.camel.support.ServiceSupport; @@ -173,6 +175,7 @@ public class DefaultCamelContext extends private Boolean useBreadcrumb = Boolean.TRUE; private Long delay; private ErrorHandlerFactory errorHandlerBuilder; + private ScheduledExecutorService errorHandlerExecutorService; private Map<String, DataFormatDefinition> dataFormats = new HashMap<String, DataFormatDefinition>(); private DataFormatResolver dataFormatResolver = new DefaultDataFormatResolver(); private Map<String, String> properties = new HashMap<String, String>(); @@ -1254,6 +1257,10 @@ public class DefaultCamelContext extends this.errorHandlerBuilder = errorHandlerBuilder; } + public ScheduledExecutorService getErrorHandlerExecutorService() { + return errorHandlerExecutorService; + } + public void setProducerServicePool(ServicePool<Endpoint, Producer> producerServicePool) { this.producerServicePool = producerServicePool; } @@ -1513,6 +1520,11 @@ public class DefaultCamelContext extends startServices(components.values()); + // setup default thread pool for error handler + if (errorHandlerExecutorService == null || errorHandlerExecutorService.isShutdown()) { + errorHandlerExecutorService = getExecutorServiceManager().newDefaultScheduledThreadPool(this, "ErrorHandlerRedeliveryTask"); + } + // start the route definitions before the routes is started startRouteDefinitions(routeDefinitions); Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java?rev=1350910&r1=1350909&r2=1350910&view=diff ============================================================================== --- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java (original) +++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java Sat Jun 16 11:42:14 2012 @@ -16,6 +16,8 @@ */ package org.apache.camel.processor; +import java.util.concurrent.ScheduledExecutorService; + import org.apache.camel.CamelContext; import org.apache.camel.Exchange; import org.apache.camel.Predicate; @@ -48,12 +50,13 @@ 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>. + * @param executorService the {@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, - ExceptionPolicyStrategy exceptionPolicyStrategy, Processor deadLetter, String deadLetterUri, boolean useOriginalBodyPolicy, Predicate retryWhile, String executorServiceRef) { + ExceptionPolicyStrategy exceptionPolicyStrategy, Processor deadLetter, String deadLetterUri, boolean useOriginalBodyPolicy, Predicate retryWhile, + ScheduledExecutorService executorService) { - super(camelContext, output, logger, redeliveryProcessor, redeliveryPolicy, deadLetter, deadLetterUri, useOriginalBodyPolicy, retryWhile, executorServiceRef); + super(camelContext, output, logger, redeliveryProcessor, redeliveryPolicy, deadLetter, deadLetterUri, useOriginalBodyPolicy, retryWhile, executorService); setExceptionPolicy(exceptionPolicyStrategy); } Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/DefaultErrorHandler.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/DefaultErrorHandler.java?rev=1350910&r1=1350909&r2=1350910&view=diff ============================================================================== --- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/DefaultErrorHandler.java (original) +++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/DefaultErrorHandler.java Sat Jun 16 11:42:14 2012 @@ -16,6 +16,8 @@ */ package org.apache.camel.processor; +import java.util.concurrent.ScheduledExecutorService; + import org.apache.camel.CamelContext; import org.apache.camel.Exchange; import org.apache.camel.Predicate; @@ -40,12 +42,12 @@ public class DefaultErrorHandler extends * @param redeliveryPolicy policy for redelivery * @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>. + * @param executorService the {@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, ExceptionPolicyStrategy exceptionPolicyStrategy, Predicate retryWhile, String executorServiceRef) { + RedeliveryPolicy redeliveryPolicy, ExceptionPolicyStrategy exceptionPolicyStrategy, Predicate retryWhile, ScheduledExecutorService executorService) { - super(camelContext, output, logger, redeliveryProcessor, redeliveryPolicy, null, null, false, retryWhile, executorServiceRef); + super(camelContext, output, logger, redeliveryProcessor, redeliveryPolicy, null, null, false, retryWhile, executorService); setExceptionPolicy(exceptionPolicyStrategy); } Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java?rev=1350910&r1=1350909&r2=1350910&view=diff ============================================================================== --- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java (original) +++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java Sat Jun 16 11:42:14 2012 @@ -30,9 +30,7 @@ import org.apache.camel.Message; import org.apache.camel.Predicate; import org.apache.camel.Processor; import org.apache.camel.model.OnExceptionDefinition; -import org.apache.camel.spi.ExecutorServiceManager; import org.apache.camel.spi.SubUnitOfWorkCallback; -import org.apache.camel.spi.ThreadPoolProfile; import org.apache.camel.spi.UnitOfWork; import org.apache.camel.util.AsyncProcessorConverterHelper; import org.apache.camel.util.AsyncProcessorHelper; @@ -55,8 +53,7 @@ import org.apache.camel.util.ServiceHelp */ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport implements AsyncProcessor { - private static ScheduledExecutorService executorService; - protected final String executorServiceRef; + protected ScheduledExecutorService executorService; protected final CamelContext camelContext; protected final Processor deadLetter; protected final String deadLetterUri; @@ -179,7 +176,7 @@ public abstract class RedeliveryErrorHan public RedeliveryErrorHandler(CamelContext camelContext, Processor output, CamelLogger logger, Processor redeliveryProcessor, RedeliveryPolicy redeliveryPolicy, Processor deadLetter, - String deadLetterUri, boolean useOriginalMessagePolicy, Predicate retryWhile, String executorServiceRef) { + String deadLetterUri, boolean useOriginalMessagePolicy, Predicate retryWhile, ScheduledExecutorService executorService) { ObjectHelper.notNull(camelContext, "CamelContext", this); ObjectHelper.notNull(redeliveryPolicy, "RedeliveryPolicy", this); @@ -194,7 +191,7 @@ public abstract class RedeliveryErrorHan this.deadLetterUri = deadLetterUri; this.useOriginalMessagePolicy = useOriginalMessagePolicy; this.retryWhilePolicy = retryWhile; - this.executorServiceRef = executorServiceRef; + this.executorService = executorService; } public boolean supportTransacted() { @@ -601,7 +598,7 @@ public abstract class RedeliveryErrorHan // clear rollback flags exchange.setProperty(Exchange.ROLLBACK_ONLY, null); - // TODO: We may want to store these as state on RedelieryData so we keep them in case end user messes with Exchange + // TODO: We may want to store these as state on RedeliveryData so we keep them in case end user messes with Exchange // and then put these on the exchange when doing a redelivery / fault processor // preserve these headers @@ -1050,23 +1047,10 @@ public abstract class RedeliveryErrorHan @Override protected void doStart() throws Exception { ServiceHelper.startServices(output, outputAsync, deadLetter); - // 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 - if (executorServiceRef != null) { - executorService = camelContext.getRegistry().lookup(executorServiceRef, ScheduledExecutorService.class); - if (executorService == null) { - ExecutorServiceManager manager = camelContext.getExecutorServiceManager(); - ThreadPoolProfile profile = manager.getThreadPoolProfile(executorServiceRef); - executorService = manager.newScheduledThreadPool(this, executorServiceRef, profile); - } - if (executorService == null) { - throw new IllegalArgumentException("ExecutorServiceRef " + executorServiceRef + " not found in registry."); - } - } else { - // create a default scheduled thread pool - executorService = camelContext.getExecutorServiceManager().newDefaultScheduledThreadPool(this, "ErrorHandlerRedeliveryTask"); - } + + if (executorService == null) { + // use default shared executor service + executorService = camelContext.getErrorHandlerExecutorService(); } // determine if redeliver is enabled or not Modified: camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java?rev=1350910&r1=1350909&r2=1350910&view=diff ============================================================================== --- camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java (original) +++ camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java Sat Jun 16 11:42:14 2012 @@ -50,9 +50,10 @@ public class MultipleLifecycleStrategyTe context.removeComponent("log"); context.stop(); - List<String> expectedEvents = Arrays.asList("onThreadPoolAdd", "onContextStart", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", - "onServiceAdd", "onServiceAdd", "onComponentAdd", "onEndpointAdd", "onComponentRemove", "onThreadPoolAdd", "onContextStop"); - + List<String> expectedEvents = Arrays.asList("onThreadPoolAdd", "onContextStart", "onServiceAdd", "onServiceAdd", "onServiceAdd", + "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onThreadPoolAdd", "onComponentAdd", "onEndpointAdd", + "onComponentRemove", "onThreadPoolAdd", "onContextStop"); + assertEquals(expectedEvents, dummy1.getEvents()); assertEquals(expectedEvents, dummy2.getEvents()); } Modified: camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandler.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandler.java?rev=1350910&r1=1350909&r2=1350910&view=diff ============================================================================== --- camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandler.java (original) +++ camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandler.java Sat Jun 16 11:42:14 2012 @@ -16,6 +16,8 @@ */ package org.apache.camel.spring.spi; +import java.util.concurrent.ScheduledExecutorService; + import org.apache.camel.AsyncCallback; import org.apache.camel.CamelContext; import org.apache.camel.Exchange; @@ -56,15 +58,15 @@ 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>. + * @param executorService the {@link java.util.concurrent.ScheduledExecutorService} to be used for redelivery thread pool. Can be <tt>null</tt>. * @param rollbackLoggingLevel logging level to use for logging transaction rollback occurred */ public TransactionErrorHandler(CamelContext camelContext, Processor output, CamelLogger logger, Processor redeliveryProcessor, RedeliveryPolicy redeliveryPolicy, ExceptionPolicyStrategy exceptionPolicyStrategy, - TransactionTemplate transactionTemplate, Predicate retryWhile, String executorServiceRef, + TransactionTemplate transactionTemplate, Predicate retryWhile, ScheduledExecutorService executorService, LoggingLevel rollbackLoggingLevel) { - super(camelContext, output, logger, redeliveryProcessor, redeliveryPolicy, null, null, false, retryWhile, executorServiceRef); + super(camelContext, output, logger, redeliveryProcessor, redeliveryPolicy, null, null, false, retryWhile, executorService); setExceptionPolicy(exceptionPolicyStrategy); this.transactionTemplate = transactionTemplate; this.rollbackLoggingLevel = rollbackLoggingLevel; Modified: camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerBuilder.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerBuilder.java?rev=1350910&r1=1350909&r2=1350910&view=diff ============================================================================== --- camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerBuilder.java (original) +++ camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerBuilder.java Sat Jun 16 11:42:14 2012 @@ -109,7 +109,7 @@ public class TransactionErrorHandlerBuil TransactionErrorHandler answer = new TransactionErrorHandler(routeContext.getCamelContext(), processor, getLogger(), getOnRedelivery(), getRedeliveryPolicy(), getExceptionPolicyStrategy(), transactionTemplate, - getRetryWhilePolicy(routeContext.getCamelContext()), getExecutorServiceRef(), getRollbackLoggingLevel()); + getRetryWhilePolicy(routeContext.getCamelContext()), getExecutorService(routeContext.getCamelContext()), getRollbackLoggingLevel()); // configure error handler before we can use it configure(routeContext, answer); return answer;