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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org