Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=59850
Ensure that the ResultSet is closed when enabling the StatementCache interceptor.
git-svn-id: https://svn.apache.org/repos/asf/tomcat/tc8.0.x/trunk@1753456 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/interceptor/StatementCache.java b/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/interceptor/StatementCache.java
index 7827563..cf6ff6c 100644
--- a/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/interceptor/StatementCache.java
+++ b/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/interceptor/StatementCache.java
@@ -18,6 +18,7 @@
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -237,6 +238,11 @@
//cache a proxy so that we don't reuse the facade
CachedStatement proxy = new CachedStatement(getDelegate(),getSql());
try {
+ // clear Resultset
+ ResultSet result = getDelegate().getResultSet();
+ if (result != null && !result.isClosed()) {
+ result.close();
+ }
//create a new facade
Object actualProxy = getConstructor().newInstance(new Object[] { proxy });
proxy.setActualProxy(actualProxy);
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index a9fe4c6..8f0f401 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -185,6 +185,10 @@
remove the check code of the execution interval in the task that has
been scheduled. (kfujino)
</fix>
+ <fix>
+ <bug>59850</bug>: Ensure that the <code>ResultSet</code> is closed when
+ enabling the <code>StatementCache</code> interceptor. (kfujino)
+ </fix>
</changelog>
</subsection>
<subsection name="Other">