[Jboss-cvs] JBossAS SVN: r56242 - branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/connectionmanager

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Aug 25 03:34:57 EDT 2006


Author: weston.price at jboss.com
Date: 2006-08-25 03:34:56 -0400 (Fri, 25 Aug 2006)
New Revision: 56242

Modified:
   branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/connectionmanager/BaseConnectionManager2.java
   branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/connectionmanager/ConnectionListener.java
   branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/connectionmanager/InternalManagedConnectionPool.java
   branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/connectionmanager/JBossManagedConnectionPool.java
   branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/connectionmanager/JBossManagedConnectionPoolMBean.java
Log:
[JBAS-3453] StaleConnection and PoolPurge policy implementation.

Modified: branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/connectionmanager/BaseConnectionManager2.java
===================================================================
--- branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/connectionmanager/BaseConnectionManager2.java	2006-08-25 07:34:42 UTC (rev 56241)
+++ branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/connectionmanager/BaseConnectionManager2.java	2006-08-25 07:34:56 UTC (rev 56242)
@@ -44,6 +44,7 @@
 import org.jboss.mx.util.JMXExceptionDecoder;
 import org.jboss.mx.util.MBeanServerLocator;
 import org.jboss.resource.JBossResourceException;
+import org.jboss.resource.adapter.jdbc.StaleConnectionException;
 import org.jboss.security.SecurityAssociation;
 import org.jboss.security.SubjectSecurityManager;
 import org.jboss.system.ServiceMBeanSupport;
@@ -702,10 +703,14 @@
       private boolean trackByTx = false;
       
       private boolean permit = false;
-
+      
+      private boolean isStale;
+      
       protected Logger log;
+      
       protected boolean trace;
