From 58a95cdfee7d95e5b2c3744150e5fa351f4f05e3 Mon Sep 17 00:00:00 2001 From: wenshao Date: Thu, 30 Jun 2011 05:38:18 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3jdbc=203.0=20driver=E7=9A=84b?= =?UTF-8?q?ug?= 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@324 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../alibaba/druid/pool/PoolableResultSet.java | 6 + .../druid/pool/benckmark/Oracle_Case0.java | 142 ++++++++++++++++++ 2 files changed, 148 insertions(+) create mode 100644 src/test/java/com/alibaba/druid/pool/benckmark/Oracle_Case0.java diff --git a/src/main/java/com/alibaba/druid/pool/PoolableResultSet.java b/src/main/java/com/alibaba/druid/pool/PoolableResultSet.java index 3ef2ddbe1c..26d8748a9b 100644 --- a/src/main/java/com/alibaba/druid/pool/PoolableResultSet.java +++ b/src/main/java/com/alibaba/druid/pool/PoolableResultSet.java @@ -39,6 +39,7 @@ public final class PoolableResultSet extends PoolableWrapper implements ResultSe private final ResultSet rs; private final PoolableStatement stmt; + private boolean closed = false; public PoolableResultSet(PoolableStatement stmt, ResultSet rs){ this.stmt = stmt; @@ -70,6 +71,7 @@ public final class PoolableResultSet extends PoolableWrapper implements ResultSe public void close() throws SQLException { try { rs.close(); + this.closed = true; } catch (Throwable t) { throw checkException(t); } @@ -1359,6 +1361,10 @@ public final class PoolableResultSet extends PoolableWrapper implements ResultSe @Override public boolean isClosed() throws SQLException { + if (this.closed) { + return true; + } + try { return rs.isClosed(); } catch (Throwable t) { diff --git a/src/test/java/com/alibaba/druid/pool/benckmark/Oracle_Case0.java b/src/test/java/com/alibaba/druid/pool/benckmark/Oracle_Case0.java new file mode 100644 index 0000000000..60736ce2db --- /dev/null +++ b/src/test/java/com/alibaba/druid/pool/benckmark/Oracle_Case0.java @@ -0,0 +1,142 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.pool.benckmark; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.text.NumberFormat; + +import javax.sql.DataSource; + +import junit.framework.TestCase; + +import org.apache.commons.dbcp.BasicDataSource; + +import com.alibaba.druid.TestUtil; +import com.alibaba.druid.pool.DruidDataSource; +import com.jolbox.bonecp.BoneCPDataSource; + +public class Oracle_Case0 extends TestCase { + + private String jdbcUrl; + private String user; + private String password; + private String driverClass; + private int initialSize = 10; + private int minPoolSize = 1; + private int maxPoolSize = 2; + private int maxActive = 2; + private String validationQuery = "SELECT 1 FROM DUAL"; + + public final int LOOP_COUNT = 5; + + protected void setUp() throws Exception { + jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; + user = "alibaba"; + password = "ccbuauto"; + driverClass = "oracle.jdbc.driver.OracleDriver"; + } + + public void test_0() throws Exception { + DruidDataSource dataSource = new DruidDataSource(); + + dataSource.setInitialSize(initialSize); + dataSource.setMaxActive(maxActive); + dataSource.setMinIdle(minPoolSize); + dataSource.setMaxIdle(maxPoolSize); + dataSource.setPoolPreparedStatements(true); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(jdbcUrl); + dataSource.setPoolPreparedStatements(true); + dataSource.setUsername(user); + dataSource.setPassword(password); + dataSource.setValidationQuery(validationQuery); + dataSource.setTestOnBorrow(true); + + for (int i = 0; i < LOOP_COUNT; ++i) { + p0(dataSource, "druid"); + } + System.out.println(); + } + + public void test_1() throws Exception { + final BasicDataSource dataSource = new BasicDataSource(); + + dataSource.setInitialSize(initialSize); + dataSource.setMaxActive(maxActive); + dataSource.setMinIdle(minPoolSize); + dataSource.setMaxIdle(maxPoolSize); + dataSource.setPoolPreparedStatements(true); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(jdbcUrl); + dataSource.setPoolPreparedStatements(true); + dataSource.setUsername(user); + dataSource.setPassword(password); + dataSource.setValidationQuery(validationQuery); + dataSource.setTestOnBorrow(true); + + for (int i = 0; i < LOOP_COUNT; ++i) { + p0(dataSource, "dbcp"); + } + System.out.println(); + } + + public void test_2() throws Exception { + BoneCPDataSource dataSource = new BoneCPDataSource(); + // dataSource.(10); + // dataSource.setMaxActive(50); + dataSource.setMinConnectionsPerPartition(minPoolSize); + dataSource.setMaxConnectionsPerPartition(maxPoolSize); + + dataSource.setDriverClass(driverClass); + dataSource.setJdbcUrl(jdbcUrl); + // dataSource.setPoolPreparedStatements(true); + // dataSource.setMaxOpenPreparedStatements(100); + dataSource.setUsername(user); + dataSource.setPassword(password); + dataSource.setConnectionTestStatement(validationQuery); + dataSource.setPartitionCount(1); + + for (int i = 0; i < LOOP_COUNT; ++i) { + p0(dataSource, "boneCP"); + } + System.out.println(); + } + + private void p0(DataSource dataSource, String name) throws SQLException { + long startMillis = System.currentTimeMillis(); + long startYGC = TestUtil.getYoungGC(); + long startFullGC = TestUtil.getFullGC(); + + final int COUNT = 1000 * 1; + for (int i = 0; i < COUNT; ++i) { + Connection conn = dataSource.getConnection(); + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT 1 FROM DUAL"); + rs.next(); + rs.close(); + stmt.close(); + conn.close(); + } + long millis = System.currentTimeMillis() - startMillis; + long ygc = TestUtil.getYoungGC() - startYGC; + long fullGC = TestUtil.getFullGC() - startFullGC; + + System.out.println(name + " millis : " + NumberFormat.getInstance().format(millis) + ", YGC " + ygc + " FGC " + fullGC); + } +}