Hi

Its the message broker that does the external redelivery. Camel
doesn't do it. Camel just log that there was an exception thrown
during routing, and its regarded as exhausted after the very first
delivery attempt (eg no redelivery).

So that triggers a rollback on the TX, which the TX manager handles,
and the message broker, will then know that the message failed, and it
can react according to its redelivery settings.




On Thu, Apr 25, 2013 at 11:01 PM, leroykendall <leroykend...@yahoo.com> wrote:
> Hi Claus,
>
> Thank you for the link to the great page.
> One issue that I've stuck is how to perform JMS redelivery in Camel using
> Spring orchestrated transactions.
> My spring context is:
>
>     <bean id="camelJmsComponent"
> class="org.apache.camel.component.jms.JmsComponent">
>         <property name="transacted" value="true"/>
>         <property name="transactionManager" ref="jmsTransactionManager"/>
>         <property name="concurrentConsumers" value="1"/>
>         <property name="connectionFactory" ref="jmsConnectionFactory"/>
>     </bean>
>
>     <bean id="jmsTransactionManager"
> class="org.springframework.jms.connection.JmsTransactionManager">
>         <property name="connectionFactory" ref="jmsConnectionFactory"/>
>     </bean>
>
>     <bean id="jmsConnectionFactory"
> class="org.apache.activemq.pool.PooledConnectionFactory">
>         <property name="connectionFactory" ref="amqConnectionFactory"/>
>     </bean>
>
>     <bean id="amqConnectionFactory"
> class="org.apache.activemq.ActiveMQConnectionFactory">
>         <property name="brokerURL" value="tcp://localhost:3303"/>
>         <property name="redeliveryPolicy" ref="amqRedeliveryPolicy"/>
>     </bean>
>
>     <bean id="amqRedeliveryPolicy"
> class="org.apache.activemq.RedeliveryPolicy">
>         <property name="useExponentialBackOff" value="true"/>
>         <property name="backOffMultiplier" value="2"/>
>         <property name="initialRedeliveryDelay" value="1000"/>
>         <property name="maximumRedeliveries" value="5"/>
>     </bean>
>
>     <bean id="PROPAGATION_REQUIRED"
>           class="org.apache.camel.spring.spi.SpringTransactionPolicy">
>         <property name="transactionManager" ref="jmsTransactionManager"/>
>     </bean>
>
>     <bean id="illegalArgumentException"
> class="java.lang.IllegalArgumentException"/>
>
>     <bean id="handlerBean" class="com.playtech.ums.tests.JmsHandlerBean"/>
>
>     <camel:camelContext>
>
>         <camel:route>
>             <camel:from uri="jms:queue:test.lab.queue"/>
>             <camel:transacted ref="PROPAGATION_REQUIRED"/>
>             <camel:log message="Redelivered: ${header.JMSRedelivered}"/>
>             <camel:choice>
>                 <camel:when>
>                     <camel:simple>${in.body} contains
> 'exception'</camel:simple>
>                     <camel:log message="Incoming message contains
> 'exception': ${in.body}" loggingLevel="WARN"/>
>                     <camel:throwException ref="illegalArgumentException"/>
>                 </camel:when>
>             </camel:choice>
>             <camel:to uri="handlerBean"/>
>         </camel:route>
>
>     </camel:camelContext>
>
> When I executed this code I've got message "Exhausted after delivery
> attempt: 1" instead of "exponential back off" redelivery.
> Could you please help?
>
> Thanks.
> --Victor
>
>
>
> --
> View this message in context: 
> http://camel.465427.n5.nabble.com/JMS-transaction-behavior-inside-of-route-tp5730513p5731566.html
> Sent from the Camel - Users mailing list archive at Nabble.com.



-- 
Claus Ibsen
-----------------
Red Hat, Inc.
FuseSource is now part of Red Hat
Email: cib...@redhat.com
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen

Reply via email to