Uploaded image for project: 'ActiveMQ Classic'
  1. ActiveMQ Classic
  2. AMQ-4634

Rar losing messages when there is a XA trx timeout (jboss)

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 5.6.0, 5.7.0, 5.8.0
    • 5.9.0
    • None
    • None
    • JBoss 6.1.
      ActiveMQ 5.8.0 (also tested in 5.7.0 and 5.6.0) standalone mode.

    Description

      ActiveMQ does a trx commit when there is a transaction timeout (EJBTransactionRolledbackException). In this way we are losing messages when there is any timeout.
      We have seen that the activemq connections are enlist in XA.
      The attribute transactionContext from ActiveMQSession class has the global transaction reference (xid) before calling the MDB (messageListener.onMessage(message)).
      When the timeout is reached and the RuntimeException is throwned, the transactionContext losed the xid reference.
      Later, when ActiveMQSession call the method transactionContext.isInXATransaction() the result is false because there is no xid reference.

      This situation only happened when the MDB calls other EJB (Stateless) with CMT - TransactionAttributeType.REQUIRES_NEW, and the exception is throwed inside the Stateless.

      I've tried to reproduce this without calling the stateless ejb but it works well.
      The ActiveMQSession class should retain the original transactionContext.

      Attachments

        1. logs.txt
          8 kB
          Gaston Scapusio

        Activity

          People

            gtully Gary Tully
            gastonscapusio Gaston Scapusio
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: