Implemented closure notification. Turns out generics only work on an instance level...
authorfhanik <fhanik@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 11 Dec 2008 05:49:10 +0000 (05:49 +0000)
committerfhanik <fhanik@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 11 Dec 2008 05:49:10 +0000 (05:49 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@725586 13f79535-47bb-0310-9956-ffa450edef68

modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java
modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/JdbcInterceptor.java
modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PoolProperties.java
modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/interceptor/SlowQueryReport.java

index b74dfee..6e41ed7 100644 (file)
@@ -291,7 +291,14 @@ public class ConnectionPool {
         }
         size.set(0);
         if (this.getPoolProperties().isJmxEnabled()) stopJmx();
-        
+        PoolProperties.InterceptorDefinition[] proxies = getPoolProperties().getJdbcInterceptorsAsArray();
+        for (int i=0; i<proxies.length; i++) {
+            try {
+                proxies[i].getInterceptorClass().newInstance().poolClosed(this);
+            }catch (Exception x) {
+                log.debug("Unable to inform interceptor of pool closure.",x);
+            }
+        }
     } //closePool
 
 
index f28e95e..176a1f3 100644 (file)
@@ -90,4 +90,14 @@ public abstract class JdbcInterceptor implements InvocationHandler {
     public void setUseEquals(boolean useEquals) {
         this.useEquals = useEquals;
     }
+    
+    /**
+     * This method is invoked by a connection pool when the pool is closed.
+     * Interceptor classes can override this method if they keep static
+     * variables or other tracking means around.
+     * <b>This method is only invoked on a single instance of the interceptor, and not on every instance created.</b>
+     * @param pool - the pool that is being closed.
+     */
+    public void poolClosed(ConnectionPool pool) {
+    }
 }
index 7c04f8a..d0dc7b3 100644 (file)
@@ -454,9 +454,9 @@ public class PoolProperties {
         
         public Class<? extends JdbcInterceptor> getInterceptorClass() throws ClassNotFoundException {
             if (clazz==null) {
-                clazz = Class.forName(getClassName(), true, JdbcInterceptor.class.getClassLoader());
+                clazz = Class.forName(getClassName(), true, this.getClass().getClassLoader());
             }
-            return clazz;
+            return (Class<? extends JdbcInterceptor>)clazz;
         }
     } 
     
index 6a47ac5..1fdd35b 100644 (file)
@@ -184,6 +184,16 @@ public class SlowQueryReport extends AbstractCreateStatementInterceptor  {
         }
     }
     
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void poolClosed(ConnectionPool pool) {
+        perPoolStats.remove(pool.getName());
+        super.poolClosed(pool);
+    }
+
     public CompositeData[] getSlowQueriesCD() {
         return null;
     }