It looks like you need the JTA transaction manager to handle a XA
transaction between the JMS_ONE and JMS_TWO.

On Wed, Jun 26, 2019 at 3:01 PM sujin sr <suji...@gmail.com> wrote:

> I am facing a issue while trying to implement JMS transaction using Camel.
>
> Here is the scenario
>
> 1. Primary route which read the message from the queue(JMS_IN), pass the
> same exchange to the two sub route(direct route)
> 2. First sub route process the message successfully and send to the another
> queue(JMS_ONE)
> 3. Second sub route process the message and send to the another
> queue(JMS_TWO).
> 4. If any error occurred during the sub route processing all the message
> should rollback and original message sent to another queue(ERROR) that is
> dead letter queue.
> 5. In the example Context I have created throw RuntimeException during
> second sub route processing.
> 6. So expected behavior is to move the original message to ERROR queue,
> same time no message should send to JMS_ONE & JMS_TWO
> 7. But actual behavior is original message was sent to the ERROR queue, but
> message sent the JMS_ONE.
>
> I am using Apache Camel 2.24.0, Jboss HornetQ and spring transaction
> manager.
>
> Kindly help me on this, I am struck at this for couple of days
>
> Camel Context Below
>
> <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
>         <property name="environment">
>             <props>
>                 <prop
>
> key="java.naming.factory.initial">org.jboss.naming.remote.client.InitialContextFactory</prop>
>                 <prop
> key="java.naming.provider.url">http-remoting://localhost:9089</prop>
>                 <!--<prop
>
> key="java.naming.factory.url.pkgs">org.jboss.naming:org.jnp.interfaces</prop>-->
>                 <prop key="java.naming.security.principal">TESTUSR</prop>
>                 <prop key="java.naming.security.credentials">TESTUSR</prop>
>             </props>
>         </property>
>     </bean>
>
>     <bean id="jmsTemplate"
> class="org.springframework.jms.core.JmsTemplate">
>         <property name="connectionFactory" ref="jmsConnectionFactory"/>
>     </bean>
>
>     <bean id="jmsConnectionFactory"
> class="org.springframework.jndi.JndiObjectFactoryBean">
>         <property name="jndiTemplate" ref="jndiTemplate"/>
>         <property name="jndiName" value="jms/RemoteConnectionFactory"/>
>     </bean>
>
>     <bean id="jmsTransactionManager"
> class="org.springframework.jms.connection.JmsTransactionManager">
>         <property name="connectionFactory" ref="jmsConnectionFactory"/>
>     </bean>
>
>     <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="jms" class="org.apache.camel.component.jms.JmsComponent">
>         <property name="configuration" ref="jmsConfig"/>
>     </bean>
>
>     <bean id="successProcessor" class="com.test.SuccessTestProcessor"/>
>     <bean id="errorProcessor" class="com.test.ErrorTestProcessor"/>
>     <bean id="deadChannelProcessor"
> class="com.test.DeadChannelTestProcessor"/>
>
>
>     <bean id="myDeadLetterErrorHandler"
> class="org.apache.camel.builder.DeadLetterChannelBuilder">
>         <property name="deadLetterUri" value="direct:dead_letter_channel"/>
>         <property name="redeliveryPolicy" ref="myRedeliveryPolicyConfig"/>
>     </bean>
>
>     <bean id="myRedeliveryPolicyConfig"
> class="org.apache.camel.processor.RedeliveryPolicy">
>         <property name="maximumRedeliveries" value="0"/>
>     </bean>
>
>     <camelContext xmlns="http://camel.apache.org/schema/spring";
> errorHandlerRef="myDeadLetterErrorHandler">
>
>         <route id="route-one" >
>             <from uri="jms:queue:t24IFInboundQueue"/>
>             <transacted/>
>             <to uri="direct:success-route"/>
>             <to uri="direct:error-route"/>
>         </route>
>
>         <route id="direct-success-route">
>             <from uri="direct:success-route"/>
>             <transacted/>
>             <process ref="successProcessor"/>
>             <to uri="jms:queue:JMS_ONE"/>
>         </route>
>
>         <route id="direct-error-route">
>             <from uri="direct:error-route"/>
>             <transacted/>
>             <process ref="errorProcessor"/>
>             <to uri="jms:queue:JMS_TWO"/>
>         </route>
>
>         <route id="direct_dead_letter_channel">
>             <from uri="direct:dead_letter_channel"/>
>             <process ref="deadChannelProcessor"/>
>             <to uri="jms:queue:ERROR"/>
>         </route>
>
>     </camelContext>
>
> Thanks!!!
>

Reply via email to