<?xml version="1.0"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You 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.
-->

<!--
This file is used by the maven-changes-plugin to generate the release notes.
Useful ways of finding items to add to this file are:

1.  Add items when you fix a bug or add a feature (this makes the 
release process easy :-).

2.  Do a bugzilla search for tickets closed since the previous release.

3.  Use the report generated by the maven-changelog-plugin to see all
SVN commits.  Set the project.properties' maven.changelog.range 
property to the number of days since the last release.

To generate the release notes from this file:

mvn changes:announcement-generate -Prelease-notes [-Dchanges.version=nnn]

then tweak the formatting if necessary
and commit

The <action> type attribute can be add,update,fix,remove.
-->

<document>
  <properties>
    <title>Commons DBCP Release Notes</title>
  </properties>
    <!-- NOTE:
    The description below is specially formatted so as to improve the layout of the generated release notes:
    The parsing process removes all line feeds, replacing them with a single space.
    The Velocity template in src/changes has been enhanced to replace pairs of adjacent spaces
    with a new-line in the release notes. (These spaces are ignored when displaying HTML).
    If the output is not quite correct, check for invisible trailing spaces!

    N.B. The release notes template groups actions by type, and only extracts data for the current release.
    The changes report outputs actions in the order they appear in this file.

    To regenerate the release notes:
    mvn changes:announcement-generate -Prelease-notes [-Dchanges.version=nnn]

    Defining changes.version allows one to create the RN without first removing the SNAPSHOT suffix.
     -->

  <body>
    <release version="2.0.1" date="TBD" description="This is a bug fix release.">
      <action dev="markt" type="fix">
        Small performance improvements when returning connections to the pool.
      </action>
      <action issue="DBCP-414" dev="markt" type="fix" due-to="Pasi Eronen">
        Fixed DelegatingStatement close to ensure closed statements do not retain references
        to pooled prepared statements. Due to finalization code added in 2.0, this was causing
        pooled prepared statements to be closed by GC while in use by clients.
      </action>
      <action issue="DBCP-412" dev="psteitz" type="update">
        Added check in PoolingDataSource constructor to ensure that the connection factory
        and pool are properly linked.
      </action>
      <action issue="DBCP-417" dev="psteitz" type="fix">
        Fixed connection leak when managed connections are closed during transactions.
      </action>
      <action issue="DBCP-418" dev="psteitz" type="fix">
        Enable PoolableConnection class to load without JMX.
      </action>
    </release>
    <release version="2.0" date="3 March 2014" description=
