diff --git a/src/main/java/com/alibaba/druid/pool/vendor/MySqlValidConnectionChecker.java b/src/main/java/com/alibaba/druid/pool/vendor/MySqlValidConnectionChecker.java index ecc2cba3ae..f79c4115e8 100644 --- a/src/main/java/com/alibaba/druid/pool/vendor/MySqlValidConnectionChecker.java +++ b/src/main/java/com/alibaba/druid/pool/vendor/MySqlValidConnectionChecker.java @@ -36,11 +36,16 @@ public class MySqlValidConnectionChecker implements ValidConnectionChecker, Seri public boolean isValidConnection(Connection c) { Connection conn = null; - try { - conn = (Connection) c.unwrap(clazz); - } catch (SQLException e) { - LOG.warn("Unexpected error in ping", e); - return false; + + if (clazz.isAssignableFrom(c.getClass())) { + conn = c; + } else { + try { + conn = (Connection) c.unwrap(clazz); + } catch (SQLException e) { + LOG.warn("Unexpected error in ping", e); + return false; + } } // if there is a ping method then use it, otherwise just use a 'SELECT 1' statement diff --git a/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java b/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java index 36f8890a77..60bd755b9a 100644 --- a/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java +++ b/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java @@ -32,13 +32,13 @@ import com.alibaba.druid.util.DruidLoaderUtils; public class OracleValidConnectionChecker implements ValidConnectionChecker, Serializable { - private static final long serialVersionUID = -2227528634302168877L; + private static final long serialVersionUID = -2227528634302168877L; - private static final Log LOG = LogFactory.getLog(OracleValidConnectionChecker.class); + private static final Log LOG = LogFactory.getLog(OracleValidConnectionChecker.class); - private final Class clazz; - private final Method ping; - private final static Object[] params = new Object[] { new Integer(5000) }; + private final Class clazz; + private final Method ping; + private final static Object[] params = new Object[] { new Integer(5000) }; public OracleValidConnectionChecker(){ try { @@ -52,15 +52,17 @@ public class OracleValidConnectionChecker implements ValidConnectionChecker, Ser public boolean isValidConnection(Connection c) { try { // unwrap - Connection conn = (Connection) c.unwrap(clazz); - if (conn != null) { - c = conn; - - Integer status = (Integer) ping.invoke(c, params); + if (!clazz.isAssignableFrom(c.getClass())) { + Connection conn = (Connection) c.unwrap(clazz); + if (conn != null) { + c = conn; - // Error - if (status.intValue() < 0) { - return false; + Integer status = (Integer) ping.invoke(c, params); + + // Error + if (status.intValue() < 0) { + return false; + } } } } catch (Exception e) { diff --git a/src/test/java/com/alibaba/druid/pool/TestOracle.java b/src/test/java/com/alibaba/druid/pool/TestOracle.java index 52b9bce663..e53f9c4ee9 100644 --- a/src/test/java/com/alibaba/druid/pool/TestOracle.java +++ b/src/test/java/com/alibaba/druid/pool/TestOracle.java @@ -23,7 +23,7 @@ public class TestOracle extends TestCase { dataSource.setUrl(jdbcUrl); dataSource.setUsername(user); dataSource.setPassword(password); - dataSource.setFilters("stat"); + // dataSource.setFilters("stat"); dataSource.setExceptionSoter(MySqlExceptionSorter.class.getName()); Connection conn = dataSource.getConnection();