public class NarayanaTransactionHelper
extends org.jboss.narayana.jta.jms.TransactionHelperImpl
Constructor and Description |
---|
NarayanaTransactionHelper(TransactionManager transactionManager) |
Modifier and Type | Method and Description |
---|---|
boolean |
isTransactionAvailable()
Connections were not always closed, because the super implementation of this method returns false too often.
|
public NarayanaTransactionHelper(TransactionManager transactionManager)
public boolean isTransactionAvailable() throws javax.jms.JMSException
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
.
isTransactionAvailable
in interface org.jboss.narayana.jta.jms.TransactionHelper
isTransactionAvailable
in class org.jboss.narayana.jta.jms.TransactionHelperImpl
javax.jms.JMSException
Copyright © 2023 Frank!Framework. All rights reserved.