Uploaded image for project: 'Jackrabbit Content Repository'
  1. Jackrabbit Content Repository
  2. JCR-3425

XAAwareRWLock implementation fails with IllegalStateException on JBoss AS7

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.4.3, 2.5.1
    • Fix Version/s: 2.2.13, 2.4.4, 2.5.3
    • Labels:
      None
    • Environment:
      JBoss AS7 7.1.1.Final

      Description

      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.

        Attachments

        1. JCR-3425.patch
          5 kB
          Claus Köll

          Activity

            People

            • Assignee:
              c_koell Claus Köll
              Reporter:
              centner Martin Centner
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: