[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