I tried to use DeadLetterChannel to add some redelivery delay when some exception occured. The problem I have now is if transaction is not used, the dlc works fine. But if in a transaction, the dlc just seems not work. I use ActiveMQ as the datasource and spring for transaction support. Can somebody tell me whether DLC can work in transactions? Here are my source files, Thanks.
[[aplicationContext.xml]] <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camel="http://activemq.apache.org/camel/schema/spring" xmlns:amq="http://activemq.apache.org/schema/core" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://activemq.apache.org/camel/schema/spring http://activemq.apache.org/camel/schema/spring/camel-spring.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> <camel:camelContext id="camel" /> <bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration"> <property name="connectionFactory" ref="jmsConnectionFactory" /> <property name="transactionManager" ref="jmsTransactionManager" /> <property name="transacted" value="true" /> </bean> <bean id="activemq" class="org.apache.camel.component.jms.JmsComponent"> <property name="configuration" ref="jmsConfig" /> </bean> <bean id="PROPAGATION_REQUIRED" class="org.springframework.transaction.support.TransactionTemplate"> <property name="transactionManager" ref="jmsTransactionManager" /> </bean> <bean id="PROPAGATION_NOT_SUPPORTED" class="org.springframework.transaction.support.TransactionTemplate"> <property name="transactionManager" ref="jmsTransactionManager"/> <property name="propagationBehaviorName" value="PROPAGATION_NOT_SUPPORTED"/> </bean> <bean id="PROPAGATION_REQUIRES_NEW" class="org.springframework.transaction.support.TransactionTemplate"> <property name="transactionManager" ref="jmsTransactionManager"/> <property name="propagationBehaviorName" value="PROPAGATION_REQUIRES_NEW"/> </bean> <bean id="jmsTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager"> <property name="connectionFactory" ref="jmsConnectionFactory" /> </bean> <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory" depends-on="broker"> <property name="brokerURL" value="tcp://localhost:61616" /> </bean> <bean id="broker" class="org.apache.activemq.xbean.BrokerFactoryBean"> <property name="config" value="/activemq.xml" /> </bean> </beans> [[Main.java]] package com.abc.actxii; import org.apache.camel.CamelContext; import org.apache.camel.CamelTemplate; import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.apache.camel.spi.Policy; import org.apache.camel.spring.SpringCamelContext; import org.apache.camel.spring.SpringRouteBuilder; import org.apache.camel.spring.spi.SpringTransactionPolicy; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.transaction.support.TransactionTemplate; public class Main { private static ApplicationContext springContext; private static CamelContext camelContext; private static CamelTemplate camelTemplate; public static void main(String[] args) throws Exception { springContext = new ClassPathXmlApplicationContext("applicationContext.xml"); camelContext = getCamelContext(springContext); camelTemplate = getCamelTemplate(camelContext); camelContext.addRoutes(new SpringRouteBuilder() { @Override public void configure() throws Exception { Policy required = new SpringTransactionPolicy(bean(TransactionTemplate.class, "PROPAGATION_REQUIRED")); from("activemq:com.abc.actxii.dest") .errorHandler(deadLetterChannel("file://failure").maximumRedeliveries(5).initialRedeliveryDelay(2500).maximumRedeliveryDelay(30000)) .policy(required) .process(new Processor() { public void process(Exchange exchange) throws Exception { System.out.println("message = " + exchange.getIn().getBody().toString() + ", " + System.currentTimeMillis() ); throw new Exception("test"); } }).to("file://success"); } }); camelTemplate.sendBody("activemq:com.stubhub.actxii.dest", "Hello World"); } private static CamelTemplate getCamelTemplate(CamelContext camelContext) { return new CamelTemplate(camelContext); } private static SpringCamelContext getCamelContext( ApplicationContext springContext) { return (SpringCamelContext)springContext.getBean("camel"); } } -- View this message in context: http://www.nabble.com/Can-DeadLetterChannel-be-used-in-Transaction--tp19385266s22882p19385266.html Sent from the Camel - Users mailing list archive at Nabble.com.