Class NarayanaTransactionHelper

java.lang.Object
org.jboss.narayana.jta.jms.TransactionHelperImpl
org.frankframework.jta.narayana.NarayanaTransactionHelper
All Implemented Interfaces:
org.jboss.narayana.jta.jms.TransactionHelper

public class NarayanaTransactionHelper extends org.jboss.narayana.jta.jms.TransactionHelperImpl
  • Constructor Summary

    Constructors
    Constructor
    Description
    NarayanaTransactionHelper(jakarta.transaction.TransactionManager transactionManager)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    Connections were not always closed, because the super implementation of this method returns false too often.

    Methods inherited from class org.jboss.narayana.jta.jms.TransactionHelperImpl

    deregisterXAResource, registerSynchronization, registerXAResource

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • NarayanaTransactionHelper

      public NarayanaTransactionHelper(jakarta.transaction.TransactionManager transactionManager)
  • Method Details

    • isTransactionAvailable

      public boolean isTransactionAvailable() throws jakarta.jms.JMSException
      Connections were not always closed, because the super implementation of this method returns false too often. ConnectionProxy.close() and SessionProxy.close() both call this method before attempting to close the connection. When the connection is marked as STATUS_ROLLEDBACK this method will return true, claiming it's available. This scenario happened when a JMSMessage was marked for rollback by the ReaperThread while being detected as 'stuck' because of a (too) short timeout. While, even though the timeout was too short, no other unexpected behavior was detected. This mechanism however, will prevent the connection from being closed, causing a connection-leak to occur.

      NOTE: This problem is caused because in the TransactionImple.getStatus() the internal connection status is converted to a javax.transaction.Status. Because of the conversion the actual state is lost, and ActionStatus.ABORTED connections are marked as STATUS_ROLLEDBACK.

      Specified by:
      isTransactionAvailable in interface org.jboss.narayana.jta.jms.TransactionHelper
      Overrides:
      isTransactionAvailable in class org.jboss.narayana.jta.jms.TransactionHelperImpl
      Throws:
      jakarta.jms.JMSException