From 49625315cfe0d21ee0cf553df475a870aecafbf6 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 18 Sep 2011 07:28:26 +0000 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84mock=E5=92=8C=E6=B5=8B?= =?UTF-8?q?=E8=AF=95?= 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@837 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../druid/pool/DruidAbstractDataSource.java | 24 +++------ .../druid/bvt/pool/basic/DataSourceTest3.java | 51 +++++++++++++++++++ 2 files changed, 57 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java index 25f2a6b7b5..aa647596ed 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java @@ -799,7 +799,7 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements } } - protected void validateConnection(Connection conn) throws SQLException { + public void validateConnection(Connection conn) throws SQLException { String query = getValidationQuery(); if (conn.isClosed()) { throw new SQLException("validateConnection: connection closed"); @@ -814,31 +814,19 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements if (null != query) { Statement stmt = null; - ResultSet rset = null; + ResultSet rs = null; try { stmt = conn.createStatement(); if (getValidationQueryTimeout() > 0) { stmt.setQueryTimeout(getValidationQueryTimeout()); } - rset = stmt.executeQuery(query); - if (!rset.next()) { + rs = stmt.executeQuery(query); + if (!rs.next()) { throw new SQLException("validationQuery didn't return a row"); } } finally { - if (rset != null) { - try { - rset.close(); - } catch (Exception t) { - // ignored - } - } - if (stmt != null) { - try { - stmt.close(); - } catch (Exception t) { - // ignored - } - } + JdbcUtils.close(rs); + JdbcUtils.close(stmt); } } } diff --git a/src/test/java/com/alibaba/druid/bvt/pool/basic/DataSourceTest3.java b/src/test/java/com/alibaba/druid/bvt/pool/basic/DataSourceTest3.java index e12b930591..59ae7c9a36 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/basic/DataSourceTest3.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/basic/DataSourceTest3.java @@ -1,5 +1,6 @@ package com.alibaba.druid.bvt.pool.basic; +import java.sql.SQLException; import java.util.Collections; import java.util.Properties; @@ -334,4 +335,54 @@ public class DataSourceTest3 extends TestCase { dataSource.setFilters(null); dataSource.setFilters(""); } + + public void test_error_validateConnection() throws Exception { + PoolableConnection conn = dataSource.getConnection().unwrap(PoolableConnection.class); + + conn.close(); + + { + Exception error = null; + try { + dataSource.validateConnection(conn); + } catch (SQLException ex) { + error = ex; + } + Assert.assertNotNull(error); + } + } + + public void test_error_validateConnection_2() throws Exception { + PoolableConnection conn = dataSource.getConnection().unwrap(PoolableConnection.class); + + conn.getConnection().close(); + + { + Exception error = null; + try { + dataSource.validateConnection(conn); + } catch (SQLException ex) { + error = ex; + } + Assert.assertNotNull(error); + } + } + + public void test_error_validateConnection_3() throws Exception { + dataSource.setValidationQuery(null); + dataSource.setValidConnectionChecker(new MySqlValidConnectionChecker()); + PoolableConnection conn = dataSource.getConnection().unwrap(PoolableConnection.class); + + dataSource.validateConnection(conn); + + { + Exception error = null; + try { + dataSource.validateConnection(conn); + } catch (SQLException ex) { + error = ex; + } + Assert.assertNotNull(error); + } + } }