Class NarayanaTransactionHelper
- java.lang.Object
-
- org.jboss.narayana.jta.jms.TransactionHelperImpl
-
- nl.nn.adapterframework.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(javax.transaction.TransactionManager transactionManager)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
isTransactionAvailable()
Connections were not always closed, because the super implementation of this method returns false too often.
-
-
-
Method Detail
-
isTransactionAvailable
public boolean isTransactionAvailable() throws javax.jms.JMSException
Connections were not always closed, because the super implementation of this method returns false too often.ConnectionProxy.close()
andSessionProxy.close()
both call this method before attempting to close the connection. When the connection is marked asSTATUS_ROLLEDBACK
this method will return true, claiming it's available. This scenario happened when a JMSMessage was marked for rollback by theReaperThread
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()
theinternal connection status
isconverted
to ajavax.transaction.Status
. Because of the conversion the actual state is lost, andActionStatus.ABORTED
connections are marked asSTATUS_ROLLEDBACK
.- Specified by:
isTransactionAvailable
in interfaceorg.jboss.narayana.jta.jms.TransactionHelper
- Overrides:
isTransactionAvailable
in classorg.jboss.narayana.jta.jms.TransactionHelperImpl
- Throws:
javax.jms.JMSException
-
-