You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Tyla, "BHP (Björn)" <bj...@apg.nl> on 2020/01/14 10:51:10 UTC

PollingMessageListenerContainer shutdown warnings and issues in Poller

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

Re: PollingMessageListenerContainer shutdown warnings and issues in Poller

Posted by Colm O hEigeartaigh <co...@apache.org>.
I've fixed this for the next release -
https://issues.apache.org/jira/browse/CXF-8205

Colm.

On Wed, Jan 15, 2020 at 5:25 PM Colm O hEigeartaigh <co...@apache.org>
wrote:

> 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) <bj...@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
>
>

Re: PollingMessageListenerContainer shutdown warnings and issues in Poller

Posted by Colm O hEigeartaigh <co...@apache.org>.
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) <bj...@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