You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ps...@apache.org on 2014/10/01 02:59:20 UTC
svn commit: r1628584 - in /commons/proper/dbcp/trunk/src:
changes/changes.xml main/java/org/apache/commons/dbcp2/BasicDataSource.java
test/java/org/apache/commons/dbcp2/TestBasicDataSource.java
Author: psteitz
Date: Wed Oct 1 00:59:19 2014
New Revision: 1628584
URL: http://svn.apache.org/r1628584
Log:
Added invalidateConnection method to BasicDataSource. JIRA: DBCP-426. Patch due to Kasper Sørensen.
Modified:
commons/proper/dbcp/trunk/src/changes/changes.xml
commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java
Modified: commons/proper/dbcp/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/changes/changes.xml?rev=1628584&r1=1628583&r2=1628584&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/changes/changes.xml (original)
+++ commons/proper/dbcp/trunk/src/changes/changes.xml Wed Oct 1 00:59:19 2014
@@ -60,7 +60,7 @@ The <action> type attribute can be add,u
-->
<body>
- <release version="2.0.2" date="TBD" description="This is a bug fix release.">
+ <release version="2.1" date="TBD" description="This is minor release, including bug fixes and enhancements.">
<action issue="DBCP-420" dev="sebb" type="fix">
InstanceKeyDataSource discards native SQLException when given password does not match
password used to create the connection.
@@ -76,6 +76,9 @@ The <action> type attribute can be add,u
Do not ignore the configured custom eviction policy when creating a
BasicDataSource.
</action>
+ <action dev="psteitz" type="add" issue="DBCP-426" due-to="Kasper Sørensen">
+ Added invalidateConnection method to BasicDataSource.
+ </action>
</release>
<release version="2.0.1" date="24 May 2014" description="This is a bug fix release.">
<action dev="markt" type="fix">
Modified: commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java?rev=1628584&r1=1628583&r2=1628584&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java (original)
+++ commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java Wed Oct 1 00:59:19 2014
@@ -1865,6 +1865,47 @@ public class BasicDataSource implements
throw new SQLFeatureNotSupportedException();
}
+ /**
+ * Manually invalidates a connection, effectively requesting the pool to try
+ * to close it, remove it from the pool and reclaim pool capacity.
+ *
+ * @throws IllegalStateException
+ * if invalidating the connection failed.
+ * @since 2.1
+ */
+ public void invalidateConnection(Connection connection) throws IllegalStateException {
+ if (connection == null) {
+ return;
+ }
+ if (connectionPool == null) {
+ throw new IllegalStateException("Cannot invalidate connection: ConnectionPool is null.");
+ }
+
+ final PoolableConnection poolableConnection;
+ try {
+ poolableConnection = connection.unwrap(PoolableConnection.class);
+ if (poolableConnection == null) {
+ throw new IllegalStateException(
+ "Cannot invalidate connection: Connection is not a poolable connection.");
+ }
+ } catch (SQLException e) {
+ throw new IllegalStateException("Cannot invalidate connection: Unwrapping poolable connection failed.", e);
+ }
+
+ // attempt to close the connection for good measure
+ try {
+ connection.close();
+ } catch (Exception e) {
+ // ignore any exceptions here
+ }
+
+ try {
+ connectionPool.invalidateObject(poolableConnection);
+ } catch (Exception e) {
+ throw new IllegalStateException("Invalidating connection threw unexpected exception", e);
+ }
+ }
+
// ------------------------------------------------------ Protected Methods
Modified: commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java?rev=1628584&r1=1628583&r2=1628584&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java (original)
+++ commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java Wed Oct 1 00:59:19 2014
@@ -453,6 +453,20 @@ public class TestBasicDataSource extends
// test OK
}
}
+
+ public void testInvalidateConnection() throws Exception {
+ ds.setMaxTotal(2);
+ Connection conn1 = ds.getConnection();
+ Connection conn2 = ds.getConnection();
+ ds.invalidateConnection(conn1);
+ assertTrue(conn1.isClosed());
+ assertEquals(1, ds.getNumActive());
+ assertEquals(0, ds.getNumIdle());
+ Connection conn3 = ds.getConnection();
+ conn2.close();
+ conn3.close();
+ }
+
/**
* JIRA DBCP-93: If an SQLException occurs after the GenericObjectPool is
* initialized in createDataSource, the evictor task is not cleaned up.