PollingMessageListenerContainer shutdown warnings and issues in Poller

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

PollingMessageListenerContainer shutdown warnings and issues in Poller

Tyla, BHP (Björn)
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 | Threaded
Open this post in threaded view
|

Re: PollingMessageListenerContainer shutdown warnings and issues in Poller

coheigea
Administrator
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) <[hidden email]> 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