[jboss-cvs] JBossAS SVN: r107273 - in projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager: tx and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Aug 2 12:52:57 EDT 2010


Author: jesper.pedersen
Date: 2010-08-02 12:52:56 -0400 (Mon, 02 Aug 2010)
New Revision: 107273

Modified:
   projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/ManagedConnectionPool.java
   projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/SubPoolContext.java
   projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManager.java
Log:
[JBJCA-393] Lazy initialization fix

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/ManagedConnectionPool.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/ManagedConnectionPool.java	2010-08-02 16:45:37 UTC (rev 107272)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/ManagedConnectionPool.java	2010-08-02 16:52:56 UTC (rev 107273)
@@ -26,6 +26,7 @@
 import org.jboss.jca.core.connectionmanager.listener.ConnectionListener;
 import org.jboss.jca.core.connectionmanager.listener.ConnectionListenerFactory;
 import org.jboss.jca.core.connectionmanager.listener.ConnectionState;
+import org.jboss.jca.core.connectionmanager.pool.SubPoolContext;
 import org.jboss.jca.core.connectionmanager.pool.api.PoolConfiguration;
 import org.jboss.jca.core.connectionmanager.pool.idle.IdleConnectionRemovalSupport;
 import org.jboss.jca.core.connectionmanager.pool.idle.IdleRemover;
@@ -88,6 +89,9 @@
    /** The connection listener factory */
    private final ConnectionListenerFactory clf;
 
+   /** The subpool */
+   private final SubPoolContext subPool;
+
    /** The default subject */
    private final Subject defaultSubject;
 
@@ -129,9 +133,10 @@
     * @param subject the subject
     * @param cri the connection request info
     * @param pc the pool configuration
+    * @param spc The subpool context
     */
    public ManagedConnectionPool(ManagedConnectionFactory mcf, ConnectionListenerFactory clf, Subject subject,
-                                ConnectionRequestInfo cri, PoolConfiguration pc)
+                                ConnectionRequestInfo cri, PoolConfiguration pc, SubPoolContext spc)
    {
       if (mcf == null)
          throw new IllegalArgumentException("MCF is null");
@@ -142,8 +147,12 @@
       if (pc == null)
          throw new IllegalArgumentException("PoolConfiguration is null");
 
+      if (pc == null)
+         throw new IllegalArgumentException("SubPoolContext is null");
+
       this.mcf = mcf;
       this.clf = clf;
+      this.subPool = spc;
       this.defaultSubject = subject;
       this.defaultCri = cri;
       this.poolConfiguration = pc;
@@ -155,6 +164,15 @@
          PoolFiller.fillPool(this);
       }
    }
+
+   /**
+    * Get the subpool context
+    * @return The pool
+    */
+   public SubPoolContext getSubPool()
+   {
+      return subPool;
+   }
    
    /**
     * Returns a connection listener that wraps managed connection.

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/SubPoolContext.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/SubPoolContext.java	2010-08-02 16:45:37 UTC (rev 107272)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/SubPoolContext.java	2010-08-02 16:52:56 UTC (rev 107273)
@@ -36,7 +36,7 @@
  * Sub-pool context. 
  * 
  * @author <a href="mailto:gurkanerdogdu at yahoo.com">Gurkan Erdogdu</a>
- * @version $Rev: $
+ * @author <a href="mailto:jesper.pedersen at jboss.org">Jesper Pedersen</a>
  */
 public class SubPoolContext
 {
@@ -59,7 +59,7 @@
    public SubPoolContext(TransactionManager tm, ManagedConnectionFactory mcf, ConnectionListenerFactory clf, 
                          Subject subject, ConnectionRequestInfo cri, PoolConfiguration pc)
    {
-      subPool = new ManagedConnectionPool(mcf, clf, subject, cri, pc);
+      subPool = new ManagedConnectionPool(mcf, clf, subject, cri, pc, this);
       if (tm != null)
       {
          trackByTx = new TransactionLocal(tm);  

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManager.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManager.java	2010-08-02 16:45:37 UTC (rev 107272)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManager.java	2010-08-02 16:52:56 UTC (rev 107273)
@@ -26,6 +26,8 @@
 import org.jboss.jca.core.connectionmanager.ConnectionRecord;
 import org.jboss.jca.core.connectionmanager.listener.ConnectionListener;
 import org.jboss.jca.core.connectionmanager.listener.TxConnectionListener;
+import org.jboss.jca.core.connectionmanager.pool.ManagedConnectionPool;
+import org.jboss.jca.core.connectionmanager.pool.SubPoolContext;
 import org.jboss.jca.core.connectionmanager.xa.LocalXAResource;
 import org.jboss.jca.core.connectionmanager.xa.XAResourceWrapperImpl;
 
@@ -49,6 +51,7 @@
 import javax.transaction.xa.XAException;
 import javax.transaction.xa.XAResource;
 
+import org.jboss.tm.TransactionLocal;
 import org.jboss.tm.TransactionTimeoutConfiguration;
 import org.jboss.tm.TxUtils;
 import org.jboss.util.NestedRuntimeException;
@@ -373,7 +376,7 @@
     */
    public void transactionStarted(Collection<ConnectionRecord> crs) throws SystemException
    {
-      Set<ConnectionListener> cls = new HashSet<ConnectionListener>();
+      Set<ConnectionListener> cls = new HashSet<ConnectionListener>(crs.size());
       for (Iterator<ConnectionRecord> i = crs.iterator(); i.hasNext(); )
       {
          ConnectionRecord cr = i.next();
@@ -382,6 +385,31 @@
          {
             cls.add(cl);
             cl.enlist();
+
+            if (!isInterleaving())
+            {
+               cl.setTrackByTx(true);
+               ManagedConnectionPool mcp = (ManagedConnectionPool)cl.getContext();
+               SubPoolContext subPool = mcp.getSubPool();
+               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();
+               }
+            }
          }
       }
    }



More information about the jboss-cvs-commits mailing list