From 2a405eb2a75f61353aa6fe7c855e5732a6f3cdc5 Mon Sep 17 00:00:00 2001 From: wenshao Date: Thu, 30 Jun 2011 05:22:00 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3Oracle=20Driver=E4=B8=8B=20Fi?= =?UTF-8?q?lterChainImpl=E7=9A=84unwrap=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://code.alibabatech.com/svn/druid/trunk@323 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../vendor/MySqlValidConnectionChecker.java | 15 ++++++---- .../vendor/OracleValidConnectionChecker.java | 28 ++++++++++--------- .../com/alibaba/druid/pool/TestOracle.java | 2 +- 3 files changed, 26 insertions(+), 19 deletions(-) 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();