The Apache wiki page is a bit mixed. I suggest you can take a look at the transaction guide at fusesource for Camel http://fusesource.com/docs/router/2.5/transactions/index.html
And there is a free excerpt of chapter 9 which covers transactions with Camel from the Camel in Action book. http://fusesource.com/fuse/apache-books/ On Wed, Feb 16, 2011 at 1:58 PM, Tom Howe <[email protected]> wrote: > Hi, I'm new to Camel and I am trying to create a simple app that consumes > messages from an ActiveMQ queue and forwards them to a TCP port (splunk). If > the TCP connection is down I want the message left on the queue and retried > with expontential backoff. > > I've been trying to understand the TransactionClient page but I find that > whatever I try, if I raise an exception or I give it an invalid destination, > camel retries to send 5 times and then then gives up and removes the message > from the queue. > > I have a simple app that creates a SpringCamelContext as follows: > > ApplicationContext applicationContext = new > ClassPathXmlApplicationContext("appContext.xml"); > > SpringCamelContext context = new > SpringCamelContext(applicationContext); > > and adds a Route: > > context.addRoutes(new MyRoute()); > context.start(); > > > The route looks like this.. > > class MyRoute extends SpringRouteBuilder { > > @Override > public void configure() throws Exception { > // errorHandler(deadLetterChannel("activemq:error")); > > SpringTransactionPolicy required = lookup("PROPAGATION_REQUIRED", > SpringTransactionPolicy.class); > > errorHandler( > transactionErrorHandler(required) > .backOffMultiplier(5) > .maximumRedeliveries(100) > .useExponentialBackOff() > ); > > from("activemq-tom:queue:ispy?transacted=true") > .transacted("PROPAGATION_REQUIRED") > .policy(required) > .process(new Processor() { > > @Override > public void process(Exchange exchange) throws Exception > { > Message in = exchange.getIn(); > log.info("Message in: " + in); > throw new Exception("blah"); > } > }) > .to("mina:tcp://localhost:9999"); > } > } > > > My spring context contains: > > > <bean id="activemq-tom" > class="org.apache.activemq.camel.component.ActiveMQComponent"> > <property name="transacted" value="true"/> > <property name="configuration" ref="myConfigDelivery"/> > </bean> > > > <bean id="myConfigDelivery" > class="org.apache.camel.component.jms.JmsConfiguration"> > <property name="connectionFactory" > ref="jmsCachingConnectionFactoryDelivery"/> > <property name="transactionManager" > ref="jmsTransactionManagerDelivery"/> > <property name="concurrentConsumers" value="1"/> > <property name="maxConcurrentConsumers" value="1"/> > <property name="transacted" value="true"/> > </bean> > > <bean id="jmsTransactionManagerDelivery" > class="org.springframework.jms.connection.JmsTransactionManager"> > <property name="connectionFactory" > ref="jmsCachingConnectionFactoryDelivery"/> > </bean> > > > <bean id="jmsCachingConnectionFactoryDelivery" > class="org.springframework.jms.connection.SingleConnectionFactory"> > <property name="targetConnectionFactory" > ref="jmsConnectionFactoryDelivery"/> > </bean> > > <bean id="jmsConnectionFactoryDelivery" > class="org.apache.activemq.ActiveMQConnectionFactory"> > <property name="brokerURL" value="tcp://localhost:61616"/> > <!--<property name="redeliveryPolicy" > ref="redeliveryPolicyDelivery"/>--> > </bean> > > <bean id="redeliveryPolicyDelivery" > class="org.apache.activemq.RedeliveryPolicy"> > <property name="maximumRedeliveries" value="100"/> > <property name="useExponentialBackOff" value="true"/> > <property name="backOffMultiplier" value="10"/> > <property name="initialRedeliveryDelay" value="10000"/> > </bean> > > <!-- policy for required transaction used in our Camel routes --> > <bean id="PROPAGATION_REQUIRED" > class="org.apache.camel.spring.spi.SpringTransactionPolicy"> > <property name="transactionManager" > ref="jmsTransactionManagerDelivery"/> > <property name="propagationBehaviorName" > value="PROPAGATION_REQUIRED"/> > </bean> > > > I'm using the following dependencies: > > <dependency> > <groupId>org.springframework</groupId> > <artifactId>spring-core</artifactId> > <version>${org.springframework.version}</version> > <exclusions> > <exclusion> > <groupId>commons-logging</groupId> > <artifactId>commons-logging</artifactId> > </exclusion> > </exclusions> > </dependency> > > <dependency> > <groupId>org.springframework</groupId> > <artifactId>spring-context</artifactId> > <version>${org.springframework.version}</version> > </dependency> > > <dependency> > <groupId>org.springframework</groupId> > <artifactId>spring-context-support</artifactId> > <version>${org.springframework.version}</version> > </dependency> > > <dependency> > <groupId>org.springframework</groupId> > <artifactId>spring-tx</artifactId> > <version>${org.springframework.version}</version> > </dependency> > > <dependency> > <groupId>commons-lang</groupId> > <artifactId>commons-lang</artifactId> > <version>2.5</version> > </dependency> > > <dependency> > <groupId>org.apache.camel</groupId> > <artifactId>camel-spring</artifactId> > <version>2.5.0</version> > </dependency> > > <dependency> > <groupId>org.apache.camel</groupId> > <artifactId>camel-core</artifactId> > <version>2.5.0</version> > </dependency> > > > <dependency> > <groupId>org.apache.camel</groupId> > <artifactId>camel-jms</artifactId> > <version>2.5.0</version> > </dependency> > > <dependency> > <groupId>org.apache.camel</groupId> > <artifactId>camel-http</artifactId> > <version>2.5.0</version> > </dependency> > > <dependency> > <groupId>org.apache.camel</groupId> > <artifactId>camel-restlet</artifactId> > <version>2.5.0</version> > </dependency> > > <dependency> > <groupId>org.apache.camel</groupId> > <artifactId>camel-mina</artifactId> > <version>2.5.0</version> > </dependency> > > > <dependency> > <groupId>org.apache.activemq</groupId> > <artifactId>activemq-core</artifactId> > <version>5.2.0</version> > </dependency> > > <dependency> > <groupId>org.apache.activemq</groupId> > <artifactId>activemq-camel</artifactId> > <version>5.2.0</version> > </dependency> > > > Any help appreciated. > > Many thanks, Tom > -- Claus Ibsen ----------------- FuseSource Email: [email protected] Web: http://fusesource.com Twitter: davsclaus Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/
