Martin Centner created JCR-3425:
-----------------------------------

             Summary: XAAwareRWLock implementation fails with 
IllegalStateException on JBoss AS7
                 Key: JCR-3425
                 URL: https://issues.apache.org/jira/browse/JCR-3425
             Project: Jackrabbit Content Repository
          Issue Type: Bug
          Components: jackrabbit-jca
    Affects Versions: 2.4.3
         Environment: JBoss AS7 7.1.1.Final
            Reporter: Martin Centner


The class XAAwareRWLock uses a HashMap readers_. The static function 
TransactionContext.getCurrentThreadId() is used to obtain an object currentId 
used as key in for the HashMap. When running under a transaction the currentId 
is set to Xid.getGlobalTransactionId which returns a byte[]. 

However, the class 
org.jboss.jca.core.spi.transaction.xa.XidWrapper.getGlobalTransactionId() 
returns globalTransactionId.clone() - it returns a new instance of byte[] on 
every invocation and the hashCode of the byte[] changes. Therefore, 
readers_.get(currentId) returns null for the second invocation in the same 
transaction and the result ist an IllegalStateTransaction:

 java.lang.IllegalStateException
        at 
org.apache.jackrabbit.core.version.VersioningLock$XAAwareRWLock.endRead(VersioningLock.java:167)
 [jackrabbit-core-2.4.3.jar:2.4.3]
...

I suggest using a wrapper for the globalTransactionId byte[] that computes the 
hashCode on the contents of the byte instead of the object identity.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to