"This release includes new features as well as bug fixes and enhancements.
 Version 2.0.x supports JDBC 4.1, so requires Java 7.
 
 The Java package name has been changed from 'org.apache.commons.dbcp' to 'org.apache.commons.dbcp2'.
 Also the Maven groupId is now 'org.apache.commons' and the artifactId is 'commons-dbcp2'
 These changes are necessary because the API is not strictly binary compatible with the 1.x releases.
 To convert from the earlier releases, update the package name in imports, update the dependencies and recompile.
 There may be a few other changes to be made.

 Applications running under Java 7 should use DBCP 2.0.x.
 Java 6 users should use DBCP 1.4.x which supports JDBC 4.
 Java 1.4 and Java 5 users should use DBCP 1.3.x which supports JDBC 3.
      ">
      <action issue="DBCP-411" dev="sebb" type="fix">
        BasicManagedDataSource - unregister from JMX on close().
      </action>
        <action issue="DBCP-154" dev="markt" type="fix">
        Log validation failures of poolable connections.
      </action>
      <action issue="DBCP-403" dev="sebb" type="fix">
        DelegatingStatement.close() fails with NPE if statement is null
      </action>
      <action issue="DBCP-322" dev="sebb" type="fix">
        CPDSConnectionFactory.validateObject(Object) ignores Throwable.
      </action>
      <action dev="markt" type="add">
        Provide a new option (cacheState) to cache current values of autoCommit
        and readOnly so database queries are not required for every call to the
        associated getters. This option is enabled by default.
      </action>
      <action dev="markt" issue="DBCP-300" type="fix">
        Removed unnecessary synchronisation in BasicDataSource#createDataSource.
      </action>
      <action dev="markt" type="update">
        The Java package name has been changed from org.apache.commons.dbcp to
        org.apache.commons.dbcp2.
      </action>
      <action dev="markt" type="update">
        Update to Commons Pool 2 (based on java.util.concurrent) to provide
        pooling functionality.
      </action>
      <action dev="markt" type="update">
        Updated source code for Java 1.6 (added @Override &amp; @Deprecated
        annotations).
      </action>
      <action dev="markt" type="update">
        Removed JOCL support.
      </action>
      <action dev="markt" issue="DBCP-143" type="update">
        Remove deprecated SQLNestedException. 
      </action>
      <action dev="markt" issue="DBCP-384" type="fix">
        Fix threading issues with accessToUnderlyingConnectionAllowed attribute
        of PoolingDriver which is used to support unit testing.
      </action>
      <action dev="markt" issue="DBCP-292" type="add">
        BasicDataSource instances are now exposed via JMX. All the configuration
        properties are available as is the connection pool and the statement
        pools (if statement pooling is enabled).
      </action>
      <action dev="markt" issue="DBCP-376" type="fix" due-to="Dave Oxley">
        Fix thread safety issues in the SharedPoolDataSource and the
        PerUserPoolDataSource. 
      </action>
      <action dev="markt" issue="DBCP-382" type="fix" due-to="Stefan Rempfer">
        Allow accessToUnderlyingConnectionAllowed to be configured when
        configuration takes place via JNDI in a JavaEE container.
      </action>
      <action dev="markt" issue="DBCP-369" type="fix" due-to="Michael Pradel">
        Fix threading issue when using multiple instances of the
        SharedPoolDataSource concurrently.
      </action>
      <action dev="markt" issue="DBCP-391" type="fix">
        Ensure that the close state of a pooled connection and the underlying
        connection is consistent when the underlying connection is closed as a
        result of an error condition.
      </action>
      <action dev="markt" issue="DBCP-404" type="fix">
        Make all mutable fields private.
      </action>
      <action dev="markt" issue="DBCP-364" type="fix">
        Return BasicDataSource rather than DataSource from
        BasicDataSourceFactory so a cast is not required to use BasicDataSource
        specific methods.
      </action>
      <action dev="markt" issue="DBCP-358" type="fix">
        The equals() implementations of the DelegatingXxx classes are now
        symmetric. There are some important API changes underlying this fix.
        Firstly, two DelegatingXxx instances are no longer considered equal if
        they have the same innermost delegate. Secondly, a DelegatingXxx
        instance is not considered equal to its innermost delegate. The
        getInnermostDelegateInternal() method has been made public (but remains
        part of the internal API) to allow classes extending this implementation
        to access the innermost delegate when required.
      </action>
      <action dev="markt" issue="DBCP-368" type="add">
        Expose the new Pool 2 property evictionPolicyClassName to enable more
        sophisticated eviction strategies to be used.
      </action>
      <action dev="markt" issue="DBCP-406" type="add" due-to="Steeve Beroard">
        Add support for pooling PreparedStatements that use auto-generated keys.
      </action>
      <action dev="markt" issue="DBCP-180" type="fix">
        Enable JDBC resources that are no longer referenced by client code to be
        eligible for garbage collection.
      </action>
      <action dev="markt" issue="DBCP-177" type="add">
        Enable DBCP to work with a SecurityManager such that only DBCP needs to
        be granted the necessary permissions to communicate with the database.
      </action>
      <action dev="markt" issue="DBCP-410" type="fix" due-to="Andreas Sturmlechner">
        Correct path to Javadoc overview in build.xml.
      </action>
      <action dev="markt" issue="DBCP-234" type="fix">
        The default values for readOnly, autoCommit and transactionIsolation are
        now taken from the JDBC driver. No calls to setReadOnly(),
        setAutoCommit() or setTransactionIsolation() will be made for a newly
        borrowed connection unless a default is explicitly configured and the
        connection is currently using a different setting. 
      </action>
      <action dev="markt" issue="DBCP-219" type="add">
        Register pooled connections with JMX so that they may be forcibly closed
        via JMX if required.
      </action>
      <action dev="markt" issue="DBCP-373" type="add">
        Modify SharedPoolDataSource and PerUserPoolDataSource to expose all of
        the configuration properties of the underlying connection pool(s). This
        represents a significant refactoring of these classes and a number of
        property names have changed as a result. 
      </action>
      <action dev="markt" issue="DBCP-351" type="add">
        Provide an option to control if autoCommit is always set to true when a
        connection is returned to the connection pool.
      </action>
      <action dev="markt" issue="DBCP-399" type="add">
        Provide an option to control if rollback is called when a connection is
        returned to the poll with autoCommit disabled.
      </action>
      <action dev="markt" issue="DBCP-340" type="add">
        Provide an option to set the default query timeout.
      </action>
      <action dev="markt" type="fix">
        Connection.isValid() should not throw an SQLException if the connection
        is closed.
      </action>
      <action dev="markt" issue="DBCP-357" type="fix">
        Use Connection.isValid() to validate connections unless a validation
        query is explicitly configured. Note that this means it is no longer
        necessary for a validation query to be specified in order for validation
        to take place. When testing with Oracle, this resulted in database
        validation being approximately 7 times faster.
      </action>
      <action dev="markt" issue="DBCP-249" type="add">
        Add support for validation testing database connections on creation.
      </action>
    </release>
    <release version="1.5.1" date="not yet released" description="TBD">
      <action dev="markt" issue="DBCP-400" type="fix">
        Correct the documentation for the maxOpenPreparedStatements parameter
        and review the use of the phrase non-positive throughout the
        documentation and javadoc, replacing it with negative where that is the
        correct definition to use.
      </action>
      <action dev="markt" issue="DBCP-405" type="fix">
        Avoid multiple calls to Connection.getAutoCommit() in
        PoolableConnectionFactory.passivateObject() as it could be an expensive
        call.
      </action>
      <action dev="markt" issue="DBCP-392" type="fix">
        Use one line per statement for methods with multiple statements rather
        than using a single line.
      </action>
      <action dev="markt" issue="DBCP-396" type="fix">
        Expose all of the AbandonedConfig properties through a BasicDataSource.
      </action>
      <action dev="markt" issue="DBCP-380" type="fix" due-to="Balazs Zsoldos">
        Correct implementation of DelegatingConnection.isWrapperFor() so it
        works correctly with older JDBC drivers.
      </action>
      <action dev="markt" issue="DBCP-347" type="fix" due-to="Robert Poskrobek">
        Correct implementation of DelegatingStatement.isWrapperFor(). Also fix
        DelegatingDatabaseMetaData.isWrapperFor() and
        DelegatingResultSet.isWrapperFor() that had the same problem.
      </action>
      <action dev="markt" issue="DBCP-341" type="fix" due-to="Ioannis Canellos">
        LocalXAConnectionFactory does not properly check if Xid is equal to
        currentXid when resuming which may result in an XAException.
      </action>
      <action dev="markt" issue="DBCP-355" type="fix" due-to="Florent Guillaume">
        Ensure that the XAConnection is closed when the associated Connection is
        closed.
      </action>
      <action dev="markt" issue="DBCP-398" type="fix">
        Clarify Jaavdoc for isClosed() method of PoolableConnection.
      </action>
      <action dev="markt" issue="DBCP-383" type="fix">
        Avoid NullPointerException and throw an XAException if an attempt is
        made to commit the current transaction for a connection when no
        transaction has been started.
      </action>
      <action dev="markt" issue="DBCP-372" type="fix">
        Using batchUpdate() should not invalidate the PreparedStatement when it
        is returned to the pool.
      </action>
      <action dev="markt" issue="DBCP-309" type="fix">
        Improve documentation for JNDI example using BasicDataSource. 
      </action>
    </release>
    <release version="1.4.1" date="not yet released" description="TBD">
      <action dev="psteitz" issue="DBCP-334" type="update" due-to="Alberto Mozzone">
        Exposed GenericObjectPool's softMinEvictableIdleTimeMillis property for
        configuration and use by BasicDataSource.
      </action>
      <action dev="psteitz" issue="DBCP-337" type="fix" due-to="Rob Gansevles">
        Made equals reflexive in DelegatingStatement (and subclasses), DelegatingMetaData,
        DelegatingResultSet and PoolingDriver#PoolGuardConnectionWrapper.
      </action>
      <action dev="psteitz" issue="DBCP-342" type="fix" due-to="Byungchol Kim">
        Modified createDataSource method in BasicDataSource to ensure that GenericObjectPool
        Evictor tasks are not started and orphaned when BasicDataSource encounters errors on
        initialization.  Prior to this fix, when minIdle and timeBetweenEvictionRunsMillis
        are both positive, Evictors orphaned by failed initialization can continue to
        generate database connection requests.  This issue is duplicated by DBCP-339
        and DBCP-93.
      </action>
      <action dev="psteitz" issue="DBCP-330" type="fix">
        Changed DelegatingDatabaseMetaData to no longer add itself to the AbandonedTrace
        of its parent connection.  This was causing excessive memory consumption and was
        not necessary, as resultsets created by DelegatingDatabaseMetaData instances are
        attached to the parent connection's trace on creation.  Also fixes DBCP-352.
      </action>
      <action dev="psteitz" issue="DBCP-343" type="fix">
        Modified execute methods of Statement objects to ensure that whenever
        a statement is used, the lastUsed property of its parent connection is
        updated.
      </action>
      <action dev="markt" issue="DBCP-333" type="fix">
        Correctly implemented the option to configure the class loader used to load
        the JDBC driver.
      </action>
      <action dev="psteitz" issue="DBCP-346" type="update" due-to="Ken Tatsushita">
        LIFO configuration option has been added to BasicDataSource.  When set
        to true (the default), the pool acts as a LIFO queue; setting to false
        causes connections to enter and exit to pool in FIFO order.
      </action>
      <action dev="psteitz" issue="DBCP-344" type="fix" due-to="Jeremy Whiting">
        Test transitive dependencies brought in by geronimo-transaction created
        version conflicts (commons logging and junit).  These have been explicitly
        excluded in the POM.
      </action>
      <action dev="psteitz" issue="DBCP-348" type="fix" due-to="Eiji Takahashi">
        BasicDataSourceFactory incorrectly used "initConnectSqls" in versions
        1.3 and 1.4 of DBCP as the property name for connectionInitSqls.
        Online docs for 1.3/1/4 have been updated to reflect this inconsistency.
        The BasicDataSourceFactory property name has been changed to "connectInitSqls"
        to match the online docs and the BasicDataSource property name.
      </action>
    </release>
    <release version="1.4" date="2010-02-14" description="This release includes
     new features as well as bug fixes and enhancements.  Some bug fixes
     change semantics (e.g. connection close is now idempotent).  The 1.3
     and 1.4 releases of DBCP are built from the same sources.  Version 1.4 
     supports JDBC 4, so requires JDK 1.6. Applications running under
     JDK 1.4-1.5 must use DBCP 1.3. Applications running under JDK 1.6
     should use DBCP 1.4. Other than support for the added methods in JDBC 4,
     there is nothing new or different in DBCP 1.4 vs. DBCP 1.3.   The list of
     changes below since 1.2.2 applies to both the 1.3 and 1.4 release.  Other than
     the one issue related to adding JDBC 4 support (DBCP-191), all bug fixes
     or new features are included in both DBCP 1.3 and 1.4 ">
      <action dev="psteitz" type="fix" issue="DBCP-320">
        Eliminated poolKeys cache from PerUserPoolDataSource.
      </action>
      <action dev="sebb" type="fix" issue="DBCP-321">
        Eliminated userKeys LRUMap cache from SharedPoolDataSource.
      </action>
      <action dev="psteitz" type="fix" issue="DBCP-319" due-to="Sebastian Bazley">
        Made private fields final where possible.
      </action>
      <action dev="sebb" type="fix" issue="DBCP-318" due-to="Sebastian Bazley">
        PerUserPoolDataSource.getPooledConnectionAndInfo multi-threading bug.
      </action>
      <action dev="sebb" type="fix" issue="DBCP-315" due-to="Sebastian Bazley">
        Remove throws clause from method that does not throw an exception.
      </action>
      <action dev="sebb" type="fix" issue="DBCP-313" due-to="Sebastian Bazley">
        Remove code that catches and ignores Exceptions when calling
        PooledConnection.removeConnectionEventListener(ConnectionEventListener)
        as the method does not throw any Exceptions.
      </action>
      <action dev="sebb" type="fix" issue="DBCP-316" due-to="Sebastian Bazley">
        Remove impossible null check.
      </action>
      <action dev="sebb" type="update" issue="DBCP-314" due-to="Sebastian Bazley">
        Renamed variables with duplicate names in different scopes.
      </action>
      <action dev="psteitz" type="update" issue="DBCP-312" due-to="Glen Mazza">
        Clarified javadoc for BasicDataSource close() method.
      </action>
      <action dev="psteitz" type="add" issue="DBCP-204" due-to="Wei Chen">
        Made PoolingConnection pool CallableStatements. When BasicDataSource's 
        poolPreparedStatements property is true, CallableStatements are now
        pooled along with PreparedStatements. The maxOpenPreparedStatements
        property limits the combined number of Callable and Prepared statements
        that can be in use at a given time.
      </action>
      <action dev="markt" type="update" issue="DBCP-305" due-to="Christopher Schultz">
        Use an API specific exception for logging abandoned objects to make
        scanning the logs for these exceptions simpler and to provide a better
        message that includes the creation time of the abandoned object.
      </action>
      <action dev="markt" type="fix" issue="DBCP-303" due-to="Dave Oxley">
        Ensure Statement.getGeneratedKeys() works correctly with the CPDS
        adapter.
      </action>
      <action dev="psteitz" type="fix" issue="DBCP-302" due-to="Sebastian Bazley">
        Removed incorrectly advertised ClassNotFoundException from
        JOCLContentHandler.ConstructorDetails.createObject().
      </action>
      <action dev="markt" type="update" issue="DBCP-203" due-to="Mark Grand">
        Make the class loader used to load the JDBC driver configurable for the
        BasicDatasource.
      </action>
      <action dev="markt" type="fix" issue="DBCP-8">
        Handle user password changes for InstanceKeyDataSources.
      </action>
      <action dev="psteitz" type="update" issue="DBCP-289" due-to="Marc Kannegießer">
        Made XADataSource configurable in BasicManagedDataSource.
      </action>
      <action dev="psteitz" type="fix" issue="DBCP-294" due-to="Philippe Mouawad">
        Added PoolableManagedConnection and PoolableManagedConnectionFactory so that
        pooled managed connections can unregister themselves from transaction registries,
        avoiding resource leaks.
      </action>
      <action dev="psteitz" type="update" issue="DBCP-276">
        Added connectionProperties property to DriverAdapterCPDS.
      </action>
      <action dev="psteitz" type="add" issue="DBCP-226">
        Added a validationQueryTimeout configuration parameter to BasicDataSource
        allowing the user to specify a timeout value (in seconds) for connection
        validation queries. 
      </action>
      <action dev="psteitz" type="add" issue="DBCP-175" due-to="Jiri Melichna and Jerome Lacoste">
        Added a connectionInitSqls configuration parameter to BasicDataSource
        allowing the user to specify a collection of SQL statements to execute
        one time when a physical database connection is first opened.
      </action>
      <action dev="markt" type="fix" issue="DBCP-212">
        PoolableConnectionFactory.makeObject() is no longer synchronized. This
        provides improved response times when load spikes at the cost of a
        faster rise in database server load. This change was made as a partial
        fix for DBCP-212.  The synchronization changes in Commons Pool 1.5 complete
        the fix for this issue.
      </action>
      <action dev="psteitz" type="fix" issue="DBCP-242">
        Reverted DelegatingConnection close to 1.2.2 version to ensure
        open statements are closed before the underlying connection is closed.
      </action>
      <action dev="markt" type="fix" issue="DBCP-235">
        Refactor DelegatingConnection and ManagedConnection enable overridden
        equals() and hashcode() to work correctly.
      </action>
      <action dev="markt" type="update" issue="DBCP-265">
        Add a DelegatingDatabaseMetaData to track ResultSets returned from
        DatabaseMetaData objects.
      </action>
      <action dev="markt" type="fix" issue="DBCP-215">
        Modified BasicDataSourceFactory to complete initialization of the pool
        by creating initialSize connections rather than leaving this to lazy
        initialization when the pool is used.
      </action>
      <action dev="markt" type="fix" issue="DBCP-253">
        Eliminated masked _stmt field in descendents of DelegatingStatement.
       </action>
      <action dev="markt" type="fix" issue="DBCP-191" due-to="Michael Heuer and J. David Beutel" >
        Modified DBCP sources to support compilation under JDK 1.4-1.6
        using Ant flags to do conditional compilation.
      </action>
      <action dev="markt" type="fix" issue="DBCP-272">
        Added a static initializer to BasicDatasource that calls
        DriverManager.getDrivers() to force initialization before we ever do
        anything that might use Class.forName() to load (and register) a JDBC
        driver.
      </action>
      <action dev="markt" type="fix" issue="DBCP-4">
        Eliminated direct System.out calls in AbandonedTrace.
      </action>
      <action dev="niallp" type="fix" issue="DBCP-264">
        Modified DelegatingStatment close to clear open batches.
      </action>
      <action dev="psteitz" type="fix" issue="DBCP-255">
        Eliminated unused private "parent" field in AbandonedTrace.
      </action>
      <action dev="psteitz" type="fix" issue="DBCP-273" due-to="Mark Lin">
        Fixed errors handling boolean-valued Reference properties in 
        InstanceKeyObjectFactory, DriverAdapterCPDS that were causing 
        testOnBorrow and poolPreparedStatements properties to be incorrectly
        set when creating objects from javax.naming.Reference instances.
      </action>
      <action dev="psteitz" type="fix" issue="DBCP-271" due-to="Sebastian Bazley">
        Made private instance fields of AbandonedTrace volatile (parent,
        createdBy, lastUsed, createdTime) or final (trace).
      </action>
      <action dev="psteitz" type="fix" issue="DBCP-270" due-to="Filip Hanik">
        Narrowed synchronization in AbandonedTrace to resolve an Evictor deadlock.
      </action>
      <action dev="bayard" type="fix" issue="DBCP-218">
        Corrected Javadoc to state that getLoginTimeout and setLoginTimeout are
        NOT supported by BasicDataSource.
      </action>
      <action dev="bayard" type="update" issue="DBCP-211">
        Added Maven 2 pom.xml. Removed a block of code from TestJOCLed that set
        the Xerces parser manually. This was to support early JDKs. The 1.3
        version of DBCP requires JDK 1.4+.
      </action>
      <action dev="psteitz" type="add" issue="DBCP-228" due-to="Dain Sundstrom">
        Added support for pooling managed connections.
      </action>
      <action dev="psteitz" type="add" issue="DBCP-230" due-to="Dain Sundstrom">
        Added BasicManagedDataSource, extending BasicDataSource.
        Also improved extensibility of BasicDataSource by encapsulating
        methods to create object pool, connection factory and datasource
        instance previously embedded in createDataSource.
      </action>
      <action dev="psteitz" type="update" issue="DBCP-233" due-to="Dain Sundstrom">
        Changed behavior to allow Connection, Statement, PreparedStatement,
        CallableStatement and ResultSet to be closed multiple times. The first
        time close is called the resource is closed and any subsequent calls
        have no effect. This behavior is required as per the JavaDocs for these
        classes. Also added tests for closing all types multiple times and
        updated any tests that incorrectly assert that a resource can not be
        closed more then once.  Fixes DBCP-3, DBCP-5, DBCP-23 and DBCP-134.
      </action>
      <action dev="psteitz" type="update" issue="DBCP-11" due-to="Dain Sundstrom">
        Modified PoolingDataSource, PoolingDriver and DelegatingStatement to
        assure that all returned Statements, PreparedStatements, 
        CallableStatements and ResultSets are wrapped with a delegating object,
        which already properly handle the back pointers for Connection and
        Statement.  Also added tests to to assure that the *same* object used 
        to create the statement or result set is returned  from either 
        getConnection() or getStatement().
      </action>
      <action dev="dain" type="update" issue="DBCP-143">
        SQLNestedException has been deprecated and will be replaced in DBCP 2.0 with
        SQLException and standard Java exception chaining.
      </action>
      <action dev="dain" type="fix" issue="DBCP-221">
        BasicDataSource.close() now permanently marks the data source as closed,
        and no new connections can be obtained from the data source. At close all
        idle connections are destroyed and the method returns.  As the remaining
        active connections are closed, they are destroyed.
      </action>
      <action dev="psteitz" type="fix" issue="DBCP-241">
        Eliminated potential sources of NullPointerExceptions in 
        PoolingConnection.
      </action>
      <action dev="psteitz" type="fix" issue="DBCP-216" due-to="Marcos Sanz">
        Improved error recovery and listener cleanup in 
        KeyedCPDSConnectionFactory. Substituted calls to destroyObject with
         _pool.invalidateObject on error to ensure pool active count is
        decremented on error events. Ensured that events from closed or invalid
        connections are ignored and listeners are cleaned up. 
      </action>
      <action dev="psteitz" type="fix" issue="DBCP-245" due-to="Michael Drechsel">
        Fixed error in SharedPoolDataSource causing incorrect passwords to be 
        stored under certain conditions.
      </action> 
      <action dev="psteitz" type="fix" issue="DBCP-237" due-to="Oliver Matz">
        Added exception handler to ensure that PooledConnections are not
        orphaned when an exception occurs in setUpDefaults or clearWarnings in 
        IntanceKeyDataSource.getConnection.
      </action> 
      <action dev="psteitz" type="fix" issue="DBCP-252" due-to="FindBugs">
        Made getPool synchronized in PoolableConnectionFactory.
        Fixes inconsistent synchronization accessing _pool.
      </action> 
      <action dev="psteitz" type="fix" issue="DBCP-252" due-to="FindBugs">
        Fixed inconsistent synchronization on _rollbackAfterValidation,
        _validationQuery and _pool in CPDSConnectionFactory and 
        KeyedCPDSConnectionFactory by making the first two volatile and making
        both getter and setter for _pool synchronized.
      </action> 
    </release>
    <release version="1.3" date="2010-02-14" description="Compatability release for JDBC 3.
      See version 1.4 description and change log.">
     <action type="update">
        See &lt;a href="changes-report.html#a1.4"&gt;DBCP 1.4 Changes &lt;/a&gt; for details. Version
        1.3 is identical to 1.4, other than JDBC 4 methods being filtered out of the DBCP 1.3 sources. Changes
        Since 1.2.2 are the same for 1.3 and 1.4.
      </action>
    </release>
    <release version="1.2.2" date="2007-04-04"
      description="This is a maintenance release containing bug fixes
      and enhancements. All API changes are binary compatible with version 1.2.1.">
      <action dev="dirkv " type="add">
        Add a &lt;i&gt;JNDI How To&lt;/i&gt; to the User Guide.
      </action>
      <action dev="dirkv " type="fix" issue="DBCP-108" due-to="Maxwell Grender-Jones">
        DriverManagerConnectionFactory: blank username/password handling.
      </action>
      <action dev="dirkv " type="fix" issue="DBCP-113" due-to="Rohan Lenard">
        Broken behaviour for BasicDataSource.setMaxActive(0).
      </action>
      <action dev="dirkv " type="fix" issue="DBCP-36" due-to="Jonathan Whitall">
        BasicDataSource does not work with getConnection(String, String).
      </action>
      <action dev="dirkv " type="update" issue="DBCP-164" due-to="Todd Carmichael">
        Enhancements to prepared statement in DriverAdapterCPDS.
      </action>
      <action dev="yoavs" type="update" issue="DBCP-186" due-to="Ralf Hauser">
        Better messages and docs for LoginTimeout UnsupportedOperationException.
      </action>
      <action dev="yoavs" type="fix" issue="DBCP-50" due-to="Nicky Nicolson">
        Error in JOCL snippet in org.apache.commons.dbcp package javadoc.
      </action>
      <action dev="yoavs" type="update" issue="DBCP-165" due-to="QM">
        Added toString() methods to DelegatingPreparedStatement and DelegatingStatement
      </action>
      <action dev="yoavs" type="fix">
        Changes to make DBCP compile on JDK 1.5 by adding source="1.4" to compiler
        arguments (there are compiler errors in JDK 5.0 without this source switch
        that cannot be fixed without JDK 5.0-specific syntax).
      </action>
      <action dev="dirkv " type="fix" issue="DBCP-20" due-to="Chris Nappin">
        Per-user pooling with Oracle driver and default isolation settings.
      </action>
      <action dev="dirkv " type="fix" issue="DBCP-9" due-to="Adrian Baker">
        Error in JOCL document in javadoc.
      </action>
      <action dev="sullis" type="update">
        Added toString() method to DelegatingConnection.
      </action>
      <action dev="dirkv " type="update" issue="DBCP-181" due-to="Meikel Bisping">
        Add DriverManager.invalidateConnection().
      </action>
      <action dev="dirkv " type="fix" issue="DBCP-184" due-to="Meikel Bisping">
        Improved Exception nesting in ConnectionPool.
      </action>
      <action dev="dennisl" type="fix" issue="DBCP-144" due-to="Sebb">
        Fix broken website links for examples.
      </action>
      <action dev="psteitz" type="fix" issue="DBCP-28" 
        due-to="Huw Lewis, James Ring">
        Modified PoolableConnection close method to invalidate instance
        when invoked on an already closed connection.
      </action>
      <action dev="joehni" type="fix" issue="DBCP-81">
        Inserted null checks to avoid NPE in close operations.
      </action>
      <action dev="psteitz" type="fix" issue="DBCP-105" 
        due-to="Sandy McArthur, Thomas Fischer">
        Changed getReference method in InstanceKeyDataSource to return a
        concrete factory and added implementations of getReference in concrete
        subclasses.
      </action>
      <action dev="psteitz" type="fix" issue="DBCP-39" due-to="Jindrich Vimr">
        Inserted null check in close method of SharedPoolDataSource to avoid
        NPE when invoked on non-initialized pool.
      </action>
      <action dev="psteitz" type="fix" issue="DBCP-71" due-to="Douglas Squirrel">
        Document fact that true values for testOnBorrow, testOnReturn, testWhileIdle
        only have effect when validationQuery is set to a non-null string.
      </action>
      <action dev="psteitz" type="fix" issue="DBCP-102">
        Modified activateObject in PoolableConnection to test connection
        properties before resetting to defaults.
      </action>
      <action dev="sandymac" type="fix" issue="DBCP-188">
        Corrected maxActive documentation in configuration.html.
      </action>
      <action dev="psteitz"  type="update">
        Upgraded dependency to Pool 1.3.
      </action>
      <action dev="psteitz" type="update" issue="DBCP-187" due-to="Ralf Hauser">
        Added connection info to SQLException messages when closed connections
        (resp stmts) are accessed in DelegatingConnection, DelegatingStatement.
      </action>
      <action dev="psteitz" type="fix" issue="DBCP-41" due-to="Anton Tagunov">
        Fixed errors in pool parameter documentation and made
        0 value for _maxPreparedStatements in DriverAdapterCPDS behave
        like a negative value, to be consistent with documentation
        and pool behavior.
      </action>
      <action dev="psteitz" type="fix" issue="DBCP-100">
        Made userKeys an instance variable (i.e., not static)
        in SharedPoolDataSource.
      </action>
      <action dev="psteitz" type="fix" issue="DBCP-198">
        Changed implementation of equals in 
        PoolingDataSource.PoolGuardConnectionWrapper
        to ensure it is reflexive, even when wrapped connections are not
        DelegatingConnections.
      </action>
      <action dev="psteitz" type="update" issue="DBCP-116" due-to="Thomas Fischer">
        Added rollbackAfterValidation property and code to issue a rollback on a
        connection after validation when this property is set to true to eliminate
        Oracle driver exceptions. Default property value is false.
      </action>
      <action dev="psteitz" type="update" issue="DBCP-68">
        Removed dependency on Commons Collections by adding collections
        2.1 sources for LRUMap and SequencedHashMap with package scope to 
        datasources package.
      </action>
      <action dev="psteitz" type="fix" issue="DBCP-65">
        Removed synchronization from prepareStatement methods in
        PoolingConnection. Synchronization in these methods was causing
        deadlocks. No resources other than the prepared statement pool are
        accessed by these methods, and the pool methods are synchronized. 
        Also fixes DBCP-202.
      </action>
    </release>   

    <release version="1.2.1" date="2004-06-12" description="Maintenance Release to restore JDK 1.3 compatibility">
      <action type="fix">
        See &lt;a href="release-notes-1.2.1.html"&gt;DBCP 1.2.1 Release Notes&lt;/a&gt; for details.
      </action>
    </release>   

    <release version="1.2" date="2004-06-07">
      <action type="update">
        See &lt;a href="release-notes-1.2.html"&gt;DBCP 1.2 Release Notes&lt;/a&gt; for details.
      </action>
    </release>   

    <release version="1.1" date="2003-10-20">
      <action type="update">
        See &lt;a href="release-notes-1.1.html"&gt;DBCP 1.1 Release Notes&lt;/a&gt; for details.
      </action>
    </release>   
 
   <release version="1.0" date="2002-08-12" description="Initial Release">
      <action type="add">
        Initial Release
      </action>
    </release>   

  </body>
</document>
