From 9031c1c94fd3ff1490c1b22f8bb5d1c2cb60355e Mon Sep 17 00:00:00 2001 From: fhanik Date: Mon, 17 Nov 2008 04:42:57 +0000 Subject: [PATCH] Add first stab in letting interceptors have dynamic attributes git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@718171 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/tomcat/jdbc/pool/ConnectionPool.java | 6 +- .../apache/tomcat/jdbc/pool/JdbcInterceptor.java | 17 ++++- .../apache/tomcat/jdbc/pool/PoolProperties.java | 78 ++++++++++++++++++++-- .../tomcat/jdbc/pool/jmx/ConnectionPoolMBean.java | 5 ++ 4 files changed, 98 insertions(+), 8 deletions(-) diff --git a/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java b/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java index ba19a65fc..cec75c829 100644 --- a/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java +++ b/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java @@ -122,12 +122,12 @@ public class ConnectionPool { //build the proxy handler handler = new ProxyConnection(this,con); //set up the interceptor chain - String[] proxies = getPoolProperties().getJdbcInterceptorsAsArray(); + PoolProperties.InterceptorDefinition[] proxies = getPoolProperties().getJdbcInterceptorsAsArray(); for (int i=proxies.length-1; i>=0; i--) { try { JdbcInterceptor interceptor = - (JdbcInterceptor) Class.forName(proxies[i], true, //should this be the class loader? - Thread.currentThread().getContextClassLoader()).newInstance(); + (JdbcInterceptor) Class.forName(proxies[i].getClassName(), true, Thread.currentThread().getContextClassLoader()).newInstance(); //should this be the class loader? + interceptor.setProperties(proxies[i].getProperties()); interceptor.setNext(handler); interceptor.reset(this, con); //initialize handler = interceptor; diff --git a/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/JdbcInterceptor.java b/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/JdbcInterceptor.java index 171d00308..8b77e7eab 100644 --- a/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/JdbcInterceptor.java +++ b/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/JdbcInterceptor.java @@ -18,6 +18,10 @@ package org.apache.tomcat.jdbc.pool; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +import org.apache.tomcat.jdbc.pool.PoolProperties.InterceptorProperty; /** * @author Filip Hanik @@ -27,7 +31,9 @@ public abstract class JdbcInterceptor implements InvocationHandler { public static final String CLOSE_VAL = "close"; public static final String TOSTRING_VAL = "toString"; public static final String ISCLOSED_VAL = "isClosed"; - + + protected List properties = null; + private JdbcInterceptor next = null; public JdbcInterceptor() { @@ -55,4 +61,13 @@ public abstract class JdbcInterceptor implements InvocationHandler { * @param con - the pooled connection */ public abstract void reset(ConnectionPool parent, PooledConnection con); + + public List getProperties() { + return properties; + } + + public void setProperties(List properties) { + this.properties = properties; + } + } diff --git a/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PoolProperties.java b/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PoolProperties.java index b3f8ece2e..5ce697002 100644 --- a/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PoolProperties.java +++ b/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PoolProperties.java @@ -18,8 +18,11 @@ package org.apache.tomcat.jdbc.pool; import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; import java.util.Properties; import java.util.concurrent.atomic.AtomicInteger; + /** * @author Filip Hanik * @@ -61,6 +64,8 @@ public class PoolProperties { private String jdbcInterceptors=null; private boolean fairQueue = false; + private InterceptorDefinition[] interceptors = null; + public boolean isFairQueue() { return fairQueue; } @@ -201,11 +206,34 @@ public class PoolProperties { return jdbcInterceptors; } - public String[] getJdbcInterceptorsAsArray() { - if (jdbcInterceptors==null) return new String[0]; - else { - return jdbcInterceptors.split(";"); + public InterceptorDefinition[] getJdbcInterceptorsAsArray() { + if (interceptors == null) { + if (jdbcInterceptors==null) { + interceptors = new InterceptorDefinition[0]; + } else { + String[] interceptorValues = jdbcInterceptors.split(";"); + InterceptorDefinition[] definitions = new InterceptorDefinition[interceptorValues.length]; + for (int i=0; i properties = new ArrayList(); + + public InterceptorDefinition(String className) { + this.className = className; + } + + public String getClassName() { + return className; + } + public void addProperty(String name, String value) { + InterceptorProperty p = new InterceptorProperty(name,value); + addProperty(p); + } + + public void addProperty(InterceptorProperty p) { + properties.add(p); + } + + public List getProperties() { + return properties; + } + } + + public static class InterceptorProperty { + String name; + String value; + public InterceptorProperty(String name, String value) { + this.name = name; + this.value = value; + } + public String getName() { + return name; + } + public String getValue() { + return value; + } + } + } diff --git a/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/jmx/ConnectionPoolMBean.java b/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/jmx/ConnectionPoolMBean.java index 2d60142d8..232b71f42 100644 --- a/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/jmx/ConnectionPoolMBean.java +++ b/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/jmx/ConnectionPoolMBean.java @@ -46,6 +46,11 @@ public interface ConnectionPoolMBean { public void testIdle(); //================================================================= + // POOL NOTIFICATIONS + //================================================================= + + + //================================================================= // POOL PROPERTIES //================================================================= public Properties getDbProperties(); -- 2.11.0