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/

Reply via email to