From 920c9385eb647b69418b974e220e1f4264fce1d9 Mon Sep 17 00:00:00 2001 From: wenshao Date: Thu, 30 Jun 2011 05:10:10 +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@322 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../alibaba/druid/filter/FilterChainImpl.java | 15 +++++++++ .../com/alibaba/druid/pool/TestOracle.java | 32 +++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 src/test/java/com/alibaba/druid/pool/TestOracle.java diff --git a/src/main/java/com/alibaba/druid/filter/FilterChainImpl.java b/src/main/java/com/alibaba/druid/filter/FilterChainImpl.java index 8eaa8b66bf..6592dd5d31 100644 --- a/src/main/java/com/alibaba/druid/filter/FilterChainImpl.java +++ b/src/main/java/com/alibaba/druid/filter/FilterChainImpl.java @@ -92,15 +92,30 @@ public class FilterChainImpl implements FilterChain { if (this.pos < filterSize) { return nextFilter().isWrapperFor(this, wrapper, iface); } + + // // if driver is for jdbc 3.0 + if (iface.isAssignableFrom(wrapper.getClass())) { + return true; + } return wrapper.isWrapperFor(iface); } + @SuppressWarnings("unchecked") @Override public T unwrap(Wrapper wrapper, Class iface) throws SQLException { if (this.pos < filterSize) { return nextFilter().unwrap(this, wrapper, iface); } + + if (iface == null) { + return null; + } + + // if driver is for jdbc 3.0 + if (iface.isAssignableFrom(wrapper.getClass())) { + return (T) wrapper; + } return wrapper.unwrap(iface); } diff --git a/src/test/java/com/alibaba/druid/pool/TestOracle.java b/src/test/java/com/alibaba/druid/pool/TestOracle.java new file mode 100644 index 0000000000..52b9bce663 --- /dev/null +++ b/src/test/java/com/alibaba/druid/pool/TestOracle.java @@ -0,0 +1,32 @@ +package com.alibaba.druid.pool; + +import java.sql.Connection; + +import junit.framework.TestCase; + +import com.alibaba.druid.pool.vendor.MySqlExceptionSorter; + +public class TestOracle extends TestCase { + + private String jdbcUrl; + private String user; + private String password; + + public void setUp() throws Exception { + jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; + user = "alibaba"; + password = "ccbuauto"; + } + + public void test_0() throws Exception { + DruidDataSource dataSource = new DruidDataSource(); + dataSource.setUrl(jdbcUrl); + dataSource.setUsername(user); + dataSource.setPassword(password); + dataSource.setFilters("stat"); + dataSource.setExceptionSoter(MySqlExceptionSorter.class.getName()); + + Connection conn = dataSource.getConnection(); + conn.close(); + } +}