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