Hi, Yes I think this is a reasonable change. Can you submit a pull request? Perhaps the running boolean should switch to AtomicBoolean as well.
Colm. On Tue, Jan 14, 2020 at 1:07 PM Tyla, BHP (Björn) <bjorn.t...@apg.nl> wrote: > Hi, > > I'm using CXF 3.4.0 in a Spring 5.2 application with an ActiveMQ middle > ware. > On application shutdown I see 2 warnings. Looking at the > PollingMessageListenerContainer code I noticed that when the > consumer/session is closed (and thus a null message is returned from > consumer.receive) the next step (session.getTransacted) fails and produces > the result below. > Why is the session.getTransacted not within the message != null branch? > > Regards > Bjorn > > org.apache.cxf.transport.jms.util.PollingMessageListenerContainer$Poller:line > 80-92; > > >> NOTE: the running boolean is not sync'ed nor volatile yet used by > multiple threads! > while (running) { > Message message = consumer.receive(1000); > try { > if (message != null) { > > listenerHandler.onMessage(message); > } > >> should the next test not be within the if branch above and so fix the > shutdown warnings? When a consumer is closed it returns a null message. > Also when a receive timeout occurs (message also null) these is no reason > to commit. > if (session.getTransacted()) { << this > fails when consumer/session is closed on ActiveMQ > session.commit(); > } > } catch (Throwable e) { > LOG.log(Level.WARNING, "Exception while > processing jms message in cxf. Rolling back", e); > safeRollBack(session); > } > } > > [2020-01-14 11:21:19,962 WARN ] [myTaskExecutor -2] > [PollingMessageListenerContainer$Poller:90] > [org.apache.cxf.transport.jms.util.PollingMessageListenerContainer] > Exception while processing jms message in cxf. Rolling back > javax.jms.IllegalStateException: The Session is closed > at > org.apache.activemq.ActiveMQSession.checkClosed(ActiveMQSession.java:771) > at > org.apache.activemq.ActiveMQSession.getTransacted(ActiveMQSession.java:540) > at > org.apache.cxf.transport.jms.util.PollingMessageListenerContainer$Poller.run(PollingMessageListenerContainer.java:86) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) > at java.lang.Thread.run(Thread.java:748) > [2020-01-14 11:21:19,963 WARN ] [myTaskExecutor-2] > [PollingMessageListenerContainer$Poller:111] > [org.apache.cxf.transport.jms.util.PollingMessageListenerContainer] > Rollback of Local transaction failed > javax.jms.IllegalStateException: The Session is closed > at > org.apache.activemq.ActiveMQSession.checkClosed(ActiveMQSession.java:771) > at > org.apache.activemq.ActiveMQSession.getTransacted(ActiveMQSession.java:540) > at > org.apache.cxf.transport.jms.util.PollingMessageListenerContainer$Poller.safeRollBack(PollingMessageListenerContainer.java:107) > at > org.apache.cxf.transport.jms.util.PollingMessageListenerContainer$Poller.run(PollingMessageListenerContainer.java:91) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) > at java.lang.Thread.run(Thread.java:748) > > > > De informatie in dit e-mailbericht is vertrouwelijk en uitsluitend bestemd > voor de > geadresseerde. Wanneer u dit bericht per abuis ontvangt, verzoeken wij u > contact op te > nemen met de afzender per kerende e-mail. Verder verzoeken wij u in dat > geval dit > e-mailbericht te vernietigen en de inhoud ervan aan niemand openbaar te > maken. > Wij aanvaarden geen aansprakelijkheid voor onjuiste, onvolledige dan wel > ontijdige > overbrenging van de inhoud van een verzonden e-mailbericht, noch voor > daarbij > overgebrachte virussen. > > APG Groep N.V. is gevestigd te Heerlen en is ingeschreven in het > handelsregister van de Kamer van Koophandel Limburg onder nummer 14099617 > > > The information contained in this e-mail is confidential and may be > privileged. > It may be read, copied and used only by the intended recipient. > If you have received it in error, please contact the sender immediately by > return e-mail; please delete in this case the e-mail and do not disclose > its > contents to any person. We don't accept liability for any errors, > omissions, > delays of receipt or viruses in the contents of this message which arise > as a > result of e-mail transmission. > > APG Groep N.V. is registered in the trade register of the Chamber > of Commerce Limburg, The Netherlands, registration number: 14099617