Hi Dmitry, It seems that SJMS [1] currently only supports the use of internal JMS Transactions. There is no support for the Camel Transaction Processor or the Java Transaction API (JTA). Also if you want to use the JTA transaction provided by the camel-cdi, the TransactionManager should be available via JNDI "java:/TransactionManager". Then you are running the camel in the standalone environment, and the transaction manager should be provided by the third party implementation, such as Narayana ( you can find the jta standalone example here [2]). The NPE I think should be fixed by CAMEL-14918 [3], and I will try to backport it to the 3.4.x
Regards, Zheng Feng [1] https://camel.apache.org/components/latest/sjms-component.html [2] https://github.com/jbosstm/quickstart/tree/master/jta-1_2-standalone [3] https://github.com/apache/camel/commit/4421b2bba294dd8828621684c7670f78d811ecd8#diff-773b20d331dac13fb17acfa0f58ac01f On Sat, Aug 29, 2020 at 5:50 AM Shultz, Dmitry <dmitry_shu...@kaltire.com> wrote: > Hi All, > > I'm probably doing something wrong/stupid, but I can't get the sjms > (recent Camel, but same true for 2.25.2) to leave failed messages in the > JMS topic (AMQ Artemis) after exception. > This is what logged: > > [ctiveMQ-client-global-threads)] TransactionErrorHandler WARN > Transaction rollback (0x5cd1283) redelivered(false) for (MessageId: > ID:bbaa590d-e975-11ea-9ad0-6c4b902fc0e1 on ExchangeId: > ID-Kal030841-1598650245838-0-1) caught: null > [ctiveMQ-client-global-threads)] TransactionErrorHandler WARN > Transaction rollback (0x5cd1283) redelivered(false) for (MessageId: > ID:bbaa590d-e975-11ea-9ad0-6c4b902fc0e1 on ExchangeId: > ID-Kal030841-1598650245838-0-1) caught: null > [ctiveMQ-client-global-threads)] TransactionErrorHandler WARN > Transaction rollback (0x5cd1283) redelivered(false) for (MessageId: > ID:bbaa590d-e975-11ea-9ad0-6c4b902fc0e1 on ExchangeId: > ID-Kal030841-1598650245838-0-1) caught: null > [ctiveMQ-client-global-threads)] TransactionErrorHandler ERROR > Failed delivery for (MessageId: ID:bbaa590d-e975-11ea-9ad0-6c4b902fc0e1 on > ExchangeId: ID-Kal030841-1598650245838-0-1). Exhausted after delivery > attempt: 3 caught: java.lang.NullPointerException > > Message History (complete message history is disabled) > > --------------------------------------------------------------------------------------------------------------------------------------- > RouteId ProcessorId Processor > Elapsed (ms) > [route1 ] [route1 ] > [from[sjms://topic:topic:test?durableSubscriptionId=dmitr] [ 1999] > ... > [route1 ] [transacted1 ] [transacted > ] [ 0] > > Stacktrace > > --------------------------------------------------------------------------------------------------------------------------------------- > > java.lang.NullPointerException: null > at > org.apache.camel.cdi.transaction.TransactionalJtaTransactionPolicy.hasActiveTransaction(TransactionalJtaTransactionPolicy.java:105) > ~[camel-cdi-3.4.3.jar:3.4.3] > at > org.apache.camel.cdi.transaction.RequiredJtaTransactionPolicy.run(RequiredJtaTransactionPolicy.java:26) > ~[camel-cdi-3.4.3.jar:3.4.3] > at > org.apache.camel.jta.TransactionErrorHandler.doInTransactionTemplate(TransactionErrorHandler.java:193) > ~[camel-jta-3.4.3.jar:3.4.3] > at > org.apache.camel.jta.TransactionErrorHandler.processInTransaction(TransactionErrorHandler.java:144) > ~[camel-jta-3.4.3.jar:3.4.3] > at > org.apache.camel.jta.TransactionErrorHandler.process(TransactionErrorHandler.java:108) > ~[camel-jta-3.4.3.jar:3.4.3] > at > org.apache.camel.jta.TransactionErrorHandler.process(TransactionErrorHandler.java:117) > ~[camel-jta-3.4.3.jar:3.4.3] > at > org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.redeliver(RedeliveryErrorHandler.java:766) > ~[camel-base-3.4.3.jar:3.4.3] > at > org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148) > ~[camel-base-3.4.3.jar:3.4.3] > at > org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:60) > ~[camel-base-3.4.3.jar:3.4.3] > at > org.apache.camel.processor.Pipeline.process(Pipeline.java:147) > ~[camel-base-3.4.3.jar:3.4.3] > at > org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:286) > ~[camel-base-3.4.3.jar:3.4.3] > at > org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:83) > ~[camel-base-3.4.3.jar:3.4.3] > at > org.apache.camel.support.AsyncProcessorSupport.process(AsyncProcessorSupport.java:40) > ~[camel-support-3.4.3.jar:3.4.3] > at > org.apache.camel.component.sjms.consumer.InOnlyMessageHandler.handleMessage(InOnlyMessageHandler.java:52) > ~[camel-sjms-3.4.3.jar:3.4.3] > at > org.apache.camel.component.sjms.consumer.AbstractMessageHandler.onMessage(AbstractMessageHandler.java:81) > ~[camel-sjms-3.4.3.jar:3.4.3] > at > org.apache.activemq.artemis.jms.client.JMSMessageListenerWrapper.onMessage(JMSMessageListenerWrapper.java:110) > ~[artemis-jms-client-2.14.0.jar:2.14.0] > at > org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.callOnMessage(ClientConsumerImpl.java:1030) > ~[artemis-core-client-2.14.0.jar:2.14.0] > > So, it looks like rollback is kicked off, but when I restart the process > message is gone from the JMS topic. > > Sample reproducer (generated using > -DarchetypeArtifactId=camel-archetype-cdi as described here > https://camel.apache.org/components/latest/others/cdi.html ) is here > https://github.com/zeppelinux/CamelCDISjmsTest > Please have a look. > > Cheers, > Dmitry >