diff --git a/src/main/java/org/mariadb/jdbc/Connection.java b/src/main/java/org/mariadb/jdbc/Connection.java index 0bec40cf3..8f995e28a 100644 --- a/src/main/java/org/mariadb/jdbc/Connection.java +++ b/src/main/java/org/mariadb/jdbc/Connection.java @@ -11,6 +11,7 @@ import java.util.concurrent.locks.ReentrantLock; import java.util.regex.Matcher; import java.util.regex.Pattern; +import javax.sql.ConnectionEvent; import org.mariadb.jdbc.client.Client; import org.mariadb.jdbc.client.Context; import org.mariadb.jdbc.client.impl.StandardClient; @@ -195,8 +196,7 @@ public void rollback() throws SQLException { @Override public void close() throws SQLException { if (poolConnection != null) { - MariaDbPoolConnection poolConnection = this.poolConnection; - poolConnection.close(); + poolConnection.fireConnectionClosed(new ConnectionEvent(poolConnection)); return; } client.close(); diff --git a/src/main/java/org/mariadb/jdbc/pool/MariaDbInnerPoolConnection.java b/src/main/java/org/mariadb/jdbc/pool/MariaDbInnerPoolConnection.java index 0135080df..ffe098462 100644 --- a/src/main/java/org/mariadb/jdbc/pool/MariaDbInnerPoolConnection.java +++ b/src/main/java/org/mariadb/jdbc/pool/MariaDbInnerPoolConnection.java @@ -22,10 +22,6 @@ public MariaDbInnerPoolConnection(Connection connection) { lastUsed = new AtomicLong(System.nanoTime()); } - public void close() { - fireConnectionClosed(new ConnectionEvent(this)); - } - /** * Indicate last time this pool connection has been used. * diff --git a/src/test/java/org/mariadb/jdbc/integration/PoolDataSourceTest.java b/src/test/java/org/mariadb/jdbc/integration/PoolDataSourceTest.java index c56191c3f..9aba41712 100644 --- a/src/test/java/org/mariadb/jdbc/integration/PoolDataSourceTest.java +++ b/src/test/java/org/mariadb/jdbc/integration/PoolDataSourceTest.java @@ -65,20 +65,21 @@ public static void drop() throws SQLException { @Test public void basic() throws SQLException { - MariaDbPoolDataSource ds = new MariaDbPoolDataSource(mDefUrl); + MariaDbPoolDataSource ds = new MariaDbPoolDataSource(mDefUrl + "&maxPoolSize=2"); testDs(ds); ds.close(); ds = new MariaDbPoolDataSource(); - ds.setUrl(mDefUrl); + ds.setUrl(mDefUrl + "&maxPoolSize=2"); testDs(ds); ds.close(); } private void testDs(MariaDbPoolDataSource ds) throws SQLException { try (Connection con1 = ds.getConnection()) { - try (Connection con2 = ds.getConnection()) { - + long threadId; + try (org.mariadb.jdbc.Connection con2 = (org.mariadb.jdbc.Connection) ds.getConnection()) { + threadId = con2.getThreadId(); ResultSet rs1 = con1.createStatement().executeQuery("SELECT 1"); ResultSet rs2 = con2.createStatement().executeQuery("SELECT 2"); while (rs1.next()) { @@ -88,6 +89,9 @@ private void testDs(MariaDbPoolDataSource ds) throws SQLException { assertEquals(2, rs2.getInt(1)); } } + try (org.mariadb.jdbc.Connection con2 = (org.mariadb.jdbc.Connection) ds.getConnection()) { + assertEquals(threadId, con2.getThreadId()); + } } PooledConnection con1 = null; @@ -104,10 +108,13 @@ private void testDs(MariaDbPoolDataSource ds) throws SQLException { while (rs2.next()) { assertEquals(2, rs2.getInt(1)); } - + long threadId = ((org.mariadb.jdbc.Connection) con2.getConnection()).getThreadId(); + if (con2 != null) con2.getConnection().close(); + con2 = ds.getPooledConnection(); + assertEquals(threadId, ((org.mariadb.jdbc.Connection) con2.getConnection()).getThreadId()); } finally { - if (con1 != null) con1.close(); - if (con2 != null) con2.close(); + if (con1 != null) con1.getConnection().close(); + if (con2 != null) con2.getConnection().close(); } XAConnection conx1 = null; diff --git a/src/test/java/org/mariadb/jdbc/integration/PooledConnectionTest.java b/src/test/java/org/mariadb/jdbc/integration/PooledConnectionTest.java index ae459ba75..f6838af3b 100644 --- a/src/test/java/org/mariadb/jdbc/integration/PooledConnectionTest.java +++ b/src/test/java/org/mariadb/jdbc/integration/PooledConnectionTest.java @@ -31,7 +31,7 @@ public void testPooledConnectionClosed() throws Exception { MyEventListener listener = new MyEventListener(); pc.addConnectionEventListener(listener); pc.addStatementEventListener(listener); - connection.close(); + pc.close(); assertTrue(listener.closed); assertThrows(SQLException.class, () -> connection.createStatement().execute("select 1")); pc.removeConnectionEventListener(listener); diff --git a/src/test/java/org/mariadb/jdbc/integration/XaTest.java b/src/test/java/org/mariadb/jdbc/integration/XaTest.java index ee428f33b..9237a7c12 100644 --- a/src/test/java/org/mariadb/jdbc/integration/XaTest.java +++ b/src/test/java/org/mariadb/jdbc/integration/XaTest.java @@ -35,8 +35,8 @@ public static void beforeAll2() throws SQLException { Assumptions.assumeTrue( !"skysql".equals(System.getenv("srv")) && !"skysql-ha".equals(System.getenv("srv"))); - drop(); Statement stmt = sharedConn.createStatement(); + stmt.execute("DROP TABLE IF EXISTS xatable"); stmt.execute("CREATE TABLE xatable(i int)"); stmt.execute("FLUSH TABLES"); dataSource = new MariaDbDataSource(mDefUrl); @@ -144,7 +144,7 @@ private int test2PhaseCommit(boolean doCommit, XADataSource dataSource) throws E for (int i = 0; i < connectionNumber; i++) { try { if (xaConnections[i] != null) { - xaConnections[i].close(); + xaConnections[i].getConnection().close(); } } catch (Exception e) { e.printStackTrace();