You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by dj...@apache.org on 2008/01/29 07:06:31 UTC
svn commit: r616177 -
/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/DataSourceTest.java
Author: djd
Date: Mon Jan 28 22:06:30 2008
New Revision: 616177
URL: http://svn.apache.org/viewvc?rev=616177&view=rev
Log:
DERBY-2142 (test) Add a fixture (testPooledReuseOnClose) to DataSourceTest that tests the fix to DERBY-2142. It failed before revision 616141 and passed after for embedded, but fails for network client so it is disabled for that env.
Modified:
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/DataSourceTest.java
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/DataSourceTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/DataSourceTest.java?rev=616177&r1=616176&r2=616177&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/DataSourceTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/DataSourceTest.java Mon Jan 28 22:06:30 2008
@@ -535,6 +535,82 @@
conn.close();
}
+ /**
+ * Test that a PooledConnection can be reused during the close
+ * event raised by the closing of its logical connection.
+ * DERBY-2142.
+ * @throws SQLException
+ *
+ */
+ public void testPooledReuseOnClose() throws SQLException
+ {
+ // TEMP - seems to fail on network client
+ if (!usingEmbedded())
+ return;
+
+ // PooledConnection from a ConnectionPoolDataSource
+ ConnectionPoolDataSource cpds =
+ J2EEDataSource.getConnectionPoolDataSource();
+ subtestPooledReuseOnClose(cpds.getPooledConnection());
+
+ // PooledConnection from an XDataSource
+ XADataSource xads = J2EEDataSource.getXADataSource();
+ subtestPooledReuseOnClose(xads.getXAConnection());
+ }
+
+ /**
+ * Tests that a pooled connection can successfully be reused
+ * (a new connection obtained from it) during the processing
+ * of its close event by its listener.
+ * Sections 11.2 & 12.5 of JDBC 4 specification indicate that the
+ * connection can be returned to the pool when the
+ * ConnectionEventListener.connectionClosed() is called.
+ */
+ private void subtestPooledReuseOnClose(final PooledConnection pc) throws SQLException
+ {
+ final Connection[] newConn = new Connection[1];
+ pc.addConnectionEventListener(new ConnectionEventListener() {
+
+ /**
+ * Mimic a pool handler that returns the PooledConnection
+ * to the pool and then reallocates it to a new logical connection.
+ */
+ public void connectionClosed(ConnectionEvent event) {
+ PooledConnection pce = (PooledConnection) event.getSource();
+ assertSame(pc, pce);
+ try {
+ // open a new logical connection and pass
+ // back to the fixture.
+ newConn[0] = pce.getConnection();
+ } catch (SQLException e) {
+ // Need to catch the exception here because
+ // we cannot throw an exception through
+ // the api method.
+ fail(e.getMessage());
+ }
+ }
+
+ public void connectionErrorOccurred(ConnectionEvent event) {
+ }
+
+ });
+
+ // Open a connection then close it to trigger the
+ // fetching of a new connection in the callback.
+ Connection c1 = pc.getConnection();
+ c1.close();
+
+ // Fetch the connection created in the close callback
+ Connection c2 = newConn[0];
+ assertNotNull(c2);
+
+ // Ensure the connection is useable, this hit a NPE before DERBY-2142
+ // was fixed (for embedded).
+ c2.createStatement().close();
+
+ pc.close();
+ }
+
public void testAllDataSources() throws SQLException, Exception
{
Connection dmc = getConnection();