Author: fhanik Date: Thu Aug 7 21:04:11 2014 New Revision: 1616594 URL: http://svn.apache.org/r1616594 Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=54227 MaxAge should be honored upon borrow as well, to assure that no connection is ever used if it has been connected longer than designated time.
Added: tomcat/trunk/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/bugs/Bug54227.java (with props) Modified: tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PooledConnection.java Modified: tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java?rev=1616594&r1=1616593&r2=1616594&view=diff ============================================================================== --- tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java (original) +++ tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java Thu Aug 7 21:04:11 2014 @@ -279,6 +279,10 @@ public class ConnectionPool { * @throws SQLException if an interceptor can't be configured, if the proxy can't be instantiated */ protected Connection setupConnection(PooledConnection con) throws SQLException { + //check if it's been sitting in the pool too long + if (con.isMaxAgeExpired()) { + con.reconnect(); + } //fetch previously cached interceptor proxy - one per connection JdbcInterceptor handler = con.getHandler(); if (handler==null) { @@ -862,11 +866,8 @@ public class ConnectionPool { if (isClosed()) return true; if (!con.validate(action)) return true; if (!terminateTransaction(con)) return true; - if (getPoolProperties().getMaxAge()>0 ) { - return (System.currentTimeMillis()-con.getLastConnected()) > getPoolProperties().getMaxAge(); - } else { - return false; - } + if (con.isMaxAgeExpired()) return true; + else return false; } /** Modified: tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PooledConnection.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PooledConnection.java?rev=1616594&r1=1616593&r2=1616594&view=diff ============================================================================== --- tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PooledConnection.java (original) +++ tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PooledConnection.java Thu Aug 7 21:04:11 2014 @@ -318,6 +318,19 @@ public class PooledConnection { } /** + * Returns true if the connection has been connected more than + * {@link PoolConfiguration#getMaxAge()} milliseconds. false otherwise. + * @return Returns true if the connection has been connected more than + * {@link PoolConfiguration#getMaxAge()} milliseconds. false otherwise. + */ + public boolean isMaxAgeExpired() { + if (getPoolProperties().getMaxAge()>0 ) { + return (System.currentTimeMillis() - getLastConnected()) > getPoolProperties().getMaxAge(); + } else { + return false; + } + } + /** * Issues a call to {@link #disconnect(boolean)} with the argument false followed by a call to * {@link #connect()} * @throws SQLException if the call to {@link #connect()} fails. Added: tomcat/trunk/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/bugs/Bug54227.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/bugs/Bug54227.java?rev=1616594&view=auto ============================================================================== --- tomcat/trunk/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/bugs/Bug54227.java (added) +++ tomcat/trunk/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/bugs/Bug54227.java Thu Aug 7 21:04:11 2014 @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.tomcat.jdbc.bugs; + +import org.apache.tomcat.jdbc.pool.DataSource; +import org.apache.tomcat.jdbc.pool.PoolProperties; +import org.apache.tomcat.jdbc.test.DefaultProperties; +import org.junit.Test; + +import javax.sql.PooledConnection; +import java.sql.Connection; +import java.sql.SQLException; + +import static org.junit.Assert.assertNotSame; +import static org.junit.Assert.assertSame; + +public class Bug54227 { + + + public Bug54227() { + } + + @Test + public void testPool() throws SQLException, InterruptedException { + PoolProperties poolProperties = new DefaultProperties(); + poolProperties.setMinIdle(0); + poolProperties.setInitialSize(0); + poolProperties.setMaxActive(1); + poolProperties.setMaxWait(5000); + poolProperties.setMaxAge(100); + poolProperties.setRemoveAbandoned(false); + + final DataSource ds = new DataSource(poolProperties); + Connection con; + Connection actual1; + Connection actual2; + + con = ds.getConnection(); + actual1 = ((PooledConnection)con).getConnection(); + con.close(); + con = ds.getConnection(); + actual2 = ((PooledConnection)con).getConnection(); + assertSame(actual1, actual2); + con.close(); + Thread.sleep(150); + con = ds.getConnection(); + actual2 = ((PooledConnection)con).getConnection(); + assertNotSame(actual1, actual2); + con.close(); + } +} \ No newline at end of file Propchange: tomcat/trunk/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/bugs/Bug54227.java ------------------------------------------------------------------------------ svn:eol-style = native --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org