From 9c9a052e7acaa21bb6461fb6bbd5e042163c6cbf Mon Sep 17 00:00:00 2001 From: fhanik Date: Wed, 10 Dec 2008 23:38:13 +0000 Subject: [PATCH] refactor the slow query report a bit also add the ability to remove a listener git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@725487 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/tomcat/jdbc/pool/ConnectionPool.java | 4 ++ .../jdbc/pool/interceptor/SlowQueryReport.java | 47 ++++++++++++++-------- 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java b/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java index 57caa818d..00c9a5731 100644 --- a/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java +++ b/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java @@ -263,6 +263,10 @@ public class ConnectionPool { listeners.add(listener); } + public void removeCloseListener(CloseListener listener) { + listeners.remove(listener); + } + /** * Closes the pool and all disconnects all idle connections * Active connections will be closed upon the {@link java.sql.Connection#close close} method is called diff --git a/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/interceptor/SlowQueryReport.java b/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/interceptor/SlowQueryReport.java index 0487a3425..e3e5045fa 100644 --- a/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/interceptor/SlowQueryReport.java +++ b/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/interceptor/SlowQueryReport.java @@ -29,6 +29,8 @@ import java.util.IdentityHashMap; import java.util.LinkedHashMap; import java.util.Map.Entry; +import javax.management.openmbean.CompositeData; + import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; import org.apache.tomcat.jdbc.pool.ConnectionPool; @@ -110,7 +112,7 @@ public class SlowQueryReport extends AbstractCreateStatementInterceptor implemen */ @Override public void closeInvoked() { - // TODO Auto-generated method stub + queries = null; } @@ -187,6 +189,10 @@ public class SlowQueryReport extends AbstractCreateStatementInterceptor implemen } this.pool = parent; } + + public void finalize() { + if (pool!=null) pool.removeCloseListener(this); + } public void poolClosed(ConnectionPool pool) { @@ -194,6 +200,10 @@ public class SlowQueryReport extends AbstractCreateStatementInterceptor implemen perPoolStats.remove(pool); } + public CompositeData[] getSlowQueriesCD() { + return null; + } + /** @@ -326,29 +336,32 @@ public class SlowQueryReport extends AbstractCreateStatementInterceptor implemen long delta = (process)?(System.currentTimeMillis()-start):Long.MIN_VALUE; //see if we meet the requirements to measure if (delta>threshold) { - //extract the query string - String sql = (query==null && args!=null && args.length>0)?(String)args[0]:query; - //if we do batch execution, then we name the query 'batch' - if (sql==null && compare(executes[3],name)) { - sql = "batch"; - } - //if we have a query, record the stats - if (sql!=null) { - QueryStats qs = SlowQueryReport.this.queries.get(sql); - if (qs == null) { - qs = new QueryStats(sql); - SlowQueryReport.this.queries.put((String)sql,qs); - } - qs.add(delta,start); - } + reportSlowQuery(args, name, start, delta); } //perform close cleanup if (close) { closed=true; delegate = null; - queries = null; } return result; } + + protected void reportSlowQuery(Object[] args, final String name, long start, long delta) { + //extract the query string + String sql = (query==null && args!=null && args.length>0)?(String)args[0]:query; + //if we do batch execution, then we name the query 'batch' + if (sql==null && compare(executes[3],name)) { + sql = "batch"; + } + //if we have a query, record the stats + if (sql!=null) { + QueryStats qs = SlowQueryReport.this.queries.get(sql); + if (qs == null) { + qs = new QueryStats(sql); + SlowQueryReport.this.queries.put((String)sql,qs); + } + qs.add(delta,start); + } + } } } -- 2.11.0