TransactionContext produces errors in concurrent environment
------------------------------------------------------------

                 Key: AMQ-3465
                 URL: https://issues.apache.org/jira/browse/AMQ-3465
             Project: ActiveMQ
          Issue Type: Bug
          Components: Broker
    Affects Versions: 5.5.0
         Environment: Windows XP SP2, Oracle JDK 1.6.0_23
            Reporter: Alexei Akimov


Method "isInXATransaction" of class org.apache.activemq.TransactionContext 
seems to be implemeted incorrectly. Here is the code:

public boolean isInXATransaction() {
    return (transactionId != null && transactionId.isXATransaction()) || 
!ENDED_XA_TRANSACTION_CONTEXTS.isEmpty();
}

Map "ENDED_XA_TRANSACTION_CONTEXTS" is a static field. TransactionContext 
instances are used for both outbound and inbound communications. Suppose a 
thread creating a new non-transactional session. It calls isInXATransaction and 
gets true, just because another thread is completing transactional message 
delivery at the same time. After XAResource.end() call but before 
XAResource.commit() call the map is not empty and it results in a JMSException 
in the first thread (see 
org.apache.activemq.ra.ManagedTransactionContext.setUseSharedTxContext(boolean)").



--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to