Author: kfujino Date: Mon Mar 12 07:09:09 2018 New Revision: 1826512 URL: http://svn.apache.org/viewvc?rev=1826512&view=rev Log: Ensure that parameters have been cleared when PreparedStatement and/or CallableStatement are cached.
Modified: tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/interceptor/StatementCache.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/interceptor/StatementCache.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/interceptor/StatementCache.java?rev=1826512&r1=1826511&r2=1826512&view=diff ============================================================================== --- tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/interceptor/StatementCache.java (original) +++ tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/interceptor/StatementCache.java Mon Mar 12 07:09:09 2018 @@ -18,8 +18,8 @@ package org.apache.tomcat.jdbc.pool.inte import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.sql.PreparedStatement; import java.sql.ResultSet; -import java.sql.Statement; import java.util.Arrays; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -175,7 +175,7 @@ public class StatementCache extends Stat boolean process = process(this.types, method, false); if (process) { Object result = null; - CachedStatement statementProxy = new CachedStatement((Statement)statement,sql); + CachedStatement statementProxy = new CachedStatement((PreparedStatement)statement,sql); result = constructor.newInstance(new Object[] { statementProxy }); statementProxy.setActualProxy(result); statementProxy.setConnection(proxy); @@ -260,10 +260,10 @@ public class StatementCache extends Stat return cache.size(); } - protected class CachedStatement extends StatementDecoratorInterceptor.StatementProxy<Statement> { + protected class CachedStatement extends StatementDecoratorInterceptor.StatementProxy<PreparedStatement> { boolean cached = false; CacheKey key; - public CachedStatement(Statement parent, String sql) { + public CachedStatement(PreparedStatement parent, String sql) { super(parent, sql); } @@ -281,6 +281,9 @@ public class StatementCache extends Stat if (result != null && !result.isClosed()) { result.close(); } + // clear parameter + getDelegate().clearParameters(); + //create a new facade Object actualProxy = getConstructor().newInstance(new Object[] { proxy }); proxy.setActualProxy(actualProxy); Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1826512&r1=1826511&r2=1826512&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Mon Mar 12 07:09:09 2018 @@ -84,6 +84,11 @@ <add> Enable clearing of <code>SQLWarning</code> via JMX. (kfujino) </add> + <fix> + Ensure that parameters have been cleared when + <code>PreparedStatement</code> and/or <code>CallableStatement</code> are + cached. (kfujino) + </fix> </changelog> </subsection> <subsection name="Other"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org