Author: fhanik
Date: Thu Aug  7 21:47:11 2014
New Revision: 1616602

URL: http://svn.apache.org/r1616602
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=54537
Use a linked list to handle O(1) insert and remove operations.

Modified:
    
tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/interceptor/StatementFinalizer.java
    
tomcat/trunk/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/StatementFinalizerTest.java

Modified: 
tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/interceptor/StatementFinalizer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/interceptor/StatementFinalizer.java?rev=1616602&r1=1616601&r2=1616602&view=diff
==============================================================================
--- 
tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/interceptor/StatementFinalizer.java
 (original)
+++ 
tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/interceptor/StatementFinalizer.java
 Thu Aug  7 21:47:11 2014
@@ -16,15 +16,16 @@
  */
 package org.apache.tomcat.jdbc.pool.interceptor;
 
-import java.lang.ref.WeakReference;
-import java.lang.reflect.Method;
-import java.sql.Statement;
-import java.util.ArrayList;
-
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
 import org.apache.tomcat.jdbc.pool.ConnectionPool;
 import org.apache.tomcat.jdbc.pool.PooledConnection;
+
+import java.lang.ref.WeakReference;
+import java.lang.reflect.Method;
+import java.sql.Statement;
+import java.util.LinkedList;
+import java.util.List;
 /**
  * Keeps track of statements associated with a connection and invokes close 
upon {@link java.sql.Connection#close()}
  * Useful for applications that dont close the associated statements after 
being done with a connection.
@@ -33,7 +34,7 @@ import org.apache.tomcat.jdbc.pool.Poole
 public class StatementFinalizer extends AbstractCreateStatementInterceptor {
     private static final Log log = LogFactory.getLog(StatementFinalizer.class);
 
-    protected ArrayList<WeakReference<Statement>> statements = new 
ArrayList<>();
+    protected List<WeakReference<Statement>> statements = new LinkedList<>();
 
     @Override
     public Object createStatement(Object proxy, Method method, Object[] args, 
Object statement, long time) {

Modified: 
tomcat/trunk/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/StatementFinalizerTest.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/StatementFinalizerTest.java?rev=1616602&r1=1616601&r2=1616602&view=diff
==============================================================================
--- 
tomcat/trunk/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/StatementFinalizerTest.java
 (original)
+++ 
tomcat/trunk/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/StatementFinalizerTest.java
 Thu Aug  7 21:47:11 2014
@@ -35,4 +35,22 @@ public class StatementFinalizerTest exte
         con.close();
         Assert.assertTrue("Statement should be closed.",st.isClosed());
     }
+
+
+    @Test
+    public void testStatementFinalizationForMultiple() throws Exception {
+        datasource.setJdbcInterceptors(StatementFinalizer.class.getName());
+        Connection con = datasource.getConnection();
+        Statement[] statements = new Statement[1000];
+        for (int i = 0; i < statements.length; i++) {
+            statements[i] = con.createStatement();
+        }
+        for (Statement st : statements) {
+            Assert.assertFalse("Statement should not be closed.", 
st.isClosed());
+        }
+        con.close();
+        for (Statement st : statements) {
+            Assert.assertTrue("Statement should be closed.", st.isClosed());
+        }
+    }
 }



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

Reply via email to