Index: src/main/org/jboss/resource/connectionmanager/TxConnectionManager.java =================================================================== --- src/main/org/jboss/resource/connectionmanager/TxConnectionManager.java (revision 93943) +++ src/main/org/jboss/resource/connectionmanager/TxConnectionManager.java (working copy) @@ -50,6 +50,7 @@ import org.jboss.resource.connectionmanager.xa.JcaXAResourceWrapper; import org.jboss.resource.connectionmanager.xa.JcaXAResourceWrapperFactory; import org.jboss.tm.LastResource; +import org.jboss.tm.TransactionLocal; import org.jboss.tm.TransactionTimeoutConfiguration; import org.jboss.tm.TxUtils; import org.jboss.util.NestedRuntimeException; @@ -326,6 +327,29 @@ { cls.add(cl); cl.enlist(); + if(trackConnectionByTx) + { + cl.setTrackByTx(true); + InternalManagedConnectionPool imcp = (InternalManagedConnectionPool)cl.getContext(); + JBossManagedConnectionPool.SubPoolContext subPool = imcp.getSubPoolContext(); + TransactionLocal trackByTx = subPool.getTrackByTx(); + try + { + trackByTx.lock(); + } + catch (Throwable t) + { + rethrowAsSystemException("Unable to begin transaction with JCA lazy enlistment scenario", trackByTx.getTransaction(), t); + } + try + { + trackByTx.set(cl); + } + finally + { + trackByTx.unlock(); + } + } } } } Index: src/main/org/jboss/resource/connectionmanager/InternalManagedConnectionPool.java =================================================================== --- src/main/org/jboss/resource/connectionmanager/InternalManagedConnectionPool.java (revision 93943) +++ src/main/org/jboss/resource/connectionmanager/InternalManagedConnectionPool.java (working copy) @@ -84,6 +84,9 @@ /** Whether trace is enabled */ private final boolean trace; + + + private JBossManagedConnectionPool.SubPoolContext subPoolContext; /** Stats */ private final Counter connectionCounter = new Counter(); @@ -110,7 +113,7 @@ * @param log the log */ protected InternalManagedConnectionPool(ManagedConnectionFactory mcf, ConnectionListenerFactory clf, - Subject subject, ConnectionRequestInfo cri, PoolParams poolParams, Logger log) + Subject subject, ConnectionRequestInfo cri, PoolParams poolParams, Logger log, JBossManagedConnectionPool.SubPoolContext subPoolContext) { this.mcf = mcf; this.clf = clf; @@ -120,6 +123,7 @@ this.maxSize = this.poolParams.maxSize; this.log = log; + this.subPoolContext = subPoolContext; this.trace = log.isTraceEnabled(); cls = new ArrayList(this.maxSize); permits = new FIFOSemaphore(this.maxSize); @@ -756,6 +760,10 @@ return poolParams.minSize; } + public JBossManagedConnectionPool.SubPoolContext getSubPoolContext() + { + return subPoolContext; + } public static class PoolParams { public int minSize = 0; Index: src/main/org/jboss/resource/connectionmanager/JBossManagedConnectionPool.java =================================================================== --- src/main/org/jboss/resource/connectionmanager/JBossManagedConnectionPool.java (revision 93943) +++ src/main/org/jboss/resource/connectionmanager/JBossManagedConnectionPool.java (working copy) @@ -369,7 +369,7 @@ public SubPoolContext(TransactionManager tm, ManagedConnectionFactory mcf, ConnectionListenerFactory clf, Subject subject, ConnectionRequestInfo cri, PoolParams poolParams, Logger log) { - subPool = new InternalManagedConnectionPool(mcf, clf, subject, cri, poolParams, log); + subPool = new InternalManagedConnectionPool(mcf, clf, subject, cri, poolParams, log, this); if (tm != null) trackByTx = new TransactionLocal(tm); }