You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by rw...@apache.org on 2002/11/08 19:51:07 UTC

cvs commit: jakarta-commons/dbcp/src/test/org/apache/commons/dbcp/jdbc2pool TestJdbc2PoolDataSource.java

rwaldhoff    2002/11/08 10:51:07

  Modified:    dbcp     build.xml maven.xml
               dbcp/doc test.jocl
               dbcp/src/java/org/apache/commons/dbcp/cpdsadapter
                        ConnectionImpl.java
                        PoolablePreparedStatementStub.java
                        PooledConnectionImpl.java
               dbcp/src/test/org/apache/commons/dbcp TestAll.java
                        TestJOCLed.java TestManual.java
                        TesterStatement.java
               dbcp/src/test/org/apache/commons/dbcp/jdbc2pool
                        TestJdbc2PoolDataSource.java
  Added:       dbcp/src/test testpool.jocl
               dbcp/src/test/org/apache/commons/dbcp
                        TestConnectionPool.java
  Log:
  refactor/cleanup test suite a bit
  apply generic tests to more configurations
  fix a couple of bugs that revealed
  
  Revision  Changes    Path
  1.16      +6 -1      jakarta-commons/dbcp/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/dbcp/build.xml,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- build.xml	5 Sep 2002 23:38:49 -0000	1.15
  +++ build.xml	8 Nov 2002 18:51:06 -0000	1.16
  @@ -239,6 +239,11 @@
                debug="true"
                deprecation="true"
                optimize="true"/>
  +      <copy todir="${dest.classes}" filtering="no">
  +        <fileset dir="${source.src.test}" defaultexcludes="no">
  +          <include name="testpool.jocl"/>
  +        </fileset>
  +      </copy>
      </target>
   
      <!-- ######################################################### -->
  
  
  
  1.2       +9 -2      jakarta-commons/dbcp/maven.xml
  
  Index: maven.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/dbcp/maven.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- maven.xml	23 Jul 2002 16:43:14 -0000	1.1
  +++ maven.xml	8 Nov 2002 18:51:06 -0000	1.2
  @@ -1,4 +1,11 @@
  -<project default="java:jar"
  -  xmlns:j="jelly:core">
  +<project default="java:jar" xmlns:j="jelly:core">
  +
  +    <postGoal name="test:compile">
  +      <copy todir="target/test-classes">
  +        <fileset dir="src/test">
  +          <include name="testpool.jocl"/>
  +        </fileset>
  +      </copy>
  +    </postGoal>
   
   </project>
  
  
  
  1.2       +2 -2      jakarta-commons/dbcp/doc/test.jocl
  
  Index: test.jocl
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/dbcp/doc/test.jocl,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- test.jocl	14 Apr 2001 17:16:57 -0000	1.1
  +++ test.jocl	8 Nov 2002 18:51:07 -0000	1.2
  @@ -19,10 +19,10 @@
      </object>
      <object class="org.apache.commons.pool.impl.GenericKeyedObjectPoolFactory">
         <object class="org.apache.commons.pool.KeyedPoolableObjectFactory" null="true"/>
  -      <int value="5"/>
  +      <int value="10"/>
         <byte value="1"/>
         <long value="2000"/>
  -      <int value="5"/>
  +      <int value="10"/>
         <boolean value="true"/>
         <boolean value="true"/>
         <long value="10000"/>
  
  
  
  1.2       +3 -2      jakarta-commons/dbcp/src/java/org/apache/commons/dbcp/cpdsadapter/ConnectionImpl.java
  
  Index: ConnectionImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/dbcp/src/java/org/apache/commons/dbcp/cpdsadapter/ConnectionImpl.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ConnectionImpl.java	5 Aug 2002 06:42:01 -0000	1.1
  +++ ConnectionImpl.java	8 Nov 2002 18:51:07 -0000	1.2
  @@ -3,7 +3,7 @@
   /* ====================================================================
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 2001 The Apache Software Foundation.  All rights
  + * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -170,6 +170,7 @@
       public void close()
           throws SQLException
       {
  +        assertOpen();
           isClosed = true;
           pooledConnection.notifyListeners();
       }
  
  
  
  1.2       +8 -8      jakarta-commons/dbcp/src/java/org/apache/commons/dbcp/cpdsadapter/PoolablePreparedStatementStub.java
  
  Index: PoolablePreparedStatementStub.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/dbcp/src/java/org/apache/commons/dbcp/cpdsadapter/PoolablePreparedStatementStub.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- PoolablePreparedStatementStub.java	5 Aug 2002 06:42:01 -0000	1.1
  +++ PoolablePreparedStatementStub.java	8 Nov 2002 18:51:07 -0000	1.2
  @@ -1,5 +1,5 @@
   /*
  - * $Header$
  + * $Id$
    * $Revision$
    * $Date$
    *
  @@ -7,7 +7,7 @@
    *
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
  + * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -80,10 +80,10 @@
   
       /**
        * Constructor
  -     * @param stmt my underlying {*link PreparedStatement}
  -     * @param key my key" as used by {*link KeyedObjectPool}
  -     * @param pool the {*link KeyedObjectPool} from which I was obtained.
  -     * @param conn the {*link Connection} from which I was created
  +     * @param stmt my underlying {@link PreparedStatement}
  +     * @param key my key" as used by {@link KeyedObjectPool}
  +     * @param pool the {@link KeyedObjectPool} from which I was obtained.
  +     * @param conn the {@link Connection} from which I was created
        */
       public PoolablePreparedStatementStub(PreparedStatement stmt, Object key, 
           KeyedObjectPool pool, Connection conn) {
  
  
  
  1.2       +2 -1      jakarta-commons/dbcp/src/java/org/apache/commons/dbcp/cpdsadapter/PooledConnectionImpl.java
  
  Index: PooledConnectionImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/dbcp/src/java/org/apache/commons/dbcp/cpdsadapter/PooledConnectionImpl.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- PooledConnectionImpl.java	5 Aug 2002 06:42:01 -0000	1.1
  +++ PooledConnectionImpl.java	8 Nov 2002 18:51:07 -0000	1.2
  @@ -146,6 +146,7 @@
       public void close()
           throws SQLException
       {        
  +        assertOpen();
           isClosed = true;
           if (pstmtPool != null) 
           {
  
  
  
  1.1                  jakarta-commons/dbcp/src/test/testpool.jocl
  
  Index: testpool.jocl
  ===================================================================
  <object class="org.apache.commons.dbcp.PoolableConnectionFactory" xmlns="http://apache.org/xml/xmlns/jakarta/commons/jocl">
     <object class="org.apache.commons.dbcp.DriverConnectionFactory">
        <object class="org.apache.commons.dbcp.TesterDriver"/>
        <string value="jdbc:apache:commons:testdriver"/>
        <object class="java.util.Properties" null="true"/>
     </object>
     <object class="org.apache.commons.pool.impl.GenericObjectPool">
        <object class="org.apache.commons.pool.PoolableObjectFactory" null="true"/>
        <int value="10"/>
        <byte value="1"/>
        <long value="2000"/>
        <int value="10"/>
        <boolean value="true"/>
        <boolean value="true"/>
        <long value="10000"/>
        <int value="5"/>
        <long value="5000"/>
        <boolean value="true"/>
     </object>
     <object class="org.apache.commons.pool.impl.GenericKeyedObjectPoolFactory">
        <object class="org.apache.commons.pool.KeyedPoolableObjectFactory" null="true"/>
        <int value="5"/>
        <byte value="1"/>
        <long value="2000"/>
        <int value="5"/>
        <boolean value="true"/>
        <boolean value="true"/>
        <long value="10000"/>
        <int value="5"/>
        <long value="5000"/>
        <boolean value="true"/>
     </object>
     <string value="SELECT COUNT(*) FROM DUAL"/>
     <boolean value="false"/>
     <boolean value="true"/>
  </object>
  
  
  
  1.4       +5 -4      jakarta-commons/dbcp/src/test/org/apache/commons/dbcp/TestAll.java
  
  Index: TestAll.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/dbcp/src/test/org/apache/commons/dbcp/TestAll.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TestAll.java	31 Oct 2002 21:41:50 -0000	1.3
  +++ TestAll.java	8 Nov 2002 18:51:07 -0000	1.4
  @@ -76,6 +76,7 @@
       public static Test suite() {
           TestSuite suite = new TestSuite();
           suite.addTest(TestManual.suite());
  +        suite.addTest(TestJOCLed.suite());
           suite.addTest(TestDelegatingStatement.suite());
           suite.addTest(TestDelegatingPreparedStatement.suite());
           suite.addTest(TestJdbc2PoolDataSource.suite());
  
  
  
  1.3       +17 -179   jakarta-commons/dbcp/src/test/org/apache/commons/dbcp/TestJOCLed.java
  
  Index: TestJOCLed.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/dbcp/src/test/org/apache/commons/dbcp/TestJOCLed.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TestJOCLed.java	16 Mar 2002 13:29:49 -0000	1.2
  +++ TestJOCLed.java	8 Nov 2002 18:51:07 -0000	1.3
  @@ -1,13 +1,12 @@
   /*
  - * $Header$
  + * $Id$
    * $Revision$
    * $Date$
  - *
    * ====================================================================
    *
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
  + * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -61,23 +60,17 @@
   
   package org.apache.commons.dbcp;
   
  -import junit.framework.*;
  -import java.sql.*;
  -import org.apache.commons.pool.*;
  -import org.apache.commons.pool.impl.*;
  -
  -// this suite requires a JOCL configuration
  -// file named testpool.jocl to be in your classpath
  -// see the doc directory for an example
  +import java.sql.Connection;
  +import java.sql.DriverManager;
   
  -// note that depending upon the configuration of the testpool,
  -// testThreaded1 might fail
  +import junit.framework.Test;
  +import junit.framework.TestSuite;
   
   /**
    * @author Rodney Waldhoff
  - * @version $Id$
  + * @version $Revision$ $Date$
    */
  -public class TestJOCLed extends TestCase {
  +public class TestJOCLed extends TestConnectionPool {
       public TestJOCLed(String testName) {
           super(testName);
       }
  @@ -86,173 +79,18 @@
           return new TestSuite(TestJOCLed.class);
       }
   
  -    public static void main(String args[]) {
  -        String[] testCaseName = { TestJOCLed.class.getName() };
  -        junit.textui.TestRunner.main(testCaseName);
  +    protected Connection getConnection() throws Exception {
  +        return DriverManager.getConnection("jdbc:apache:commons:dbcp:/testpool");
       }
   
  +    private PoolingDriver driver = null;
  +    
       public void setUp() throws Exception {
  -        Class.forName("org.apache.commons.dbcp.PoolingDriver");
  -    }
  -
  -    public void testSimple() throws Exception {
  -        Connection conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:/testpool");
  -        assertTrue(null != conn);
  -        PreparedStatement stmt = conn.prepareStatement("select * from dual");
  -        assertTrue(null != stmt);
  -        ResultSet rset = stmt.executeQuery();
  -        assertTrue(null != rset);
  -        assertTrue(rset.next());
  -        rset.close();
  -        stmt.close();
  -        conn.close();
  -    }
  -
  -    public void testSimple2() throws Exception {
  -        Connection conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:/testpool");
  -        assertTrue(null != conn);
  -        {
  -            PreparedStatement stmt = conn.prepareStatement("select * from dual");
  -            assertTrue(null != stmt);
  -            ResultSet rset = stmt.executeQuery();
  -            assertTrue(null != rset);
  -            assertTrue(rset.next());
  -            rset.close();
  -            stmt.close();
  -        }
  -        {
  -            PreparedStatement stmt = conn.prepareStatement("select * from dual");
  -            assertTrue(null != stmt);
  -            ResultSet rset = stmt.executeQuery();
  -            assertTrue(null != rset);
  -            assertTrue(rset.next());
  -            rset.close();
  -            stmt.close();
  -        }
  -        conn.close();
  -        try {
  -            conn.createStatement();
  -            fail("Can't use closed connections");
  -        } catch(SQLException e) {
  -            ; // expected
  -        }
  -
  -        conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:/testpool");
  -        assertTrue(null != conn);
  -        {
  -            PreparedStatement stmt = conn.prepareStatement("select * from dual");
  -            assertTrue(null != stmt);
  -            ResultSet rset = stmt.executeQuery();
  -            assertTrue(null != rset);
  -            assertTrue(rset.next());
  -            rset.close();
  -            stmt.close();
  -        }
  -        {
  -            PreparedStatement stmt = conn.prepareStatement("select * from dual");
  -            assertTrue(null != stmt);
  -            ResultSet rset = stmt.executeQuery();
  -            assertTrue(null != rset);
  -            assertTrue(rset.next());
  -            rset.close();
  -            stmt.close();
  -        }
  -        conn.close();
  -        conn = null;
  -    }
  -
  -    public void testPooling() throws Exception {
  -        Connection conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:/testpool");
  -        assertTrue(conn != null);
  -        Connection conn2 = DriverManager.getConnection("jdbc:apache:commons:dbcp:/testpool");
  -        assertTrue(conn2 != null);
  -        assertTrue(conn != conn2);
  -        conn2.close();
  -        conn.close();
  -        conn2 = DriverManager.getConnection("jdbc:apache:commons:dbcp:/testpool");
  -        assertSame(conn,conn2);
  -    }
  -
  -    public void testThreaded1() {
  -        TestThread[] threads = new TestThread[20];
  -        for(int i=0;i<20;i++) {
  -            threads[i] = new TestThread(100,50);
  -            Thread t = new Thread(threads[i]);
  -            t.start();
  -        }
  -        for(int i=0;i<20;i++) {
  -            while(!(threads[i]).complete()) {
  -                try {
  -                    Thread.currentThread().sleep(500L);
  -                } catch(Exception e) {
  -                    // ignored
  -                }
  -            }
  -            if(threads[i].failed()) {
  -                fail();
  -            }
  -        }
  +        driver = new PoolingDriver();
       }
   
  -    class TestThread implements Runnable {
  -        java.util.Random _random = new java.util.Random();
  -        boolean _complete = false;
  -        boolean _failed = false;
  -        int _iter = 100;
  -        int _delay = 50;
  -
  -        public TestThread() {
  -        }
  -
  -        public TestThread(int iter) {
  -            _iter = iter;
  -        }
  -
  -        public TestThread(int iter, int delay) {
  -            _iter = iter;
  -            _delay = delay;
  -        }
  -
  -        public boolean complete() {
  -            return _complete;
  -        }
  -
  -        public boolean failed() {
  -            return _failed;
  -        }
  -
  -        public void run() {
  -            for(int i=0;i<_iter;i++) {
  -                try {
  -                    Thread.currentThread().sleep((long)_random.nextInt(_delay));
  -                } catch(Exception e) {
  -                    // ignored
  -                }
  -                Connection conn = null;
  -                PreparedStatement stmt = null;
  -                ResultSet rset = null;
  -                try {
  -                    conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:/testpool");
  -                    stmt = conn.prepareStatement("select 'literal', SYSDATE from dual");
  -                    rset = stmt.executeQuery();
  -                    try {
  -                        Thread.currentThread().sleep((long)_random.nextInt(_delay));
  -                    } catch(Exception e) {
  -                        // ignored
  -                    }
  -                } catch(Exception e) {
  -                    e.printStackTrace();
  -                    _failed = true;
  -                    _complete = true;
  -                    break;
  -                } finally {
  -                    try { rset.close(); } catch(Exception e) { }
  -                    try { stmt.close(); } catch(Exception e) { }
  -                    try { conn.close(); } catch(Exception e) { }
  -                }
  -            }
  -            _complete = true;
  -        }
  +    public void tearDown() throws Exception {
  +        DriverManager.deregisterDriver(driver);
       }
   
   }
  
  
  
  1.12      +27 -166   jakarta-commons/dbcp/src/test/org/apache/commons/dbcp/TestManual.java
  
  Index: TestManual.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/dbcp/src/test/org/apache/commons/dbcp/TestManual.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- TestManual.java	7 Nov 2002 21:06:57 -0000	1.11
  +++ TestManual.java	8 Nov 2002 18:51:07 -0000	1.12
  @@ -1,13 +1,12 @@
   /*
  - * $Header$
  + * $Id$
    * $Revision$
    * $Date$
  - *
    * ====================================================================
    *
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
  + * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -61,19 +60,25 @@
   
   package org.apache.commons.dbcp;
   
  -import junit.framework.*;
  -import java.sql.*;
  -import org.apache.commons.pool.*;
  -import org.apache.commons.pool.impl.*;
  +import java.sql.Connection;
  +import java.sql.DriverManager;
  +
  +import junit.framework.Test;
  +import junit.framework.TestSuite;
  +
  +import org.apache.commons.pool.ObjectPool;
  +import org.apache.commons.pool.impl.GenericKeyedObjectPool;
  +import org.apache.commons.pool.impl.GenericKeyedObjectPoolFactory;
  +import org.apache.commons.pool.impl.GenericObjectPool;
   
   /**
  - * 
  + * Tests for a "manually configured", {@link GenericObjectPool}
  + * based {@link PoolingDriver}.
    * @author Rodney Waldhoff
    * @author Sean C. Sullivan
  - * 
  - * @version $Id$
  + * @version $Revision$ $Date$
    */
  -public class TestManual extends TestCase {
  +public class TestManual extends TestConnectionPool {
       public TestManual(String testName) {
           super(testName);
       }
  @@ -82,171 +87,27 @@
           return new TestSuite(TestManual.class);
       }
   
  -    public static void main(String args[]) {
  -        String[] testCaseName = { TestManual.class.getName() };
  -        junit.textui.TestRunner.main(testCaseName);
  +    protected Connection getConnection() throws Exception {
  +        return DriverManager.getConnection("jdbc:apache:commons:dbcp:test");
       }
   
  +    private PoolingDriver driver = null;
  +    
       public void setUp() throws Exception {
  -        GenericObjectPool pool = new GenericObjectPool(null, 10, GenericObjectPool.WHEN_EXHAUSTED_BLOCK, 2000L, 10, true, true, 10000L, 5, 5000L, true);
  +        super.setUp();
  +        GenericObjectPool pool = new GenericObjectPool(null, getMaxActive(), GenericObjectPool.WHEN_EXHAUSTED_BLOCK, getMaxWait(), 10, true, true, 10000L, 5, 5000L, true);
           DriverConnectionFactory cf = new DriverConnectionFactory(new TesterDriver(),"jdbc:apache:commons:testdriver",null);
           GenericKeyedObjectPoolFactory opf = new GenericKeyedObjectPoolFactory(null, 10, GenericKeyedObjectPool.WHEN_EXHAUSTED_BLOCK, 2000L, 10, true, true, 10000L, 5, 5000L, true);
           PoolableConnectionFactory pcf = new PoolableConnectionFactory(cf, pool, opf, "SELECT COUNT(*) FROM DUAL", false, true);
  -        PoolingDriver driver = new PoolingDriver();
  +        driver = new PoolingDriver();
           driver.registerPool("test",pool);
           DriverManager.registerDriver(driver);
       }
   
  -    public void testIsClosed() throws Exception {
  -        for(int i=0;i<10;i++) {
  -            Connection conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:test");
  -            assertTrue(null != conn);
  -            assertTrue(!conn.isClosed());
  -            PreparedStatement stmt = conn.prepareStatement("select * from dual");
  -            assertTrue(null != stmt);
  -            ResultSet rset = stmt.executeQuery();
  -            assertTrue(null != rset);
  -            assertTrue(rset.next());
  -            rset.close();
  -            stmt.close();
  -            conn.close();
  -            assertTrue(conn.isClosed());
  -        }
  -    }
  -
  -    public void testCantCloseConnectionTwice() throws Exception {
  -        for(int i=0;i<2;i++) { // loop to show we *can* close again once we've borrowed it from the pool again
  -            Connection conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:test");
  -            assertTrue(null != conn);
  -            assertTrue(!conn.isClosed());
  -            conn.close();
  -            assertTrue(conn.isClosed());
  -            try {
  -                conn.close();
  -                fail("Expected SQLException on second attempt to close");
  -            } catch(SQLException e) {
  -                // expected
  -            }
  -            assertTrue(conn.isClosed());
  -        }
  -    }
  -
  -    public void testCantCloseStatementTwice() throws Exception {
  -        Connection conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:test");
  -        assertTrue(null != conn);
  -        assertTrue(!conn.isClosed());
  -        for(int i=0;i<2;i++) { // loop to show we *can* close again once we've borrowed it from the pool again
  -            PreparedStatement stmt = conn.prepareStatement("select * from dual");
  -            assertTrue(null != stmt);
  -            stmt.close();
  -            try {
  -                stmt.close();
  -                fail("Expected SQLException on second attempt to close");
  -            } catch(SQLException e) {
  -                // expected
  -            }
  -        }
  -        conn.close();
  +    public void tearDown() throws Exception {
  +        DriverManager.deregisterDriver(driver);
       }
   
  -    public void testSimple() throws Exception {
  -        Connection conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:test");
  -        assertTrue(null != conn);
  -        PreparedStatement stmt = conn.prepareStatement("select * from dual");
  -        assertTrue(null != stmt);
  -        ResultSet rset = stmt.executeQuery();
  -        assertTrue(null != rset);
  -        assertTrue(rset.next());
  -        rset.close();
  -        stmt.close();
  -        conn.close();
  -    }
  -
  -    public void testSimple2() throws Exception {
  -        Connection conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:test");
  -        assertTrue(null != conn);
  -        {
  -            PreparedStatement stmt = conn.prepareStatement("select * from dual");
  -            assertTrue(null != stmt);
  -            ResultSet rset = stmt.executeQuery();
  -            assertTrue(null != rset);
  -            assertTrue(rset.next());
  -            rset.close();
  -            stmt.close();
  -        }
  -        {
  -            PreparedStatement stmt = conn.prepareStatement("select * from dual");
  -            assertTrue(null != stmt);
  -            ResultSet rset = stmt.executeQuery();
  -            assertTrue(null != rset);
  -            assertTrue(rset.next());
  -            rset.close();
  -            stmt.close();
  -        }
  -        conn.close();
  -        try {
  -            conn.createStatement();
  -            fail("Can't use closed connections");
  -        } catch(SQLException e) {
  -            ; // expected
  -        }
  -
  -        conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:test");
  -        assertTrue(null != conn);
  -        {
  -            PreparedStatement stmt = conn.prepareStatement("select * from dual");
  -            assertTrue(null != stmt);
  -            ResultSet rset = stmt.executeQuery();
  -            assertTrue(null != rset);
  -            assertTrue(rset.next());
  -            rset.close();
  -            stmt.close();
  -        }
  -        {
  -            PreparedStatement stmt = conn.prepareStatement("select * from dual");
  -            assertTrue(null != stmt);
  -            ResultSet rset = stmt.executeQuery();
  -            assertTrue(null != rset);
  -            assertTrue(rset.next());
  -            rset.close();
  -            stmt.close();
  -        }
  -        conn.close();
  -        conn = null;
  -    }
  -
  -    public void testPooling() throws Exception {
  -        Connection conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:test");
  -        assertTrue(conn != null);
  -        Connection conn2 = DriverManager.getConnection("jdbc:apache:commons:dbcp:test");
  -        assertTrue(conn2 != null);
  -        assertTrue(conn != conn2);
  -        conn2.close();
  -        conn.close();
  -        Connection conn3 = DriverManager.getConnection("jdbc:apache:commons:dbcp:test");
  -        assertTrue( conn3 == conn || conn3 == conn2 );
  -    }
  -    
  -    public void testAutoCommitBehavior() throws Exception {
  -        
  -        final String strDriverUrl = "jdbc:apache:commons:dbcp:test";
  -        Connection conn = DriverManager.getConnection(strDriverUrl);
  -        assertTrue(conn != null);
  -        assertTrue(conn.getAutoCommit());
  -        conn.setAutoCommit(false);
  -        conn.close();
  -        
  -        Connection conn2 = DriverManager.getConnection(strDriverUrl);
  -        assertTrue( conn2.getAutoCommit() );
  -        
  -        Connection conn3 = DriverManager.getConnection(strDriverUrl);
  -        assertTrue( conn3.getAutoCommit() );
  -
  -        conn2.close();
  -        
  -        conn3.close();
  -    }
  -    
       /** @see http://issues.apache.org/bugzilla/show_bug.cgi?id=12400 */
       public void testReportedBug12400() throws Exception {
           ObjectPool connectionPool = new GenericObjectPool(
  
  
  
  1.4       +5 -4      jakarta-commons/dbcp/src/test/org/apache/commons/dbcp/TesterStatement.java
  
  Index: TesterStatement.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/dbcp/src/test/org/apache/commons/dbcp/TesterStatement.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TesterStatement.java	31 Oct 2002 21:41:50 -0000	1.3
  +++ TesterStatement.java	8 Nov 2002 18:51:07 -0000	1.4
  @@ -7,7 +7,7 @@
    *
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
  + * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -100,6 +100,7 @@
       }
   
       public void close() throws SQLException {
  +        checkOpen();
           _open = false;
       }
   
  
  
  
  1.1                  jakarta-commons/dbcp/src/test/org/apache/commons/dbcp/TestConnectionPool.java
  
  Index: TestConnectionPool.java
  ===================================================================
  /*
   * $Id: TestConnectionPool.java,v 1.1 2002/11/08 18:51:07 rwaldhoff Exp $
   * $Revision: 1.1 $
   * $Date: 2002/11/08 18:51:07 $
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Commons", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   */
  
  package org.apache.commons.dbcp;
  
  import java.sql.Connection;
  import java.sql.PreparedStatement;
  import java.sql.ResultSet;
  import java.sql.SQLException;
  
  import junit.framework.TestCase;
  
  // XXX FIX ME XXX
  // this class still needs some cleanup, but at least
  // this consolidates most of the relevant test code
  // in a fairly re-usable fashion
  // XXX FIX ME XXX
  
  /**
   * Base test suite for DBCP pools.
   * @author Rodney Waldhoff
   * @author Sean C. Sullivan
   * @author John McNally
   * 
   * @version $Id: TestConnectionPool.java,v 1.1 2002/11/08 18:51:07 rwaldhoff Exp $
   */
  public abstract class TestConnectionPool extends TestCase {
      public TestConnectionPool(String testName) {
          super(testName);
      }
  
      public void setUp() throws Exception {
          super.setUp();
      }
  
      public void tearDown() throws Exception {
          super.tearDown();
      }
  
      protected abstract Connection getConnection() throws Exception;
      
      protected int getMaxActive() {
          return 10;
      }
      
      protected long getMaxWait() {
          return 50L;
      }
          
      public void testIsClosed() throws Exception {
          for(int i=0;i<getMaxActive();i++) {
              Connection conn = getConnection();
              assertTrue(null != conn);
              assertTrue(!conn.isClosed());
              PreparedStatement stmt = conn.prepareStatement("select * from dual");
              assertTrue(null != stmt);
              ResultSet rset = stmt.executeQuery();
              assertTrue(null != rset);
              assertTrue(rset.next());
              rset.close();
              stmt.close();
              conn.close();
              assertTrue(conn.isClosed());
          }
      }
  
      public void testCantCloseConnectionTwice() throws Exception {
          for(int i=0;i<getMaxActive();i++) { // loop to show we *can* close again once we've borrowed it from the pool again
              Connection conn = getConnection();
              assertTrue(null != conn);
              assertTrue(!conn.isClosed());
              conn.close();
              assertTrue(conn.isClosed());
              try {
                  conn.close();
                  fail("Expected SQLException on second attempt to close (" + conn.getClass().getName() + ")");
              } catch(SQLException e) {
                  // expected
              }
              assertTrue(conn.isClosed());
          }
      }
  
      public void testCantCloseStatementTwice() throws Exception {
          Connection conn = getConnection();
          assertTrue(null != conn);
          assertTrue(!conn.isClosed());
          for(int i=0;i<2;i++) { // loop to show we *can* close again once we've borrowed it from the pool again
              PreparedStatement stmt = conn.prepareStatement("select * from dual");
              assertTrue(null != stmt);
              stmt.close();
              try {
                  stmt.close();
                  fail("Expected SQLException on second attempt to close (" + stmt.getClass().getName() + ")");
              } catch(SQLException e) {
                  // expected
              }
          }
          conn.close();
      }
  
      public void testSimple() throws Exception {
          Connection conn = getConnection();
          assertTrue(null != conn);
          PreparedStatement stmt = conn.prepareStatement("select * from dual");
          assertTrue(null != stmt);
          ResultSet rset = stmt.executeQuery();
          assertTrue(null != rset);
          assertTrue(rset.next());
          rset.close();
          stmt.close();
          conn.close();
      }
  
      public void testSimple2() throws Exception {
          Connection conn = getConnection();
          assertTrue(null != conn);
          {
              PreparedStatement stmt = conn.prepareStatement("select * from dual");
              assertTrue(null != stmt);
              ResultSet rset = stmt.executeQuery();
              assertTrue(null != rset);
              assertTrue(rset.next());
              rset.close();
              stmt.close();
          }
          {
              PreparedStatement stmt = conn.prepareStatement("select * from dual");
              assertTrue(null != stmt);
              ResultSet rset = stmt.executeQuery();
              assertTrue(null != rset);
              assertTrue(rset.next());
              rset.close();
              stmt.close();
          }
          conn.close();
          try {
              conn.createStatement();
              fail("Can't use closed connections");
          } catch(SQLException e) {
              ; // expected
          }
  
          conn = getConnection();
          assertTrue(null != conn);
          {
              PreparedStatement stmt = conn.prepareStatement("select * from dual");
              assertTrue(null != stmt);
              ResultSet rset = stmt.executeQuery();
              assertTrue(null != rset);
              assertTrue(rset.next());
              rset.close();
              stmt.close();
          }
          {
              PreparedStatement stmt = conn.prepareStatement("select * from dual");
              assertTrue(null != stmt);
              ResultSet rset = stmt.executeQuery();
              assertTrue(null != rset);
              assertTrue(rset.next());
              rset.close();
              stmt.close();
          }
          conn.close();
          conn = null;
      }
  
      public void testPooling() throws Exception {
          Connection conn = getConnection();
          Connection underconn = null;
          if(conn instanceof DelegatingConnection) {
              underconn = ((DelegatingConnection)conn).getInnermostDelegate();
          } else {
              return; // skip this test
          }
          assertTrue(underconn != null);
          Connection conn2 = getConnection();
          Connection underconn2 = null;
          if(conn2 instanceof DelegatingConnection) {
              underconn2 = ((DelegatingConnection)conn2).getInnermostDelegate();
          } else {
              return; // skip this test
          }
          assertTrue(underconn2 != null);
          assertTrue(underconn != underconn2);
          conn2.close();
          conn.close();
          Connection conn3 = getConnection();
          Connection underconn3 = null;
          if(conn3 instanceof DelegatingConnection) {
              underconn3 = ((DelegatingConnection)conn3).getInnermostDelegate();
          } else {
              return; // skip this test
          }
          assertTrue( underconn3 == underconn || underconn3 == underconn2 );
          conn3.close();
      }
      
      public void testAutoCommitBehavior() throws Exception {
          Connection conn = getConnection();
          assertTrue(conn != null);
          assertTrue(conn.getAutoCommit());
          conn.setAutoCommit(false);
          conn.close();
          
          Connection conn2 = getConnection();
          assertTrue( conn2.getAutoCommit() );
          
          Connection conn3 = getConnection();
          assertTrue( conn3.getAutoCommit() );
  
          conn2.close();
          
          conn3.close();
      }
      
      /** @see http://issues.apache.org/bugzilla/show_bug.cgi?id=12400 */
      public void testConnectionsAreDistinct() throws Exception {
          Connection[] conn = new Connection[getMaxActive()];
          for(int i=0;i<conn.length;i++) {
              conn[i] = getConnection();
              for(int j=0;j<i;j++) {
                  assertTrue(conn[j] != conn[i]);
                  assertTrue(!conn[j].equals(conn[i]));
              }
          }
          for(int i=0;i<conn.length;i++) {
              conn[i].close();
          }
      }
  
  
      public void testOpening() throws Exception {
          Connection[] c = new Connection[getMaxActive()];
          // test that opening new connections is not closing previous
          for (int i = 0; i < c.length; i++) {
              c[i] = getConnection();
              assertTrue(c[i] != null);
              for (int j = 0; j <= i; j++) {
                  assertTrue(!c[j].isClosed());
              }
          }
  
          for (int i = 0; i < c.length; i++) {
              c[i].close();
          }
      }
  
      public void testClosing() throws Exception {
          Connection[] c = new Connection[getMaxActive()];
          // open the maximum connections
          for (int i = 0; i < c.length; i++) {
              c[i] = getConnection();
          }
  
          // close one of the connections
          c[0].close();
          assertTrue(c[0].isClosed());
  
          // get a new connection
          c[0] = getConnection();
  
          for (int i = 0; i < c.length; i++) {
              c[i].close();
          }
      }
  
      public void testMaxActive() throws Exception {
          Connection[] c = new Connection[getMaxActive()];
          for (int i = 0; i < c.length; i++) {
              c[i] = getConnection();
              assertTrue(c[i] != null);
          }
  
          try {
              getConnection();
              fail("Allowed to open more than DefaultMaxActive connections.");
          } catch (java.util.NoSuchElementException e) {
              // should only be able to open 10 connections, so this test should
              // throw an exception
          }
  
          for (int i = 0; i < c.length; i++) {
              c[i].close();
          }
      }
  
      public void testThreaded() {
          TestThread[] threads = new TestThread[getMaxActive()];
          for(int i=0;i<threads.length;i++) {
              threads[i] = new TestThread(50,50);
              Thread t = new Thread(threads[i]);
              t.start();
          }
          for(int i=0;i<threads.length;i++) {
              while(!(threads[i]).complete()) {
                  try {
                      Thread.currentThread().sleep(100L);
                  } catch(Exception e) {
                      // ignored
                  }
              }
              if(threads[i].failed()) {
                  fail();
              }
          }
      }
  
      class TestThread implements Runnable {
          java.util.Random _random = new java.util.Random();
          boolean _complete = false;
          boolean _failed = false;
          int _iter = 100;
          int _delay = 50;
  
          public TestThread() {
          }
  
          public TestThread(int iter) {
              _iter = iter;
          }
  
          public TestThread(int iter, int delay) {
              _iter = iter;
              _delay = delay;
          }
  
          public boolean complete() {
              return _complete;
          }
  
          public boolean failed() {
              return _failed;
          }
  
          public void run() {
              for(int i=0;i<_iter;i++) {
                  try {
                      Thread.currentThread().sleep((long)_random.nextInt(_delay));
                  } catch(Exception e) {
                      // ignored
                  }
                  Connection conn = null;
                  PreparedStatement stmt = null;
                  ResultSet rset = null;
                  try {
                      conn = getConnection();
                      stmt = conn.prepareStatement("select 'literal', SYSDATE from dual");
                      rset = stmt.executeQuery();
                      try {
                          Thread.currentThread().sleep((long)_random.nextInt(_delay));
                      } catch(Exception e) {
                          // ignored
                      }
                  } catch(Exception e) {
                      e.printStackTrace();
                      _failed = true;
                      _complete = true;
                      break;
                  } finally {
                      try { rset.close(); } catch(Exception e) { }
                      try { stmt.close(); } catch(Exception e) { }
                      try { conn.close(); } catch(Exception e) { }
                  }
              }
              _complete = true;
          }
      }
      
  }
  
  
  
  1.2       +66 -227   jakarta-commons/dbcp/src/test/org/apache/commons/dbcp/jdbc2pool/TestJdbc2PoolDataSource.java
  
  Index: TestJdbc2PoolDataSource.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/dbcp/src/test/org/apache/commons/dbcp/jdbc2pool/TestJdbc2PoolDataSource.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestJdbc2PoolDataSource.java	5 Aug 2002 06:42:01 -0000	1.1
  +++ TestJdbc2PoolDataSource.java	8 Nov 2002 18:51:07 -0000	1.2
  @@ -1,5 +1,5 @@
   /*
  - * $Header$
  + * $Id$
    * $Revision$
    * $Date$
    *
  @@ -7,7 +7,7 @@
    *
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
  + * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -61,26 +61,23 @@
   
   package org.apache.commons.dbcp.jdbc2pool;
   
  -import junit.framework.*;
  -import java.sql.*;
  +import java.sql.Connection;
  +import java.sql.PreparedStatement;
  +import java.sql.ResultSet;
  +
   import javax.sql.DataSource;
  -import org.apache.commons.lang.exception.NestableRuntimeException;
  -import org.apache.commons.pool.*;
  -import org.apache.commons.pool.impl.*;
  +import junit.framework.Test;
  +import junit.framework.TestSuite;
   
  +import org.apache.commons.dbcp.TestConnectionPool;
   import org.apache.commons.dbcp.cpdsadapter.DriverAdapterCPDS;
  +import org.apache.commons.lang.exception.NestableRuntimeException;
   
   /**
  - * @author Rodney Waldhoff
  - * @version $Id$
  + * @author John McNally
  + * @version $Revision$ $Date$
    */
  -public class TestJdbc2PoolDataSource extends TestCase 
  -{
  -    private static final int MAX_ACTIVE = 10;
  -    private static final int MAX_WAIT = 50;
  -
  -    DataSource ds;
  -
  +public class TestJdbc2PoolDataSource extends TestConnectionPool {
       public TestJdbc2PoolDataSource(String testName) {
           super(testName);
       }
  @@ -89,13 +86,13 @@
           return new TestSuite(TestJdbc2PoolDataSource.class);
       }
   
  -    public static void main(String args[]) {
  -        String[] testCaseName = { TestJdbc2PoolDataSource.class.getName() };
  -        junit.textui.TestRunner.main(testCaseName);
  +    protected Connection getConnection() throws Exception {
  +        return ds.getConnection();
       }
   
  -    public void setUp() throws Exception 
  -    {
  +    private DataSource ds;
  +
  +    public void setUp() throws Exception {
           DriverAdapterCPDS pcds = new DriverAdapterCPDS();
           pcds.setDriver("org.apache.commons.dbcp.TesterDriver");
           pcds.setUrl("jdbc:apache:commons:testdriver");
  @@ -104,198 +101,48 @@
   
           Jdbc2PoolDataSource tds = new Jdbc2PoolDataSource();
           tds.setConnectionPoolDataSource(pcds);
  -        tds.setDefaultMaxActive(MAX_ACTIVE);
  -        tds.setDefaultMaxWait(MAX_WAIT);
  +        tds.setDefaultMaxActive(getMaxActive());
  +        tds.setDefaultMaxWait((int) (getMaxWait()));
   
           ds = tds;
       }
  -
  -    public void testSimple() throws Exception 
  -    {
  -        Connection conn = ds.getConnection();
  -        assertTrue(null != conn);
  -        PreparedStatement stmt = conn.prepareStatement("select * from dual");
  -        assertTrue(null != stmt);
  -        ResultSet rset = stmt.executeQuery();
  -        assertTrue(null != rset);
  -        assertTrue(rset.next());
  -        rset.close();
  -        stmt.close();
  -        conn.close();
  -    }
  -
  -    public void testSimple2() 
  -        throws Exception 
  -    {
  -        Connection conn = ds.getConnection();
  -        assertTrue(null != conn);
  -
  -        PreparedStatement stmt = 
  -            conn.prepareStatement("select * from dual");
  -        assertTrue(null != stmt);
  -        ResultSet rset = stmt.executeQuery();
  -        assertTrue(null != rset);
  -        assertTrue(rset.next());
  -        rset.close();
  -        stmt.close();
  -        
  -        stmt = conn.prepareStatement("select * from dual");
  -        assertTrue(null != stmt);
  -        rset = stmt.executeQuery();
  -        assertTrue(null != rset);
  -        assertTrue(rset.next());
  -        rset.close();
  -        stmt.close();
  -        
  -        conn.close();
  -        try 
  -        {
  -            conn.createStatement();
  -            fail("Can't use closed connections");
  -        } 
  -        catch(SQLException e) 
  -        {
  -            // expected
  -        }
  -
  -        conn = ds.getConnection();
  -        assertTrue(null != conn);
  -
  -        stmt = conn.prepareStatement("select * from dual");
  -        assertTrue(null != stmt);
  -        rset = stmt.executeQuery();
  -        assertTrue(null != rset);
  -        assertTrue(rset.next());
  -        rset.close();
  -        stmt.close();
  -
  -        stmt = conn.prepareStatement("select * from dual");
  -        assertTrue(null != stmt);
  -        rset = stmt.executeQuery();
  -        assertTrue(null != rset);
  -        assertTrue(rset.next());
  -        rset.close();
  -        stmt.close();
  -        
  -        conn.close();
  -        conn = null;
  -    }
  -
  -    public void testOpening() 
  -        throws Exception 
  -    {
  -        Connection[] c = new Connection[MAX_ACTIVE];
  -        // test that opening new connections is not closing previous
  -        for (int i=0; i<c.length; i++) 
  -        {
  -            c[i] = ds.getConnection();
  -            assertTrue(c[i] != null);
  -            for (int j=0; j<=i; j++) 
  -            {
  -                assertTrue(!c[j].isClosed());
  -            }
  -        }
  -
  -        for (int i=0; i<c.length; i++) 
  -        {
  -            c[i].close();
  -        }
  -    }
  -
  -    public void testClosing() 
  -        throws Exception 
  -    {
  -        Connection[] c = new Connection[MAX_ACTIVE];
  -        // open the maximum connections
  -        for (int i=0; i<c.length; i++) 
  -        {
  -            c[i] = ds.getConnection();
  -        }
  -
  -        // close one of the connections
  -        c[0].close();
  -        assertTrue(c[0].isClosed());
  -        
  -        // get a new connection
  -        c[0] = ds.getConnection();
  -
  -        for (int i=0; i<c.length; i++) 
  -        {
  -            c[i].close();
  -        }
  -    }
  -
  -    public void testMaxActive() 
  -        throws Exception 
  -    {
  -        Connection[] c = new Connection[MAX_ACTIVE];
  -        for (int i=0; i<c.length; i++) 
  -        {
  -            c[i] = ds.getConnection();
  -            assertTrue(c[i] != null);            
  -        }
  -
  -        try
  -        {
  -            ds.getConnection();
  -            fail("Allowed to open more than DefaultMaxActive connections.");
  -        }
  -        catch(java.util.NoSuchElementException e)
  -        {
  -            // should only be able to open 10 connections, so this test should
  -            // throw an exception
  -        }
  -
  -        for (int i=0; i<c.length; i++) 
  -        {
  -            c[i].close();
  -        }
  -    }
  -
  -    public void testMultipleThreads()
  -        throws Exception
  -    {
  +    
  +    public void testMultipleThreads() throws Exception {
           assertTrue(multipleThreads(1));
  -        assertTrue(!multipleThreads(2*MAX_WAIT));
  +        assertTrue(!multipleThreads(2 * (int)(getMaxWait())));
       }
   
  -    private boolean multipleThreads(int holdTime)
  -        throws Exception
  -    {
  +    private boolean multipleThreads(int holdTime) throws Exception {
           long startTime = System.currentTimeMillis();
           final boolean[] success = new boolean[1];
           success[0] = true;
  -        final PoolTest[] pts = new PoolTest[2*MAX_ACTIVE];
  -        ThreadGroup threadGroup = new ThreadGroup("foo")
  -            {
  -                public void uncaughtException(Thread t, Throwable e)
  +        final PoolTest[] pts = new PoolTest[2 * getMaxActive()];
  +        ThreadGroup threadGroup = new ThreadGroup("foo") {
  +            public void uncaughtException(Thread t, Throwable e) {
  +                /*
  +                for (int i = 0; i < pts.length; i++)
                   {
  -                    /*
  -                    for (int i = 0; i < pts.length; i++)
  -                    {
  -                        System.out.println(i + ": " + pts[i].reportState());
  -                    }
  -                    */
  -                    for (int i = 0; i < pts.length; i++)
  -                    {
  -                        pts[i].stop();
  -                    }
  -                    
  -                    //e.printStackTrace();
  -                    success[0] = false;
  +                    System.out.println(i + ": " + pts[i].reportState());
                   }
  -            };
  +                */
  +                for (int i = 0; i < pts.length; i++) {
  +                    pts[i].stop();
  +                }
  +
  +                //e.printStackTrace();
  +                success[0] = false;
  +            }
  +        };
   
  -        for (int i = 0; i < pts.length; i++)
  -        {
  +        for (int i = 0; i < pts.length; i++) {
               pts[i] = new PoolTest(threadGroup, holdTime);
           }
  -        Thread.currentThread().sleep(10*holdTime);
  -        for (int i = 0; i < pts.length; i++)
  -        {
  +        Thread.currentThread().sleep(10 * holdTime);
  +        for (int i = 0; i < pts.length; i++) {
               pts[i].stop();
           }
  -        long time = System.currentTimeMillis() - startTime; // - (pts.length*10*holdTime);
  +        long time = System.currentTimeMillis() - startTime;
  +        // - (pts.length*10*holdTime);
           System.out.println("Multithread test time = " + time + " ms");
   
           Thread.currentThread().sleep(holdTime);
  @@ -304,67 +151,59 @@
   
       private static int currentThreadCount = 0;
   
  -    private class PoolTest implements Runnable
  -    {
  +    private class PoolTest implements Runnable {
           /**
            * The number of milliseconds to hold onto a database connection
            */
           private int connHoldTime;
  -        
  +
           private boolean isRun;
  -        
  +
           private String state;
   
  -        protected PoolTest(ThreadGroup threadGroup, int connHoldTime)
  -        {
  +        protected PoolTest(ThreadGroup threadGroup, int connHoldTime) {
               this.connHoldTime = connHoldTime;
  -            Thread thread = new Thread(threadGroup, this,
  -                                       "Thread+" + currentThreadCount++);
  +            Thread thread =
  +                new Thread(threadGroup, this, "Thread+" + currentThreadCount++);
               thread.setDaemon(false);
               thread.start();
           }
  -        
  -        public void run()
  -        {
  +
  +        public void run() {
               Thread thread = Thread.currentThread();
               isRun = true;
  -            while (isRun)
  -            {
  -                try
  -                {
  +            while (isRun) {
  +                try {
                       Connection conn = null;
  -                    state="Getting Connection";
  -                    conn = ds.getConnection();
  -                    state="Using Connection";
  +                    state = "Getting Connection";
  +                    conn = getConnection();
  +                    state = "Using Connection";
                       assertTrue(null != conn);
  -                    PreparedStatement stmt = 
  +                    PreparedStatement stmt =
                           conn.prepareStatement("select * from dual");
                       assertTrue(null != stmt);
                       ResultSet rset = stmt.executeQuery();
                       assertTrue(null != rset);
                       assertTrue(rset.next());
  -                    state="Holding Connection";
  +                    state = "Holding Connection";
                       thread.sleep(connHoldTime);
  -                    state="Returning Connection";
  +                    state = "Returning Connection";
                       rset.close();
                       stmt.close();
                       conn.close();
  -                }
  -                catch (Exception e)
  -                {
  +                } catch (Exception e) {
                       throw new NestableRuntimeException(e);
                   }
               }
           }
  -        
  -        public void stop()
  -        {
  +
  +        public void stop() {
               isRun = false;
           }
   
  -        public String reportState()
  -        {
  +        public String reportState() {
               return state;
           }
       }
  +    
   }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>