You can specify what kind of error handler you want to use. The out of
the box default is to redeliver 6 times then send the message to a
dead letter queue. If you try forever, a single bad message can block
your system. The default dead letter queue uses the log endpoint. So
if you don't want this - say you want to retry forever, or send to a
JMS dead letter queue after 6 failed attempts you can configure the
error handler to do what you need.
errorHandler(
deadLetterChannel("activemq:myDeadLetterQueue").maximumRedeliveries(50));
from("activemq:foo")...
On 07/11/2007, biouele <[EMAIL PROTECTED]> wrote:
>
> Hi,
> I am using Websphere RAD ( rational application developer ) whith SIBUS
> queue. I configure apache camel to use JMS transaction into my camel router,
> my router contains 1 input endpoint and 2 ouput enpoints. I want to validate
> the rollback for my transaction when somme error occure ( if
> jmsEndPoint:myQueue4 does not existe ).
>
> Here is the router config:
> public void configure() {
> Policy txReq = new SpringTransactionPolicy(bean(TransactionTemplate.class,
> "PROPAGATION_REQUIRED"));
>
> from("jmsEndPoint:myQueue1").to("jmsEndPoint:myQueue2","jmsEndPoint:myQueue4");
> errorHandler(deadLetterChannel("jmsEndPoint:myQueue3"));
> }
>
> Camel detects error but the message is commited into jmsEndPoint:myQueue2.
> Camel try 6 times to write message on jmsEndPoint:myQueue4 and stop. I
> have any rollback, and the message is removed on jmsEndPoint:myQueue1
>
> Here is spring config
>
> <beans xmlns="http://www.springframework.org/schema/beans"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="
> http://www.springframework.org/schema/beans
> http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
> http://activemq.apache.org/camel/schema/spring
> http://activemq.apache.org/camel/schema/spring/camel-spring.xsd">
>
> <camelContext id="camel"
> xmlns="http://activemq.apache.org/camel/schema/spring">
> <package>com.fbn.poc.mediation.camel.jms</package>
> </camelContext>
>
> <bean id="jmsEndPoint"
> class="org.apache.camel.component.jms.JmsComponent">
> <property name="connectionFactory"
> ref="internalJmsQueueConnectionFactory"/>
> <property name="destinationResolver" ref="jmsDestinationResolver"/>
> <property name="concurrentConsumers"> <value>1</value> </property>
> <property name="maxConcurrentConsumers"> <value>1</value>
> </property>
> </bean>
>
> <bean id="jmsEndPointTX"
> class="org.apache.camel.component.jms.JmsComponent">
> <property name="connectionFactory"
> ref="internalJmsQueueConnectionFactory"/>
> <property name="destinationResolver" ref="jmsDestinationResolver"/>
> <property name="concurrentConsumers"> <value>1</value> </property>
> <property name="maxConcurrentConsumers"> <value>1</value>
> </property>
> <property name="transacted"> <value>true</value> </property>
> <property name="transactionManager" ref="transactionManager"/>
> </bean>
>
> <bean id="transactionManager"
> class="org.springframework.jms.connection.JmsTransactionManager">
> <property name="connectionFactory"
> ref="internalJmsQueueConnectionFactory" />
> </bean>
>
>
> <bean id="PROPAGATION_REQUIRED"
> class="org.springframework.transaction.support.TransactionTemplate">
> <property name="transactionManager" ref="transactionManager"/>
> <property name="propagationBehaviorName"
> value="PROPAGATION_REQUIRED"/>
> </bean>
>
>
>
> <!-- JMS Spring with JNDI -->
>
> <!-- JMS Queue Template -->
> <bean id="jmsQueueTemplate"
> class="org.springframework.jms.core.JmsTemplate">
> <property name="connectionFactory"
> ref="internalJmsQueueConnectionFactory"/>
> <property name="destinationResolver" ref="jmsDestinationResolver"/>
> <property name="pubSubDomain"> <value>false</value> </property>
> <property name="receiveTimeout"> <value>20000</value> </property>
> </bean>
>
> <!-- JMS Destination Resolver -->
> <bean id="jmsDestinationResolver"
>
> class="org.springframework.jms.support.destination.JndiDestinationResolver">
> <property name="jndiTemplate" ref="jndiTemplate"/>
> <property name="cache" value="true"/>
> </bean>
>
> <!-- JMS Queue Connection Factory -->
> <bean id="internalJmsQueueConnectionFactory"
> class="org.springframework.jndi.JndiObjectFactoryBean">
> <property name="jndiTemplate" ref="jndiTemplate"/>
> <property name="jndiName"> <value>jms/myQueueConFactory</value>
> </property>
> </bean>
>
> <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
> <property name="environment">
> <props>
> <prop key="java.naming.factory.initial">
>
> com.ibm.websphere.naming.WsnInitialContextFactory
> </prop>
> <!-- To be confirm <prop
> key="java.naming.provider.url">iiop://localhost:2810</prop> -->
> </props>
> </property>
> </bean>
>
> </beans>
>
>
> Here is Websphere RAD log
>
> [11/6/07 14:18:43:485 EST] 0000002b SystemOut O INFO 2007-11-06
> 14:18:43,485 [DefaultMessageListenerContainer-75]
> org.apache.camel.spring.spi.TransactionInterceptor: transaction begin
> [11/6/07 14:18:43:485 EST] 0000002b SystemOut O INFO 2007-11-06
> 14:18:43,485 [DefaultMessageListenerContainer-75]
> org.apache.camel.spring.spi.TransactionInterceptor: transaction begin
> [11/6/07 14:18:43:531 EST] 0000002b SystemOut O INFO 2007-11-06
> 14:18:43,531 [DefaultMessageListenerContainer-75]
> org.apache.camel.spring.spi.TransactionInterceptor: transaction commit
> [11/6/07 14:18:43:531 EST] 0000002b SystemOut O INFO 2007-11-06
> 14:18:43,531 [DefaultMessageListenerContainer-75]
> org.apache.camel.spring.spi.TransactionInterceptor: transaction commit
> [11/6/07 14:18:43:531 EST] 0000002b SystemOut O ERROR 2007-11-06
> 14:18:43,531 [DefaultMessageListenerContainer-75]
> org.apache.camel.processor.DeadLetterChannel: On delivery attempt: 0 caught:
> org.springframework.jms.support.destination.DestinationResolutionException:
> Destination [myQueue4] not found in JNDI; nested exception is
> javax.naming.NameNotFoundException: Context:
> FB07530Node02Cell/nodes/FB07530Node02/servers/server1, name: myQueue4: First
> component in name myQueue4 not found. [Root exception is
> org.omg.CosNaming.NamingContextPackage.NotFound:
> IDL:omg.org/CosNaming/NamingContext/NotFound:1.0]
> org.springframework.jms.support.destination.DestinationResolutionException:
> Destination [myQueue4] not found in JNDI; nested exception is
> javax.naming.NameNotFoundException: Context:
> FB07530Node02Cell/nodes/FB07530Node02/servers/server1, name: myQueue4: First
> component in name myQueue4 not found. [Root exception is
> org.omg.CosNaming.NamingContextPackage.NotFound:
> IDL:omg.org/CosNaming/NamingContext/NotFound:1.0]
> Caused by:
> javax.naming.NameNotFoundException: Context:
> FB07530Node02Cell/nodes/FB07530Node02/servers/server1, name: myQueue4: First
> component in name myQueue4 not found. [Root exception is
> org.omg.CosNaming.NamingContextPackage.NotFound:
> IDL:omg.org/CosNaming/NamingContext/NotFound:1.0]
> at
> com.ibm.ws.naming.jndicos.CNContextImpl.processNotFoundException(CNContextImpl.java:4730)
> at
> com.ibm.ws.naming.jndicos.CNContextImpl.doLookup(CNContextImpl.java:1907)
> at
> com.ibm.ws.naming.jndicos.CNContextImpl.doLookup(CNContextImpl.java:1862)
> at
> com.ibm.ws.naming.jndicos.CNContextImpl.lookupExt(CNContextImpl.java:1552)
> at
> com.ibm.ws.naming.jndicos.CNContextImpl.lookup(CNContextImpl.java:1354)
> at com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:172)
> at javax.naming.InitialContext.lookup(InitialContext.java:363)
> at
> org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:123)
> at
> org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:85)
> at
> org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:121)
> at
> org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:146)
> at
> org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:93)
> at
> org.springframework.jms.support.destination.JndiDestinationResolver.resolveDestinationName(JndiDestinationResolver.java:112)
> at
> org.springframework.jms.support.destination.JmsDestinationAccessor.resolveDestinationName(JmsDestinationAccessor.java:100)
> at
> org.springframework.jms.core.JmsTemplate.access$100(JmsTemplate.java:76)
> at
> org.springframework.jms.core.JmsTemplate$3.doInJms(JmsTemplate.java:486)
> at
> org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:428)
> at
> org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:484)
> at
> org.apache.camel.component.jms.JmsProducer.process(JmsProducer.java:46)
> at
> org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorToAsynProcessorBridge.process(AsyncProcessorTypeConverter.java:44)
> at
> org.apache.camel.processor.SendProcessor.process(SendProcessor.java:73)
> at org.apache.camel.processor.Pipeline.process(Pipeline.java:103)
> at org.apache.camel.processor.Pipeline.process(Pipeline.java:87)
> at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:44)
> at org.apache.camel.processor.Pipeline.process(Pipeline.java:61)
> at
> org.apache.camel.processor.DelegateProcessor.processNext(DelegateProcessor.java:47)
> at
> org.apache.camel.spring.spi.TransactionInterceptor.access$000(TransactionInterceptor.java:33)
> at
> org.apache.camel.spring.spi.TransactionInterceptor$1.doInTransactionWithoutResult(TransactionInterceptor.java:47)
> at
> org.springframework.transaction.support.TransactionCallbackWithoutResult.doInTransaction(TransactionCallbackWithoutResult.java:33)
> at
> org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:127)
> at
> org.apache.camel.spring.spi.TransactionInterceptor.process(TransactionInterceptor.java:44)
> at
> org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorToAsynProcessorBridge.process(AsyncProcessorTypeConverter.java:44)
> at org.apache.camel.processor.Pipeline.process(Pipeline.java:103)
> at org.apache.camel.processor.Pipeline.process(Pipeline.java:87)
> at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:44)
> at org.apache.camel.processor.Pipeline.process(Pipeline.java:61)
> at
> org.apache.camel.processor.DelegateProcessor.processNext(DelegateProcessor.java:47)
> at
> org.apache.camel.spring.spi.TransactionInterceptor.access$000(TransactionInterceptor.java:33)
> at
> org.apache.camel.spring.spi.TransactionInterceptor$1.doInTransactionWithoutResult(TransactionInterceptor.java:47)
> at
> org.springframework.transaction.support.TransactionCallbackWithoutResult.doInTransaction(TransactionCallbackWithoutResult.java:33)
> at
> org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:127)
> at
> org.apache.camel.spring.spi.TransactionInterceptor.process(TransactionInterceptor.java:44)
> at
> org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorToAsynProcessorBridge.process(AsyncProcessorTypeConverter.java:44)
> at
> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:136)
> at
> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:86)
> at
> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:40)
> at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:44)
> at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:68)
> at
> org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:56)
> at
> org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:510)
> at
> org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:445)
> at
> org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:414)
> at
> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:309)
> at
> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:234)
> at
> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:871)
> at
> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:818)
> at java.lang.Thread.run(Thread.java:801)
> Caused by:
> org.omg.CosNaming.NamingContextPackage.NotFound:
> IDL:omg.org/CosNaming/NamingContext/NotFound:1.0
>
>
>
>
>
> --
> View this message in context:
> http://www.nabble.com/No-JMS-rollback-when-routing-message-to-JMS-queues-with-error-tf4765650s22882.html#a13630141
> Sent from the Camel - Development mailing list archive at Nabble.com.
>
>
--
James
-------
http://macstrac.blogspot.com/
Open Source SOA
http://open.iona.com