[jboss-cvs] JBossAS SVN: r112556 - projects/jboss-jca/branches/Branch_1_0/core/src/main/java/org/jboss/jca/core/connectionmanager/tx.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Jan 6 10:55:00 EST 2012


Author: jesper.pedersen
Date: 2012-01-06 10:55:00 -0500 (Fri, 06 Jan 2012)
New Revision: 112556

Modified:
   projects/jboss-jca/branches/Branch_1_0/core/src/main/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManagerImpl.java
Log:
[JBJCA-725] NPE in TxConnectionManagerImpl

Modified: projects/jboss-jca/branches/Branch_1_0/core/src/main/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManagerImpl.java
===================================================================
--- projects/jboss-jca/branches/Branch_1_0/core/src/main/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManagerImpl.java	2012-01-06 15:53:48 UTC (rev 112555)
+++ projects/jboss-jca/branches/Branch_1_0/core/src/main/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManagerImpl.java	2012-01-06 15:55:00 UTC (rev 112556)
@@ -41,6 +41,7 @@
 import java.util.HashSet;
 import java.util.Set;
 import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
 
 import javax.resource.ResourceException;
 import javax.resource.spi.ConnectionRequestInfo;
@@ -388,8 +389,8 @@
                ManagedConnectionPool mcp = (ManagedConnectionPool)cl.getContext();
                Transaction tx = transactionManager.getTransaction();
 
-               // The lock will be initialized when the first connection listener is obtained
-               Lock lock = (Lock)transactionSynchronizationRegistry.getResource(LockKey.INSTANCE);
+               // The lock may need to be initialized if we are in the first lazy enlistment
+               Lock lock = getLock();
                try
                {
                   lock.lockInterruptibly();
@@ -414,6 +415,49 @@
    }
 
    /**
+    * Init lock
+    * @return The lock
+    */
+   private synchronized Lock initLock()
+   {
+      if (transactionSynchronizationRegistry != null && transactionSynchronizationRegistry.getTransactionKey() != null)
+      {
+         if (transactionSynchronizationRegistry.getResource(LockKey.INSTANCE) == null)
+         {
+            Lock lock = new ReentrantLock(true);
+            transactionSynchronizationRegistry.putResource(LockKey.INSTANCE, lock);
+            return lock;
+         }
+         else
+         {
+            return (Lock)transactionSynchronizationRegistry.getResource(LockKey.INSTANCE);
+         }
+      }
+
+      return null;
+   }
+
+   /**
+    * Get lock
+    * @return The lock
+    */
+   private Lock getLock()
+   {
+      Lock result = null;
+
+      if (transactionSynchronizationRegistry != null && transactionSynchronizationRegistry.getTransactionKey() != null)
+      {
+         result = (Lock)transactionSynchronizationRegistry.getResource(LockKey.INSTANCE);
+         if (result == null)
+         {
+            result = initLock();
+         }
+      }
+
+      return result;
+   }
+
+   /**
     * {@inheritDoc}
     */
    protected void managedConnectionReconnected(ConnectionListener cl) throws ResourceException



More information about the jboss-cvs-commits mailing list