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>