camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claus Ibsen <claus.ib...@gmail.com>
Subject Re: JMS transactions between multiple routes
Date Tue, 25 Aug 2009 15:50:23 GMT
See transferException option on Camel JMS


On Tue, Aug 25, 2009 at 5:47 PM, Ilya S<devmailboxlive@gmail.com> wrote:
> Hi Claus,
>
> Yes, I believe I am using request/reply over JMS.
>
> Is there a way to ask Camel to commit a TX at some point in my route?
>
> I just sent a clarification on what I'm actually trying to accomplish:
> if some endpoint in the middle failed, I would the the error to be
> propagated back to the original producer, and I was hoping that this
> can be done.
>
> Thank you.
>
> On Mon, Aug 24, 2009 at 10:49 PM, Claus Ibsen<claus.ibsen@gmail.com> wrote:
>> Hi
>>
>> Are you doing request/reply over JMS and want to do that with transactions?
>> If so that is not possible as messages are not commited to the JMS
>> queue before the TX is comitted.
>>
>>
>>
>> On Tue, Aug 25, 2009 at 1:55 AM, Ilya S<devmailboxlive@gmail.com> wrote:
>>> Hi All,
>>>
>>> I'm using Camel 1.6.1 (cannot use 2.0) , with Spring 2.5.6, and ActiveMQ 5.2.
>>>
>>> I'm trying to set up Transaction Manager so that my transactions are
>>> rolled back on error.
>>> Here is my camel xml config adopted from the examples:
>>> =========================================================================
>>>
>>>    <context:component-scan base-package="org.apache.camel.example.server"/>
>>>
>>>    <camel:camelContext id="camel">
>>>        <camel:package>org.apache.camel.example.server</camel:package>
>>>        <camel:jmxAgent id="agent" createConnector="true"/>
>>>    </camel:camelContext>
>>>
>>>    <broker:broker useJmx="false" persistent="false" brokerName="localhost">
>>>        <broker:transportConnectors>
>>>            <broker:transportConnector name="tcp" uri="tcp://localhost:61616"/>
>>>        </broker:transportConnectors>
>>>    </broker:broker>
>>>
>>>    <bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
>>>        <property name="connectionFactory" ref="jmsConnectionFactory"/>
>>>        <property name="transacted" value="true"/>
>>>        <property name="transactionManager" ref="jmsTransactionManager"/>
>>>        <property name="transactionTimeout" value="50000"></property>
>>>    </bean>
>>>
>>>        <bean id="redeliveryPolicy" class="org.apache.activemq.RedeliveryPolicy">
>>>                <property name="maximumRedeliveries" value="-1"/>
>>>        </bean>
>>>
>>>        <bean id="jmsConnectionFactory"
>>> class="org.apache.activemq.ActiveMQConnectionFactory">
>>>                <!-- use the vm protocol as the JMS broker is running
in the same
>>> jvm as Camel -->
>>>                <property name="brokerURL" value="vm://localhost"/>
>>>                <property name="redeliveryPolicy" ref="redeliveryPolicy"/>
>>>        </bean>
>>>
>>>        <bean id="jmsTransactionManager"
>>> class="org.springframework.jms.connection.JmsTransactionManager">
>>>                <property name="connectionFactory" ref="jmsConnectionFactory"
/>
>>>        </bean>
>>>
>>>        <bean id="PROPAGATION_REQUIRED"
>>> class="org.springframework.transaction.support.TransactionTemplate">
>>>                <property name="transactionManager" ref="jmsTransactionManager"/>
>>>        </bean>
>>>
>>>        <bean id="transactionErrorHandler"
>>> class="org.apache.camel.spring.spi.TransactionErrorHandlerBuilder">
>>>                 <property name="transactionTemplate" ref="PROPAGATION_REQUIRED"/>
>>>        </bean>
>>> ====================================================================
>>>
>>> I have 2 routes.
>>> Route 1 (extends from SpringRouteBuilder)
>>>
>>>        TransactionTemplate template =
>>> bean(org.springframework.transaction.support.TransactionTemplate.class,
>>> "PROPAGATION_REQUIRED");
>>>        Policy<TransactionTemplate> pp = new
>>> SpringTransactionPolicy<TransactionTemplate>(template);
>>>
>>>        from("jms:queue:numbers")
>>>        .policy(pp)
>>>        .to("jms:queue:mybadqueue?transactedInOut=true")
>>>        .to("multiplier");
>>>
>>>
>>> Route 2:
>>>        from("jms:queue:mybadqueue")
>>>        .process(new Processor() {
>>>                        public void process(Exchange arg0) throws
Exception {
>>>                                throw new Exception("Hello World
Exception");
>>>                        }
>>>
>>>        })
>>>       .to("multiplier");
>>>
>>>
>>> With this configuration I never get messages sent to "jms:queue:mybadqueue".
>>> Could someone point me in the right direction? Please, advise.
>>>
>>> Thank you.
>>> Ilya.
>>>
>>
>>
>>
>> --
>> Claus Ibsen
>> Apache Camel Committer
>>
>> Open Source Integration: http://fusesource.com
>> Blog: http://davsclaus.blogspot.com/
>> Twitter: http://twitter.com/davsclaus
>>
>



-- 
Claus Ibsen
Apache Camel Committer

Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus

Mime
View raw message