-
+      
+      
       protected BaseConnectionEventListener(ManagedConnection mc, ManagedConnectionPool mcp, Object context, Logger log)
       {
          this.mc = mc;
@@ -745,7 +750,12 @@
       {
          return lastUse < timeout;
       }
-
+      
+      public boolean isStale()
+      {
+         return isStale;
+      }
+      
       public void used()
       {
          lastUse = System.currentTimeMillis();
@@ -803,8 +813,13 @@
             if (ce != null)
             {
                Throwable t = ce.getException();
+               
                if (t == null)
                   t = new Exception("No exception was reported");
+               
+               if(t instanceof StaleConnectionException)
+                  isStale = true;
+               
                log.warn("Connection error occured: " + this, t);
             }
             else

Modified: branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/connectionmanager/ConnectionListener.java
===================================================================
--- branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/connectionmanager/ConnectionListener.java	2006-08-25 07:34:42 UTC (rev 56241)
+++ branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/connectionmanager/ConnectionListener.java	2006-08-25 07:34:56 UTC (rev 56242)
@@ -129,4 +129,6 @@
     * @param value true for owning the permit, false otherwise
     */
    void grantPermit(boolean value);
+
+   boolean isStale();
 }

Modified: branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/connectionmanager/InternalManagedConnectionPool.java
===================================================================
--- branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/connectionmanager/InternalManagedConnectionPool.java	2006-08-25 07:34:42 UTC (rev 56241)
+++ branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/connectionmanager/InternalManagedConnectionPool.java	2006-08-25 07:34:56 UTC (rev 56242)
@@ -124,7 +124,22 @@
    {
       return checkedOut.size();
    }
-
+   
+   public int getConnectionPurgeCount()
+   {
+      return connectionCounter.getConnectionPurgedCount();
+      
+   }
+   
+   public int getPoolPurgeCount()
+   {
+      return connectionCounter.getPoolPurgedCount();
+      
+   }
+   public int getStaleConnectionCount()
+   {
+      return connectionCounter.getStaleCount();
+   }
    /**
     * todo distinguish between connection dying while match called
     * and bad match strategy.  In latter case we should put it back in
@@ -327,61 +342,35 @@
       {
          if (trace)
             log.trace("Destroying returned connection " + cl);
-       
-         if(poolParams.purgePolilcy.equals(PurgePolicy.CONNECTION))
-         {
-             doDestroy(cl);        	 
-         
-         }else if(poolParams.purgePolilcy.equals(PurgePolicy.POOL))
-         {
-        	 purge(cl);
-         }
-         
+
+         purge(cl);
+                 
       }
 
    }
    
    private void purge(ConnectionListener cl)
    {
-	   List destroy = new ArrayList();
 	   
-	   if(poolParams.purgePolilcy.equals(PurgePolicy.CONNECTION))
+       if(poolParams.purgePolilcy.equals(PurgePolicy.NONE))
+       {
+          doDestroy(cl);
+       }
+       else if(poolParams.purgePolilcy.equals(PurgePolicy.CONNECTION))
 	   {
+           connectionCounter.purged();
 		   doDestroy(cl);
 		   
+	   }else if(poolParams.purgePolilcy.equals(PurgePolicy.POOL))
+	   {   
+           int purgeCount = (poolParams.destroyOutstandingOnPurge) ? checkedOut.size() + cls.size() : cls.size();
+           connectionCounter.purged(purgeCount, true);    
+           flush(poolParams.destroyOutstandingOnPurge);
+		   
 	   }else
-	   {
-		   flush(false);
-//		   //Add the current connection
-//		   destroy.add(cl);
-//		  
-//		   synchronized (cls) 
-//		   {
-//			  
-//			   while(cls.size() > 0)
-//			   {
-//				  
-//			   }
-//
-//			   for(Iterator iter = cls.iterator(); iter.hasNext();)
-//			   {
-//				   ConnectionListener purged = (ConnectionListener)iter.next();
-//				   cls.remove(purged);
-//				   destroy.add(purged);
-//			   }
-//			  
-//		   }
-//		   
-//		   
-//		   
-//		   for(Iterator iter = destroy.iterator(); iter.hasNext();)
-//		   {
-//			   ConnectionListener dl = (ConnectionListener)iter.next();
-//			   doDestroy(dl);
-//		   }
-//		   
-		   
-	   }
+       {
+	      log.warn("Invalid purge policy set for pool" + this);
+       }
 	   
    
    }
@@ -636,8 +625,10 @@
 
       public long idleTimeout = 1000 * 60 * 30; //milliseconds, 30 minutes.
       
-      //Default to connection
-      public PurgePolicy purgePolilcy = PurgePolicy.CONNECTION;
+      //Default to NONE
+      public PurgePolicy purgePolilcy = PurgePolicy.NONE;
+      
+      public boolean destroyOutstandingOnPurge = false;
    }
 
    /**
@@ -648,7 +639,13 @@
       private int created = 0;
 
       private int destroyed = 0;
-
+      
+      private int purged = 0;
+      
+      private int poolPurged = 0;
+      
+      private int staleCount = 0;
+      
       synchronized int getGuaranteedCount()
       {
          return created - destroyed;
@@ -678,5 +675,41 @@
       {
          ++destroyed;
       }
+      
+      public int getConnectionPurgedCount()
+      {
+         return purged;
+         
+      }
+      public int getPoolPurgedCount()
+      {
+         return poolPurged;
+      }
+      
+      public int getStaleCount()
+      {
+         return staleCount;
+      }
+      synchronized void poolPurged()
+      {
+         ++poolPurged;
+      }
+      
+      synchronized void purged()
+      {
+         ++purged;
+      }
+   
+      synchronized void purged(int count, boolean pool)
+      {
+         if(pool)
+            poolPurged();
+         purged += count;
+      }
+   
+      synchronized void stale()
+      {
+         ++staleCount;
+      }
    }
 }
\ No newline at end of file

Modified: branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/connectionmanager/JBossManagedConnectionPool.java
===================================================================
--- branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/connectionmanager/JBossManagedConnectionPool.java	2006-08-25 07:34:42 UTC (rev 56241)
+++ branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/connectionmanager/JBossManagedConnectionPool.java	2006-08-25 07:34:56 UTC (rev 56242)
@@ -354,6 +354,45 @@
       return (poolingStrategy == null)? 0: poolingStrategy.getConnectionDestroyedCount();
    }
    
+   public int getConnectionPurgedCount()
+   {
+      int count = 0;
+      
+      if(poolingStrategy instanceof PoolPurgeSupport)
+      {
+        PoolPurgeSupport support = (PoolPurgeSupport)poolingStrategy;
+        count = support.getConnectionPurgeCount();
+        
+      }
+      return count;
+   }
+   
+   public int getPoolPurgedCount()
+   {
+      int count = 0;
+      
+      if(poolingStrategy instanceof PoolPurgeSupport)
+      {
+        PoolPurgeSupport support = (PoolPurgeSupport)poolingStrategy;
+        count = support.getPoolPurgeCount();
+        
+      }
+      return count;
+   }
+   
+   public int getStaleConnectionCount()
+   {
+      int count = 0;
+      
+      if(poolingStrategy instanceof PoolPurgeSupport)
+      {
+        PoolPurgeSupport support = (PoolPurgeSupport)poolingStrategy;
+        count = support.getStaleConnectionCount();
+        
+      }
+      
+      return count;
+   }
    public void setPurgePolicy(String p) {
 	   
 	   PurgePolicy policy = PurgePolicy.getInstance(p);
@@ -365,6 +404,16 @@
 	   return poolParams.purgePolilcy.toString();
    }	
    
+   public boolean getDestroyOutstandingOnPurge()
+   {
+      return poolParams.destroyOutstandingOnPurge;
+   }
+   
+   public void setDestroyOutstandingOnPurge(boolean destroy)
+   {
+      poolParams.destroyOutstandingOnPurge = destroy;
+      
+   }
    public String getName()
    {
       return "JBossManagedConnectionPool";
@@ -438,7 +487,7 @@
    /**
     * The base pool implementation
     */
-   public abstract static class BasePool implements ManagedConnectionPool
+   public abstract static class BasePool implements ManagedConnectionPool, PoolPurgeSupport
    {
       /** The subpools */
       private final Map pools = new HashMap();
@@ -501,6 +550,56 @@
          this.clf = clf;
       }
       
+      public int getConnectionPurgeCount()
+      {
+         int count = 0;
+         
+         synchronized (pools)
+         {
+            
+            for (Iterator iter = pools.values().iterator(); iter.hasNext();)
+            {
+               InternalManagedConnectionPool pool = (InternalManagedConnectionPool) iter.next();
+               count += pool.getConnectionPurgeCount();
+               
+            }
+         }
+         return count;
+      }
+      
+      public int getPoolPurgeCount()
+      {
+         int count = 0;
+         
+         synchronized (pools)
+         {
+            
+            for (Iterator iter = pools.values().iterator(); iter.hasNext();)
+            {
+               InternalManagedConnectionPool pool = (InternalManagedConnectionPool) iter.next();
+               count += pool.getPoolPurgeCount();
+               
+            }
+         }
+         return count;
+      }
+      
+      public int getStaleConnectionCount()
+      {
+         int count = 0;
+         
+         synchronized (pools)
+         {
+            
+            for (Iterator iter = pools.values().iterator(); iter.hasNext();)
+            {
+               InternalManagedConnectionPool pool = (InternalManagedConnectionPool) iter.next();
+               count += pool.getStaleConnectionCount();
+               
+            }
+         }
+         return count;
+      }
       /**
        * Return the inuse count
        * 

Modified: branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/connectionmanager/JBossManagedConnectionPoolMBean.java
===================================================================
--- branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/connectionmanager/JBossManagedConnectionPoolMBean.java	2006-08-25 07:34:42 UTC (rev 56241)
+++ branches/JBoss_4_0_3_SP1_JBAS_3453/connector/src/main/org/jboss/resource/connectionmanager/JBossManagedConnectionPoolMBean.java	2006-08-25 07:34:56 UTC (rev 56242)
@@ -134,12 +134,43 @@
    int getConnectionCreatedCount();
 
    /**
-    * Retrieve the destrooyed count.
+    * Retrieve the destroyed count.
     * @return the destroyed count
     */
    int getConnectionDestroyedCount();
    
+   /**
+    * Set the purge policy
+    * 
+    * @param policy the purge policy
+    */
    public void setPurgePolicy(String policy);
    
+   /**
+    * Get the purge policy
+    * 
+    * @return the purge policy
+    */
    public String getPurgePolicy();
+
+   /**
+    * FIXME Comment this
+    * 
+    */
+   public boolean getDestroyOutstandingOnPurge();
+   
+   /**
+    * FIXME Comment this
+    * 
+    * @param destroy
+    * @return
+    */
+   public void setDestroyOutstandingOnPurge(boolean destroy);
+   
+   public int getConnectionPurgedCount();
+   
+   public int getPoolPurgedCount();
+   
+   public int getStaleConnectionCount();
+   
 }




More information about the jboss-cvs-commits mailing list