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/12/11 23:17:02 UTC
svn commit: r725838 - in /tomcat/trunk/modules/jdbc-pool:
java/org/apache/tomcat/jdbc/pool/ test/org/apache/tomcat/jdbc/test/
Author: fhanik
Date: Thu Dec 11 14:17:02 2008
New Revision: 725838
URL: http://svn.apache.org/viewvc?rev=725838&view=rev
Log:
Implement startPool method to inform interceptors that pool is started
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/DataSourceProxy.java
tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/JdbcInterceptor.java
tomcat/trunk/modules/jdbc-pool/test/org/apache/tomcat/jdbc/test/TestSlowQueryReport.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=725838&r1=725837&r2=725838&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 Thu Dec 11 14:17:02 2008
@@ -307,7 +307,7 @@
* @param properties PoolProperties - properties used to initialize the pool with
* @throws SQLException
*/
- protected void init (PoolProperties properties) throws SQLException {
+ protected void init(PoolProperties properties) throws SQLException {
poolProperties = properties;
//make space for 10 extra in case we flow over a bit
busy = new ArrayBlockingQueue<PooledConnection>(properties.getMaxActive(),false);
@@ -343,6 +343,16 @@
}
+ PoolProperties.InterceptorDefinition[] proxies = getPoolProperties().getJdbcInterceptorsAsArray();
+ for (int i=0; i<proxies.length; i++) {
+ try {
+ proxies[i].getInterceptorClass().newInstance().poolStarted(this);
+ }catch (Exception x) {
+ log.warn("Unable to inform interceptor of pool start.",x);
+ close(true);
+ throw new SQLException(x);
+ }
+ }
//initialize the pool with its initial set of members
PooledConnection[] initialPool = new PooledConnection[poolProperties.getInitialSize()];
try {
Modified: tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/DataSourceProxy.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/DataSourceProxy.java?rev=725838&r1=725837&r2=725838&view=diff
==============================================================================
--- tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/DataSourceProxy.java (original)
+++ tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/DataSourceProxy.java Thu Dec 11 14:17:02 2008
@@ -43,6 +43,7 @@
protected static Log log = LogFactory.getLog(DataSourceProxy.class);
protected volatile ConnectionPool pool = null;
+
public ConnectionPool getPool() {
return pool;
}
@@ -173,7 +174,7 @@
if (p!=null) p.close(all);
}
}catch (Exception x) {
- x.printStackTrace();
+ log.warn("Error duing connection pool closure.", x);
}
}
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=725838&r1=725837&r2=725838&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 Thu Dec 11 14:17:02 2008
@@ -100,4 +100,15 @@
*/
public void poolClosed(ConnectionPool pool) {
}
+
+ /**
+ * This method is invoked by a connection pool when the pool is first started up, usually when the first connection is requested.
+ * Interceptor classes can override this method if they keep static
+ * variables or other tracking means around.
+ * <b>This method is only invoked on a single instance of the interceptor, and not on every instance created.</b>
+ * @param pool - the pool that is being closed.
+ */
+ public void poolStarted(ConnectionPool pool) {
+ }
+
}
Modified: tomcat/trunk/modules/jdbc-pool/test/org/apache/tomcat/jdbc/test/TestSlowQueryReport.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/test/org/apache/tomcat/jdbc/test/TestSlowQueryReport.java?rev=725838&r1=725837&r2=725838&view=diff
==============================================================================
--- tomcat/trunk/modules/jdbc-pool/test/org/apache/tomcat/jdbc/test/TestSlowQueryReport.java (original)
+++ tomcat/trunk/modules/jdbc-pool/test/org/apache/tomcat/jdbc/test/TestSlowQueryReport.java Thu Dec 11 14:17:02 2008
@@ -15,7 +15,6 @@
public TestSlowQueryReport(String name) {
super(name);
}
-
public void testSlowSql() throws Exception {
int count = 3;
@@ -81,4 +80,36 @@
assertNull(SlowQueryReport.getPoolStats(pool.getName()));
}
+ public void testFailedSql() throws Exception {
+ int count = 3;
+ this.init();
+ this.datasource.setMaxActive(1);
+ this.datasource.setJdbcInterceptors(SlowQueryReport.class.getName());
+ Connection con = this.datasource.getConnection();
+ String slowSql = "select 1 from non_existent";
+ int exceptionCount = 0;
+ for (int i=0; i<count; i++) {
+ Statement st = con.createStatement();
+ try {
+ ResultSet rs = st.executeQuery(slowSql);
+ rs.close();
+ }catch (Exception x) {
+ exceptionCount++;
+ }
+ st.close();
+
+ }
+ Map<String,SlowQueryReport.QueryStats> map = SlowQueryReport.getPoolStats(datasource.getPool().getName());
+ assertNotNull(map);
+ assertEquals(1,map.size());
+ ConnectionPool pool = datasource.getPool();
+ String key = map.keySet().iterator().next();
+ SlowQueryReport.QueryStats stats = map.get(key);
+ System.out.println("Stats:"+stats);
+ con.close();
+ tearDown();
+ assertNull(SlowQueryReport.getPoolStats(pool.getName()));
+ }
+
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org