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

Reply via email to