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 2014/08/07 23:04:12 UTC
svn commit: r1616594 - in /tomcat/trunk/modules/jdbc-pool/src:
main/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java
main/java/org/apache/tomcat/jdbc/pool/PooledConnection.java
test/java/org/apache/tomcat/jdbc/bugs/Bug54227.java
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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
Re: svn commit: r1616594 - in /tomcat/trunk/modules/jdbc-pool/src: main/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java main/java/org/apache/tomcat/jdbc/pool/PooledConnection.java test/java/org/apache/tomcat/jdbc/bugs/Bug54227.java
Posted by Felix Schumacher <fe...@internetallee.de>.
On 7. August 2014 23:04:12 MESZ, fhanik@apache.org wrote:
>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;
Wouldn't it be nicer to directly return con.isMaxAgeExpired()?
Regards
Felix
> }
>
> /**
>
>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-unsubscribe@tomcat.apache.org
>For additional commands, e-mail: dev-help@tomcat.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org