You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by fh...@apache.org on 2008/11/17 05:42:57 UTC

svn commit: r718171 - in /tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool: ConnectionPool.java JdbcInterceptor.java PoolProperties.java jmx/ConnectionPoolMBean.java

Author: fhanik
Date: Sun Nov 16 20:42:57 2008
New Revision: 718171

URL: http://svn.apache.org/viewvc?rev=718171&view=rev
Log:
Add first stab in letting interceptors have dynamic attributes

Modified:
    tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java
    tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/JdbcInterceptor.java
    tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PoolProperties.java
    tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/jmx/ConnectionPoolMBean.java

Modified: tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java?rev=718171&r1=718170&r2=718171&view=diff
==============================================================================
--- tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java (original)
+++ tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java Sun Nov 16 20:42:57 2008
@@ -122,12 +122,12 @@
             //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;

Modified: tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/JdbcInterceptor.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/JdbcInterceptor.java?rev=718171&r1=718170&r2=718171&view=diff
==============================================================================
--- tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/JdbcInterceptor.java (original)
+++ tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/JdbcInterceptor.java Sun Nov 16 20:42:57 2008
@@ -18,6 +18,10 @@
 
 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  static final String CLOSE_VAL = "close";
     public  static final String TOSTRING_VAL = "toString";
     public  static final String ISCLOSED_VAL = "isClosed"; 
-
+    
+    protected List<InterceptorProperty> properties = null; 
+    
     private JdbcInterceptor next = null;
 
     public JdbcInterceptor() {
@@ -55,4 +61,13 @@
      * @param con - the pooled connection
      */
     public abstract void reset(ConnectionPool parent, PooledConnection con);
+
+    public List<InterceptorProperty> getProperties() {
+        return properties;
+    }
+
+    public void setProperties(List<InterceptorProperty> properties) {
+        this.properties = properties;
+    }
+    
 }

Modified: tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PoolProperties.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PoolProperties.java?rev=718171&r1=718170&r2=718171&view=diff
==============================================================================
--- tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PoolProperties.java (original)
+++ tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PoolProperties.java Sun Nov 16 20:42:57 2008
@@ -18,8 +18,11 @@
 
 
 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 @@
     private String jdbcInterceptors=null;
     private boolean fairQueue = false;
 
+    private InterceptorDefinition[] interceptors = null;
+    
     public boolean isFairQueue() {
         return fairQueue;
     }
@@ -201,11 +206,34 @@
         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<interceptorValues.length; i++) {
+                    int propIndex = interceptorValues[i].indexOf("(");
+                    if (propIndex<0) {
+                        definitions[i] = new InterceptorDefinition(interceptorValues[i]);
+                    } else {
+                        String name = interceptorValues[i].substring(0,propIndex);
+                        definitions[i] = new InterceptorDefinition(name);
+                        String propsAsString = interceptorValues[i].substring(propIndex+1, interceptorValues[i].length());
+                        String[] props = propsAsString.split(",");
+                        for (int j=0; j<props.length; j++) {
+                            int pidx = props[j].indexOf("=");
+                            String propName = props[j].substring(0,pidx);
+                            String propValue = props[j].substring(pidx+1);
+                            definitions[i].addProperty(new InterceptorProperty(propName,propValue));
+                        }
+                    }
+                }
+                interceptors = definitions;
+            }
         }
+        return interceptors;
     }
 
     public void setAccessToUnderlyingConnectionAllowed(boolean
@@ -337,6 +365,7 @@
 
     public void setJdbcInterceptors(String jdbcInterceptors) {
         this.jdbcInterceptors = jdbcInterceptors;
+        this.interceptors = null;
     }
 
     public String toString() {
@@ -395,4 +424,45 @@
         result = result || (isTestWhileIdle() && getValidationQuery()!=null);
         return result;
     }
+    
+    public static class InterceptorDefinition {
+        protected String className;
+        protected List<InterceptorProperty> properties = new ArrayList<InterceptorProperty>();
+
+        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<InterceptorProperty> 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;
+        }
+    }
+
 }

Modified: tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/jmx/ConnectionPoolMBean.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/jmx/ConnectionPoolMBean.java?rev=718171&r1=718170&r2=718171&view=diff
==============================================================================
--- tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/jmx/ConnectionPoolMBean.java (original)
+++ tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/jmx/ConnectionPoolMBean.java Sun Nov 16 20:42:57 2008
@@ -46,6 +46,11 @@
     public void testIdle();
 
     //=================================================================
+    //       POOL NOTIFICATIONS
+    //=================================================================
+
+    
+    //=================================================================
     //       POOL PROPERTIES
     //=================================================================
     public Properties getDbProperties();



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org