Skip to content

JMS integration with Tibco causes deadlock due to commitIfNecessary in AbstractPollingMessageListenerContainer [SPR-7558] #12215

Closed
@spring-projects-issues

Description

@spring-projects-issues
Collaborator

Jason Harris opened SPR-7558 and commented

The new commitIfNecessary call to reset transaction timeout only happens in Spring JMS's AbstractPollingMessageListenerContainer.doReceiveAndExecute and when no message was received. This can cause a deadlock when integrated with Tibco JMS API and a prefetch value of NONE is set on the Queue. Workaround is to set a non-NONE prefetch value (.e.g. 1 or 5).Deadlocked pair of threads example below:

"MessagePublisherContainer-1" prio=10 tid=0x0899c400 nid=0x6d56 in Object.wait() [0x77074000..0x770750b0]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:485)
at com.tibco.tibjms.TibjmsxLink.sendRequest(TibjmsxLink.java:320)

  • locked <0x94443d68> (a com.tibco.tibjms.TibjmsxResponse)
    at com.tibco.tibjms.TibjmsxSessionImp._confirmTransacted(TibjmsxSessionImp.java:2817)
    at com.tibco.tibjms.TibjmsxSessionImp._confirm(TibjmsxSessionImp.java:3213)
  • locked <0x8f656fd0> (a java.lang.Object)
    at com.tibco.tibjms.TibjmsxSessionImp._commit(TibjmsxSessionImp.java:2501)
    at com.tibco.tibjms.TibjmsxSessionImp.commit(TibjmsxSessionImp.java:4361)
    at sun.reflect.GeneratedMethodAccessor108.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.jms.connection.CachingConnectionFactory$CachedSessionInvocationHandler.invoke(CachingConnectionFactory.java:344)
    at $Proxy57.commit(Unknown Source)
    at org.springframework.jms.support.JmsUtils.commitIfNecessary(JmsUtils.java:217)
    at org.springframework.jms.listener.AbstractMessageListenerContainer.commitIfNecessary(AbstractMessageListenerContainer.java:575)
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:354)
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:261)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1056)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1048)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:947)
    at java.lang.Thread.run(Thread.java:619)

"TIBCO EMS TCPLink Reader (724129)" daemon prio=10 tid=0x08754000 nid=0x6d55 waiting for monitor entry [0x766b6000..0x766b7030]
java.lang.Thread.State: BLOCKED (on object monitor)
at com.tibco.tibjms.TibjmsxSessionImp._stopConsumerReceive(TibjmsxSessionImp.java:578)

  • waiting to lock <0x8f656fd0> (a java.lang.Object)
    at com.tibco.tibjms.TibjmsxSessionImp._postMessage(TibjmsxSessionImp.java:1704)
  • locked <0x8f656fc8> (a java.lang.Object)
    at com.tibco.tibjms.TibjmsConnection._processDataMessage(TibjmsConnection.java:2611)
    at com.tibco.tibjms.TibjmsConnection._processMessage(TibjmsConnection.java:2414)
    at com.tibco.tibjms.TibjmsxLinkTcp$LinkReader.work(TibjmsxLinkTcp.java:288)
    at com.tibco.tibjms.TibjmsxLinkTcp$LinkReader.run(TibjmsxLinkTcp.java:250)

Affects: 3.0.4

Issue Links:

Referenced from: commits 6d94c92

Metadata

Metadata

Assignees

Labels

in: messagingIssues in messaging modules (jms, messaging)type: bugA general bug

Type

No type

Projects

No projects

Relationships

None yet

    Development

    No branches or pull requests

      Participants

      @jhoeller@spring-projects-issues

      Issue actions

        JMS integration with Tibco causes deadlock due to commitIfNecessary in AbstractPollingMessageListenerContainer [SPR-7558] · Issue #12215 · spring-projects/spring-framework