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.

Reply via email to