Modified:
branches/branch_5_0/connector-j/CHANGES
branches/branch_5_0/connector-j/src/com/mysql/jdbc/integration/jboss/MysqlValidConnectionChecker.java
branches/branch_5_0/connector-j/src/com/mysql/jdbc/jdbc2/optional/ConnectionWrapper.java
branches/branch_5_0/connector-j/src/testsuite/regression/DataSourceRegressionTest.java
branches/branch_5_1/connector-j/CHANGES
branches/branch_5_1/connector-j/src/com/mysql/jdbc/integration/jboss/MysqlValidConnectionChecker.java
branches/branch_5_1/connector-j/src/com/mysql/jdbc/jdbc2/optional/ConnectionWrapper.java
branches/branch_5_1/connector-j/src/testsuite/regression/DataSourceRegressionTest.java
Log:
Fixed BUG#19169 - ConnectionProperties (and thus some
subclasses) are not serializable, even though some J2EE containers
expect them to be.
Modified: branches/branch_5_0/connector-j/CHANGES
===================================================================
--- branches/branch_5_0/connector-j/CHANGES 2006-06-16 20:23:21 UTC (rev 5401)
+++ branches/branch_5_0/connector-j/CHANGES 2006-06-16 20:58:36 UTC (rev 5402)
@@ -17,6 +17,9 @@
- Fixed BUG#19169 - ConnectionProperties (and thus some
subclasses) are not serializable, even though some J2EE containers
expect them to be.
+
+ - Fixed BUG#20242 - MysqlValidConnectionChecker for JBoss doesn't
+ work with MySQLXADataSources.
12-23-05 - Version 5.0.0-beta
Modified: branches/branch_5_0/connector-j/src/com/mysql/jdbc/integration/jboss/MysqlValidConnectionChecker.java
===================================================================
--- branches/branch_5_0/connector-j/src/com/mysql/jdbc/integration/jboss/MysqlValidConnectionChecker.java 2006-06-16 20:23:21 UTC (rev 5401)
+++ branches/branch_5_0/connector-j/src/com/mysql/jdbc/integration/jboss/MysqlValidConnectionChecker.java 2006-06-16 20:58:36 UTC (rev 5402)
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2002-2005 MySQL AB
+ Copyright (C) 2002-2006 MySQL AB
This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License as
@@ -44,6 +44,8 @@
private static final long serialVersionUID = 3258689922776119348L;
private Method pingMethod;
+
+ private Method pingMethodWrapped;
private final static Object[] NO_ARGS_OBJECT_ARRAY = new Object[0];
@@ -55,6 +57,12 @@
"com.mysql.jdbc.Connection");
pingMethod = mysqlConnection.getMethod("ping", null);
+
+ Class mysqlConnectionWrapper = Thread.currentThread()
+ .getContextClassLoader().loadClass(
+ "com.mysql.jdbc.jdbc2.optional.ConnectionWrapper");
+
+ pingMethodWrapped = mysqlConnectionWrapper.getMethod("ping", null);
} catch (Exception ex) {
// Punt, we'll use 'SELECT 1' to do the check
}
@@ -66,18 +74,34 @@
* @see org.jboss.resource.adapter.jdbc.ValidConnectionChecker#isValidConnection(java.sql.Connection)
*/
public SQLException isValidConnection(Connection conn) {
- if (pingMethod != null) {
- try {
- this.pingMethod.invoke(conn, NO_ARGS_OBJECT_ARRAY);
-
- return null;
- } catch (Exception ex) {
- if (ex instanceof SQLException) {
- return (SQLException) ex;
+ if (conn instanceof com.mysql.jdbc.Connection) {
+ if (pingMethod != null) {
+ try {
+ this.pingMethod.invoke(conn, NO_ARGS_OBJECT_ARRAY);
+
+ return null;
+ } catch (Exception ex) {
+ if (ex instanceof SQLException) {
+ return (SQLException) ex;
+ }
+
+ return SQLError.createSQLException("Ping failed: " + ex.toString());
}
-
- return SQLError.createSQLException("Ping failed: " + ex.toString());
}
+ } else if (conn instanceof com.mysql.jdbc.jdbc2.optional.ConnectionWrapper) {
+ if (pingMethodWrapped != null) {
+ try {
+ this.pingMethodWrapped.invoke(conn, NO_ARGS_OBJECT_ARRAY);
+
+ return null;
+ } catch (Exception ex) {
+ if (ex instanceof SQLException) {
+ return (SQLException) ex;
+ }
+
+ return SQLError.createSQLException("Ping failed: " + ex.toString());
+ }
+ }
}
// Punt and use 'SELECT 1'
Modified: branches/branch_5_0/connector-j/src/com/mysql/jdbc/jdbc2/optional/ConnectionWrapper.java
===================================================================
--- branches/branch_5_0/connector-j/src/com/mysql/jdbc/jdbc2/optional/ConnectionWrapper.java 2006-06-16 20:23:21 UTC (rev 5401)
+++ branches/branch_5_0/connector-j/src/com/mysql/jdbc/jdbc2/optional/ConnectionWrapper.java 2006-06-16 20:58:36 UTC (rev 5402)
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2002-2004 MySQL AB
+ Copyright (C) 2002-2006 MySQL AB
This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License as
@@ -831,4 +831,10 @@
protected void setInGlobalTx(boolean flag) {
this.mc.setInGlobalTx(flag);
}
+
+ public void ping() throws SQLException {
+ if (this.mc != null) {
+ this.mc.ping();
+ }
+ }
}
Modified: branches/branch_5_0/connector-j/src/testsuite/regression/DataSourceRegressionTest.java
===================================================================
--- branches/branch_5_0/connector-j/src/testsuite/regression/DataSourceRegressionTest.java 2006-06-16 20:23:21 UTC (rev 5401)
+++ branches/branch_5_0/connector-j/src/testsuite/regression/DataSourceRegressionTest.java 2006-06-16 20:58:36 UTC (rev 5402)
@@ -52,9 +52,11 @@
import testsuite.simple.DataSourceTest;
import com.mysql.jdbc.NonRegisteringDriver;
+import com.mysql.jdbc.integration.jboss.MysqlValidConnectionChecker;
import com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSourceFactory;
+import com.mysql.jdbc.jdbc2.optional.MysqlXADataSource;
/**
* Tests fixes for bugs related to datasources.
@@ -313,6 +315,28 @@
assertEquals(testIntFlag, thawedDs.getBlobSendChunkSize());
}
+ /**
+ * Tests fix for BUG#20242 - MysqlValidConnectionChecker for JBoss doesn't
+ * work with MySQLXADataSources.
+ *
+ * @throws Exception if the test fails.
+ */
+ public void testBug20242() throws Exception {
+ if (versionMeetsMinimum(5, 0)) {
+ try {
+ Class.forName("org.jboss.resource.adapter.jdbc.ValidConnectionChecker");
+ } catch (Exception ex) {
+ return; // class not available for testing
+ }
+
+ MysqlXADataSource xaDs = new MysqlXADataSource();
+ xaDs.setUrl(dbUrl);
+
+ MysqlValidConnectionChecker checker = new MysqlValidConnectionChecker();
+ assertNull(checker.isValidConnection(xaDs.getXAConnection().getConnection()));
+ }
+ }
+
private void bindDataSource(String name, DataSource ds) throws Exception {
this.ctx.bind(this.tempDir.getAbsolutePath() + name, ds);
}
Modified: branches/branch_5_1/connector-j/CHANGES
===================================================================
--- branches/branch_5_1/connector-j/CHANGES 2006-06-16 20:23:21 UTC (rev 5401)
+++ branches/branch_5_1/connector-j/CHANGES 2006-06-16 20:58:36 UTC (rev 5402)
@@ -19,6 +19,9 @@
- Fixed BUG#19169 - ConnectionProperties (and thus some
subclasses) are not serializable, even though some J2EE containers
expect them to be.
+
+ - Fixed BUG#20242 - MysqlValidConnectionChecker for JBoss doesn't
+ work with MySQLXADataSources.
12-23-05 - Version 5.0.0-beta
Modified: branches/branch_5_1/connector-j/src/com/mysql/jdbc/integration/jboss/MysqlValidConnectionChecker.java
===================================================================
--- branches/branch_5_1/connector-j/src/com/mysql/jdbc/integration/jboss/MysqlValidConnectionChecker.java 2006-06-16 20:23:21 UTC (rev 5401)
+++ branches/branch_5_1/connector-j/src/com/mysql/jdbc/integration/jboss/MysqlValidConnectionChecker.java 2006-06-16 20:58:36 UTC (rev 5402)
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2002-2005 MySQL AB
+ Copyright (C) 2002-2006 MySQL AB
This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License as
@@ -44,6 +44,8 @@
private static final long serialVersionUID = 3258689922776119348L;
private Method pingMethod;
+
+ private Method pingMethodWrapped;
private final static Object[] NO_ARGS_OBJECT_ARRAY = new Object[0];
@@ -55,6 +57,12 @@
"com.mysql.jdbc.Connection");
pingMethod = mysqlConnection.getMethod("ping", null);
+
+ Class mysqlConnectionWrapper = Thread.currentThread()
+ .getContextClassLoader().loadClass(
+ "com.mysql.jdbc.jdbc2.optional.ConnectionWrapper");
+
+ pingMethodWrapped = mysqlConnectionWrapper.getMethod("ping", null);
} catch (Exception ex) {
// Punt, we'll use 'SELECT 1' to do the check
}
@@ -66,18 +74,34 @@
* @see org.jboss.resource.adapter.jdbc.ValidConnectionChecker#isValidConnection(java.sql.Connection)
*/
public SQLException isValidConnection(Connection conn) {
- if (pingMethod != null) {
- try {
- this.pingMethod.invoke(conn, NO_ARGS_OBJECT_ARRAY);
-
- return null;
- } catch (Exception ex) {
- if (ex instanceof SQLException) {
- return (SQLException) ex;
+ if (conn instanceof com.mysql.jdbc.Connection) {
+ if (pingMethod != null) {
+ try {
+ this.pingMethod.invoke(conn, NO_ARGS_OBJECT_ARRAY);
+
+ return null;
+ } catch (Exception ex) {
+ if (ex instanceof SQLException) {
+ return (SQLException) ex;
+ }
+
+ return SQLError.createSQLException("Ping failed: " + ex.toString());
}
-
- return SQLError.createSQLException("Ping failed: " + ex.toString());
}
+ } else if (conn instanceof com.mysql.jdbc.jdbc2.optional.ConnectionWrapper) {
+ if (pingMethodWrapped != null) {
+ try {
+ this.pingMethodWrapped.invoke(conn, NO_ARGS_OBJECT_ARRAY);
+
+ return null;
+ } catch (Exception ex) {
+ if (ex instanceof SQLException) {
+ return (SQLException) ex;
+ }
+
+ return SQLError.createSQLException("Ping failed: " + ex.toString());
+ }
+ }
}
// Punt and use 'SELECT 1'
Modified: branches/branch_5_1/connector-j/src/com/mysql/jdbc/jdbc2/optional/ConnectionWrapper.java
===================================================================
--- branches/branch_5_1/connector-j/src/com/mysql/jdbc/jdbc2/optional/ConnectionWrapper.java 2006-06-16 20:23:21 UTC (rev 5401)
+++ branches/branch_5_1/connector-j/src/com/mysql/jdbc/jdbc2/optional/ConnectionWrapper.java 2006-06-16 20:58:36 UTC (rev 5402)
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2002-2004 MySQL AB
+ Copyright (C) 2002-2006 MySQL AB
This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License as
@@ -877,4 +877,10 @@
public boolean isWrapperFor(Class arg0) throws SQLException {
throw new ToBeImplementedException();
}
+
+ public void ping() throws SQLException {
+ if (this.mc != null) {
+ this.mc.ping();
+ }
+ }
}
Modified: branches/branch_5_1/connector-j/src/testsuite/regression/DataSourceRegressionTest.java
===================================================================
--- branches/branch_5_1/connector-j/src/testsuite/regression/DataSourceRegressionTest.java 2006-06-16 20:23:21 UTC (rev 5401)
+++ branches/branch_5_1/connector-j/src/testsuite/regression/DataSourceRegressionTest.java 2006-06-16 20:58:36 UTC (rev 5402)
@@ -52,9 +52,11 @@
import testsuite.simple.DataSourceTest;
import com.mysql.jdbc.NonRegisteringDriver;
+import com.mysql.jdbc.integration.jboss.MysqlValidConnectionChecker;
import com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSourceFactory;
+import com.mysql.jdbc.jdbc2.optional.MysqlXADataSource;
/**
* Tests fixes for bugs related to datasources.
@@ -447,4 +449,26 @@
}
}
}
+
+ /**
+ * Tests fix for BUG#20242 - MysqlValidConnectionChecker for JBoss doesn't
+ * work with MySQLXADataSources.
+ *
+ * @throws Exception if the test fails.
+ */
+ public void testBug20242() throws Exception {
+ if (versionMeetsMinimum(5, 0)) {
+ try {
+ Class.forName("org.jboss.resource.adapter.jdbc.ValidConnectionChecker");
+ } catch (Exception ex) {
+ return; // class not available for testing
+ }
+
+ MysqlXADataSource xaDs = new MysqlXADataSource();
+ xaDs.setUrl(dbUrl);
+
+ MysqlValidConnectionChecker checker = new MysqlValidConnectionChecker();
+ assertNull(checker.isValidConnection(xaDs.getXAConnection().getConnection()));
+ }
+ }
}
| Thread |
|---|
| • Connector/J commit: r5402 - in branches: branch_5_0/connector-j branch_5_0/connector-j/src/com/mysql/jdbc/integration/jboss branch_5_0/connector-j/src... | mmatthews | 16 Jun |