Yeah, TomEE could provide the "java:/TransactionManager" since it is a J2EE container. I wonder if you use the "transacted=true" option on the sjms consumer which will rollback the transaction if the router is failed.
On Tue, Sep 1, 2020 at 4:35 AM Shultz, Dmitry <dmitry_shu...@kaltire.com> wrote: > Thanks for the reply Zheng. > > I'm running very similar code in the TomEE and It doesn't fail on NPE. See > similar behaviour though: > > [Thread-0 (ActiveMQ-client] WARN o.a.c.jta.TransactionErrorHandler - > Transaction rollback (0x30730302) redelivered(false) for (MessageId: > ID:9fd77209-ebc6-11ea-955a-1ee7171b8787 on ExchangeId: > ID-Kal030841-1598904862181-0-2) caught: test > > And after process restart the message is gone. > > I can confirm that when I use infinite re-delivery (the error handler > never exhausted) the message stays in the durable topic as forever even > after restart. So, I'm not sure if my expectation are correct i.e. does it > supposed to stay in the topic after error handler redeliveries are > exhausted? > > Cheers, > Dmitry > > > -----Original Message----- > From: Zheng Feng [mailto:zf...@redhat.com] > Sent: Sunday, August 30, 2020 8:58 AM > To: users@camel.apache.org > Subject: Re: CDI + SJMS + transacted > > 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://urldefense.com/v3/__https://camel.apache.org/components/latest/sjms-component.html__;!!LdWlNaMnLCM!OJ-X6YfRy0exjKJ8PNWy-d5aHbD6mgnBfTRZXXKak6kEojLVTmcKwcF4puKY9P1BTwqO$ > [2] > https://urldefense.com/v3/__https://github.com/jbosstm/quickstart/tree/master/jta-1_2-standalone__;!!LdWlNaMnLCM!OJ-X6YfRy0exjKJ8PNWy-d5aHbD6mgnBfTRZXXKak6kEojLVTmcKwcF4puKY9Py3UShj$ > [3] > > https://urldefense.com/v3/__https://github.com/apache/camel/commit/4421b2bba294dd8828621684c7670f78d811ecd8*diff-773b20d331dac13fb17acfa0f58ac01f__;Iw!!LdWlNaMnLCM!OJ-X6YfRy0exjKJ8PNWy-d5aHbD6mgnBfTRZXXKak6kEojLVTmcKwcF4puKY9F_CLTBw$ > > 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.has > > ActiveTransaction(TransactionalJtaTransactionPolicy.java:105) > > ~[camel-cdi-3.4.3.jar:3.4.3] > > at > > org.apache.camel.cdi.transaction.RequiredJtaTransactionPolicy.run(Requ > > iredJtaTransactionPolicy.java:26) > > ~[camel-cdi-3.4.3.jar:3.4.3] > > at > > org.apache.camel.jta.TransactionErrorHandler.doInTransactionTemplate(T > > ransactionErrorHandler.java:193) > > ~[camel-jta-3.4.3.jar:3.4.3] > > at > > org.apache.camel.jta.TransactionErrorHandler.processInTransaction(Tran > > sactionErrorHandler.java:144) > > ~[camel-jta-3.4.3.jar:3.4.3] > > at > > org.apache.camel.jta.TransactionErrorHandler.process(TransactionErrorH > > andler.java:108) > > ~[camel-jta-3.4.3.jar:3.4.3] > > at > > org.apache.camel.jta.TransactionErrorHandler.process(TransactionErrorH > > andler.java:117) > > ~[camel-jta-3.4.3.jar:3.4.3] > > at > > org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$Redeliv > > eryTask.redeliver(RedeliveryErrorHandler.java:766) > > ~[camel-base-3.4.3.jar:3.4.3] > > at > > org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(D > > efaultReactiveExecutor.java:148) > > ~[camel-base-3.4.3.jar:3.4.3] > > at > > org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(Defa > > ultReactiveExecutor.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(CamelInterna > > lProcessor.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(AsyncProcessorS > > upport.java:40) > > ~[camel-support-3.4.3.jar:3.4.3] > > at > > org.apache.camel.component.sjms.consumer.InOnlyMessageHandler.handleMe > > ssage(InOnlyMessageHandler.java:52) > > ~[camel-sjms-3.4.3.jar:3.4.3] > > at > > org.apache.camel.component.sjms.consumer.AbstractMessageHandler.onMess > > age(AbstractMessageHandler.java:81) > > ~[camel-sjms-3.4.3.jar:3.4.3] > > at > > org.apache.activemq.artemis.jms.client.JMSMessageListenerWrapper.onMes > > sage(JMSMessageListenerWrapper.java:110) > > ~[artemis-jms-client-2.14.0.jar:2.14.0] > > at > > org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.callOn > > Message(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://urldefense.com/v3/__https://camel.apache.org/components/latest > > /others/cdi.html__;!!LdWlNaMnLCM!OJ-X6YfRy0exjKJ8PNWy-d5aHbD6mgnBfTRZX > > XKak6kEojLVTmcKwcF4puKY9NnrgwcA$ ) is here > > https://urldefense.com/v3/__https://github.com/zeppelinux/CamelCDISjms > > Test__;!!LdWlNaMnLCM!OJ-X6YfRy0exjKJ8PNWy-d5aHbD6mgnBfTRZXXKak6kEojLVT > > mcKwcF4puKY9HBU5Opk$ > > Please have a look. > > > > Cheers, > > Dmitry > > >