[jboss-svn-commits] JBL Code SVN: r32642 - labs/jbosstm/workspace/whitingjr/trunk/performance/src/main/java/org/jboss/jbossts/performance/connectionmanager.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Apr 25 05:46:09 EDT 2010


Author: whitingjr
Date: 2010-04-25 05:46:09 -0400 (Sun, 25 Apr 2010)
New Revision: 32642

Modified:
   labs/jbosstm/workspace/whitingjr/trunk/performance/src/main/java/org/jboss/jbossts/performance/connectionmanager/LocalTXCachedDataSource.java
Log:
Completed implementation.

Modified: labs/jbosstm/workspace/whitingjr/trunk/performance/src/main/java/org/jboss/jbossts/performance/connectionmanager/LocalTXCachedDataSource.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/performance/src/main/java/org/jboss/jbossts/performance/connectionmanager/LocalTXCachedDataSource.java	2010-04-24 17:17:01 UTC (rev 32641)
+++ labs/jbosstm/workspace/whitingjr/trunk/performance/src/main/java/org/jboss/jbossts/performance/connectionmanager/LocalTXCachedDataSource.java	2010-04-25 09:46:09 UTC (rev 32642)
@@ -22,10 +22,62 @@
 
 package org.jboss.jbossts.performance.connectionmanager;
 
+import java.sql.Connection;
+
+import javax.resource.ResourceException;
+import javax.resource.spi.ConnectionRequestInfo;
+import javax.resource.spi.ManagedConnectionFactory;
+
+import org.apache.commons.lang.reflect.FieldUtils;
 import org.jboss.resource.adapter.jdbc.local.LocalTxDataSource;
+import org.jboss.resource.connectionmanager.TxConnectionManager;
 
 public class LocalTXCachedDataSource extends LocalTxDataSource
 {
+   private TxConnectionManager txConnManager ;
+   public LocalTXCachedDataSource()
+   {
+   }
+   
+   @Override
+   public void start() throws Exception
+   {
+      super.start();
+      this.txConnManager = (TxConnectionManager)FieldUtils.readDeclaredField(this, "connectionManager", true);
+      Object datasource = txConnManager.getPoolingStrategy().getManagedConnectionFactory().createConnectionFactory(new CachedLocalTxConnectionManager());
+      FieldUtils.writeDeclaredField(this, "datasource", datasource, true);
+      bindConnectionFactory();
+   }
 
-   
+   public class CachedLocalTxConnectionManager implements javax.resource.spi.ConnectionManager
+   {
+      private ThreadLocal<Object> cachedConnection = new ThreadLocal<Object>();
+      /**
+       * 
+       */
+      private static final long serialVersionUID = -3212026083826937031L;
+
+      @Override
+      public Object allocateConnection(ManagedConnectionFactory mcf,
+            ConnectionRequestInfo cxRequestInfo) throws ResourceException
+      {
+         if (null == this.cachedConnection.get())
+         {
+            this.cachedConnection.set(txConnManager.allocateConnection(mcf, cxRequestInfo));
+         }
+         try
+         {
+            if (((Connection)this.cachedConnection.get()).isClosed())
+            {/* renew the connection, the previous user of the connection really did want to close the
+            connection object. */
+               this.cachedConnection.set(txConnManager.allocateConnection(mcf, cxRequestInfo));
+            }
+         }
+         catch (Exception e)
+         {
+            throw new ResourceException(e);
+         }
+         return this.cachedConnection.get(); 
+      }
+   }
 }



More information about the jboss-svn-commits mailing list