[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