<?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>Apache 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.7.0" date="2019-MM-DD" description="This is a minor release, including bug fixes and enhancements.">
      <action dev="jleroux" type="add" issue="DBCP-539" due-to="Jacques Le Roux">
        ManagedDataSource#close() should declare used exceptions.
      </action>
      <action dev="ggregory" type="add" issue="DBCP-538" due-to="Ragnar Haugan, Gary Gregory">
        Wrong JMX base name derived in BasicDataSource#updateJmxName.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from H2 1.4.198 to 1.4.199.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-540" due-to="emopers">
        Close ObjectOutputStream before calling toByteArray() on underlying ByteArrayOutputStream #28.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-541" due-to="Allon Murienik">
        Upgrade to JUnit Jupiter #19.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-542" due-to="Zheng Feng, Gary Gregory">
        Fix tests on Java 11.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-543" due-to="Gary Gregory">
        Update Apache Commons Pool from 2.6.1 to 2.6.2.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-546" due-to="Sergey Chupov">
        Avoid NPE when calling DriverAdapterCPDS.toString().
      </action>
      <action dev="ggregory" type="update" issue="DBCP-547" due-to="leechoongyon, Gary Gregory">
        Add a ConnectionFactory class name setting for BasicDataSource.createConnectionFactory() #33.
      </action>
      <action dev="ggregory" type="update" due-to="LichKing-lee">
        Fix Javadoc link in README.md #21.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-529" due-to="Yuri">
        Add 'jmxName' property to web configuration parameters listing.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from com.h2database:h2 1.4.197 to 1.4.199.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from org.jboss.narayana.jta:narayana-jta 5.9.2.Final to 5.9.5.Final.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from org.jboss.logging:jboss-logging 3.3.2.Final to 3.4.0.Final.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from org.mockito:mockito-core 2.24.0 to 2.28.2.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from org.mockito:mockito-core 2.28.2 to 3.0.0.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-548" due-to="Gary Gregory">
        Update Apache Commons Pool from 2.6.1 to 2.7.0.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-549" due-to="Gary Gregory">
        Make org.apache.commons.dbcp2.AbandonedTrace.removeTrace(AbandonedTrace) null-safe.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-550" due-to="Gary Gregory">
        java.util.IllegalFormatException while building a message for a SQLFeatureNotSupportedException in Jdbc41Bridge.getObject(ResultSet,String,Class).
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Add missing Javadocs.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from org.mockito:mockito-core 2.28.2 to 3.0.0.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-551" due-to="Gary Gregory">
        org.apache.commons.dbcp2.DelegatingStatement.close() should try to close ALL of its result sets.
      </action>
    </release>
    <release version="2.6.0" date="2019-02-14" description="This is a minor release, including bug fixes and enhancements.">
      <action dev="chtompki" type="add" issue="DBCP-534" due-to="Peter Wicks">
        Allow for manual connection eviction.
      </action>
      <action dev="ggregory" type="add" issue="DBCP-514" due-to="Tom Jenkinson, Gary Gregory">
        Allow DBCP to register with a TransactionSynchronizationRegistry for XA cases.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-517" due-to="Gary Gregory">
        Make defensive copies of char[] passwords.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-515" due-to="Tom Jenkinson, Gary Gregory">
        Do not try to register synchronization when the transaction is no longer active.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-516" due-to="Tom Jenkinson, Gary Gregory">
        Do not double returnObject back to the pool if there is a transaction context with a shared connection.
      </action>
      <action dev="ggregory" type="fix" issue="DBCP-518" due-to="Gary Gregory">
        Allow DBCP to work with old Java 6/JDBC drivers without throwing AbstractMethodError.
      </action>
      <action dev="ggregory" type="add" issue="DBCP-519" due-to="Gary Gregory">
        Add some toString() methods for debugging (never printing passwords.)
      </action>
      <action dev="ggregory" type="update" issue="DBCP-520" due-to="Zheng Feng">
        BasicManagedDataSource needs to pass the TSR with creating DataSourceXAConnectionFactory.
      </action>
      <action dev="ggregory" type="add" issue="DBCP-527" due-to="Gary Gregory">
        Add getters to some classes.
      </action>
      <action dev="ggregory" type="add" issue="DBCP-528" due-to="Gary Gregory">
        org.apache.commons.dbcp2.DriverManagerConnectionFactory should use a char[] instead of a String to store passwords.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-537" due-to="Gary Gregory">
        Update Apache Commons Pool from 2.6.0 to 2.6.1.
      </action>
    </release>
    <release version="2.5.0" date="2018-07-15" description="This is a minor release, including bug fixes and enhancements.">
      <action dev="ggregory" type="update" issue="DBCP-505" due-to="Gary Gregory">
        Update Java requirement from version 7 to 8.
      </action>
      <action dev="ggregory" type="add" issue="DBCP-506" due-to="Gary Gregory">
        Support JDBC 4.2.
      </action>
      <action dev="ggregory" type="add" issue="DBCP-479" due-to="Guillaume Husta, Gary Gregory">
        Support default schema in configuration.
      </action>
       <action dev="ggregory" type="update" issue="DBCP-427" due-to="Vladimir Konkov, Phil Steitz, Gary Gregory">
        Examines 'SQLException's thrown by underlying connections or statements for fatal (disconnection) errors.
      </action>
       <action dev="ggregory" type="update" issue="DBCP-507" due-to="Vladimir Konkov, Phil Steitz, Gary Gregory">
        Change default for fail-fast connections from false to true.
      </action>
      <action dev="ggregory" type="fix" issue="DBCP-508" due-to="Gary Gregory">
        Prepared statement keys should take a Connection's schema into account.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-504" due-to="Bruno P. Kinoshita">
        Increase test coverage.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-510" due-to="Gary Gregory">
        Update Apache Commons Pool from 2.5.0 to 2.6.0.
      </action>
      <action dev="ggregory" type="fix" issue="DBCP-512" due-to="Gary Gregory">
        Avoid exceptions when closing a connection in mutli-threaded use case.
      </action>
    </release>
    <release version="2.4.0" date="2018-06-12" description="This is a minor release, including bug fixes and enhancements.">
      <action dev="ggregory" type="fix" issue="DBCP-484" due-to="Emanuel Freitas">
        Connection leak during XATransaction in high load.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-492" due-to="Gary Gregory">
        Drop Ant build.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-491" due-to="Zheng Feng, Gary Gregory">
        Ensure DBCP ConnectionListener can deal with transaction managers which invoke rollback in a separate thread.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-494" due-to="Gary Gregory">
        org.apache.commons.dbcp2.PStmtKey should make copies of given arrays in constructors.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-495" due-to="Gary Gregory">
        Remove duplicate code in org.apache.commons.dbcp2.cpdsadapter.PStmtKeyCPDS.
      </action>
      <action dev="ggregory" type="fix" issue="DBCP-496" due-to="Gary Gregory">
        Add support for pooling CallableStatements to the org.apache.commons.dbcp2.cpdsadapter package.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-497" due-to="Gary Gregory">
        Deprecate use of PStmtKeyCPDS in favor of PStmtKey.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-498" due-to="Gary Gregory">
        org.apache.commons.dbcp2.DataSourceConnectionFactory should use a char[] instead of a String to store passwords.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-499" due-to="Gary Gregory">
        org.apache.commons.dbcp2.managed.DataSourceXAConnectionFactory should use a char[] instead of a String to store passwords.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-500" due-to="Gary Gregory">
        org.apache.commons.dbcp2.cpdsadapter.DriverAdapterCPDS should use a char[] instead of a String to store passwords.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-501" due-to="Gary Gregory">
        org.apache.commons.dbcp2.datasources.CPDSConnectionFactory should use a char[] instead of a String to store passwords.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-502" due-to="Gary Gregory">
        org.apache.commons.dbcp2.datasources internals should use a char[] instead of a String to store passwords.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-503" due-to="Gary Gregory">
        org.apache.commons.dbcp2.datasources.InstanceKeyDataSourceFactory.closeAll() does not close all.
      </action>
    </release>
    <release version="2.3.0" date="2018-05-12" description="This is a minor release, including bug fixes and enhancements.">
      <action dev="pschumacher" type="fix" issue="DBCP-476" due-to="Gary Evesson, Richard Cordova">
        AbandonedTrace.getTrace() contains race condition.
      </action>
      <action dev="ggregory" type="fix" issue="DBCP-482" due-to="Dennis Lloyd, Gary Gregory">
        Avoid javax.management.InstanceNotFoundException on shutdown when a bean is not registered. Closes #9.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-483" due-to="Gary Gregory">
        Make constant public: org.apache.commons.dbcp2.PoolingDriver.URL_PREFIX.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-486" due-to="Gary Gregory">
        DriverAdapterCPDS.setUser(), setPassword(), and getPooledConnection() with null arguments throw NullPointerExceptions when connection properties are set.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-487" due-to="Gary Gregory">
        Add API org.apache.commons.dbcp2.datasources.PerUserPoolDataSource.clear().
      </action>
      <action dev="ggregory" type="update" issue="DBCP-488" due-to="Gary Gregory">
        NPE for org.apache.commons.dbcp2.cpdsadapter.DriverAdapterCPDS.setConnectionProperties(null).
      </action>
      <action dev="ggregory" type="update" issue="DBCP-490" due-to="Gary Gregory">
        The method org.apache.commons.dbcp2.PoolingDriver.getConnectionPool(String) does not tell you which pool name is not registered when it throws an exception.
      </action>
    </release>
    <release version="2.2.0" date="2017-12-27" description="This is a minor release, including bug fixes and enhancements.">
      <action dev="ggregory" type="fix" issue="DBCP-481" due-to="Gary Gregory">
        Update Apache Commons Pool from 2.4.2 to 2.5.0.
      </action>
      <action dev="mattsicker" type="fix" issue="DBCP-454" due-to="Philipp Marx, Matt Sicker">
        OSGi declarations contain multiple import headers for javax.transaction.
      </action>
      <action dev="ggregory" type="fix" issue="DBCP-478" due-to="nicola mele">
        Wrong parameter name in site documentation for BasicDataSource Configuration Parameters.
      </action>
      <action dev="psteitz" type="fix" issue="DBCP-452">
        Add jmxName to properties set by BasicDataSourceFactory.  This
        enables container-managed pools created from JNDI Resource
        definitions to enable JMX by supplying a valid root JMX name.
      </action>
      <action dev="ggregory" type="fix" issue="DBCP-446" due-to="Gary Gregory, feng yang, Euclides M, Phil Steitz">
        NullPointerException thrown when calling ManagedConnection.isClosed().
      </action>
      <action dev="psteitz" type="fix" issue="DBCP-444">
        InvalidateConnection can result in closed connection returned by getConnection.
      </action>
      <action dev="ggregory" type="fix" issue="DBCP-449" due-to="Grzegorz D.">
        Complete the fix for DBCP-418, enabling PoolableConnection class to load in environments
        (such as GAE) where the JMX ManagementFactory is not available.
      </action>
      <action dev="ggregory" type="add" issue="DBCP-451">
        Add constructor DriverManagerConnectionFactory(String).
      </action>
      <action dev="markt" type="fix" issue="DBCP-455" due-to="Kyohei Nakamura">
        Ensure that the cacheState setting is used when statement pooling is
        disabled.
      </action>
      <action dev="markt" type="fix" issue="DBCP-453" due-to="Philipp Marx">
        Ensure that setSoftMinEvictableIdleTimeMillis is used when working with
        BasicDataSource.
      </action>
      <action dev="markt" type="fix" issue="DBCP-456" due-to="Kyohei Nakamura">
        Correct the name of the configuration attribute
        softMinEvictableIdleTimeMillis.
      </action>
      <action dev="markt" type="fix" issue="DBCP-472">
        Avoid potential infinite loops when checking if an SQLException is fatal
        for a connection or not.
      </action>
      <action dev="markt" type="fix" issue="DBCP-468">
        Expand the fail-fast for fatal connection errors feature to include
        managed connections.
      </action>
      <action dev="markt" type="fix" issue="DBCP-463">
        Correct a typo in the method name
        PoolableConnectionFactory#setMaxOpenPreparedStatements. The old method
        remains but is deprecated so not to break clients currently using the
        incorrect name.
      </action>
       <action dev="markt" type="add" issue="DBCP-462" due-to="Keiichi Fujino">
         Refactoring to prepare for a future patch to enable pooling of all
         prepared and callable statements in PoolingConnection.
       </action>
       <action dev="markt" type="fix" issue="DBCP-459">
         Ensure that a thread's interrupt status is visible to the caller if the
         thread is interrupted during a call to
         PoolingDataSource.getConnection().
       </action>
       <action dev="markt" type="add" issue="DBCP-458" due-to="Adrian Tarau">
         Make it simpler to extend BasicDataSource to allow sub-classes to
         provide custom GenericObjectPool implementations.
       </action>
       <action dev="markt" type="fix" issue="DBCP-457">
         When using a BasicDataSource, pass changes related to the handling of
         abandoned connections to the underlying pool so that the pool
         configuration may be updated dynamically.
       </action>
       <action dev="markt" type="add" issue="DBCP-474" due-to="Keiichi Fujino">
         Enable pooling of all prepared and callable statements
         inPoolingConnection.
       </action>
    </release>
    <release version="2.1.1" date="6 Aug 2015" description=
"This is a patch release, including bug fixes only.">
      <action dev="psteitz" type="update">
        Updated pool version to 2.4.2.  The fix for POOL-300 may cause DBCP
        users to see more reports of abandoned connections (if removal and logging
        are configured).  Prior to the fix for POOL-300, the PrintWriter used to log
        abandoned connection stack traces was not being flushed on each log event.
      </action>
      <action issue="DBCP-441" dev="psteitz" type="fix">
        Added BasicDataSource abandonedUsageTracking property missing from BasicDataSourceFactory.
      </action>
      <action issue="DBCP-442" dev="psteitz" type="fix">
        SharedPoolDataSource getConnection fails when testOnBorrow is set with
        a null validation query.
      </action>
      <action issue="DBCP-438" dev="psteitz" type="fix" due-to="Raihan Kibria">
        Nested connections in a transaction (local) throws null pointer.
      </action>
      <action issue="DBCP-437" dev="psteitz" type="fix">
        BasicDataSource does not set disconnectionSql properties on its PoolableConnectionFactory.
      </action>
    </release>
    <release version="2.1" date="23 Feb 2015" description=
 "This is minor release, including bug fixes and enhancements. Note that
  one of the enhancements (DBCP-423) is to implement AutoCloseable in
  BasicDataSource, PoolingDataSource and the InstanceKeyDataSource
  implementations.
      ">
      <action issue="DBCP-420" dev="sebb" type="fix">
        InstanceKeyDataSource discards native SQLException when given password does not match
        password used to create the connection.
      </action>
      <action issue="DBCP-422" dev="ggregory" type="update">
        Update Apache Commons Logging to 1.2 from 1.1.3.
      </action>
      <action dev="markt" type="fix">
        Correct some Javadoc references to Apache Commons Pool 2 classes that
        have changed names since Pool 1.x.
      </action>
      <action dev="markt" type="fix">
        Do not ignore the configured custom eviction policy when creating a
        BasicDataSource.
      </action>
      <action dev="psteitz" type="add" issue="DBCP-426" due-to="Kasper Sørensen">
        Added invalidateConnection method to BasicDataSource.
      </action>
      <action issue="DBCP-428" dev="psteitz" type="fix" due-to="Vladimir Konkov">
        Unsuccessful Connection enlistment in XA Transaction ignored by TransactionContext.
      </action>
      <action issue="DBCP-424" dev="psteitz" type="update">
        Made expired connection logging configurable in BasicDataSource.  Setting
        logExpiredConnections to false suppresses expired connection log messages.
      </action>
      <action issue="DBCP-423" dev="psteitz" type="update">
        Made Datasources implement AutoCloseable.
      </action>
      <action issue="DBCP-427" dev="psteitz" type="add" due-to="Vladimir Konkov">
        Added fastFailValidation property to PoolableConnection, configurable in
        BasicDataSource.  When set to true, connections that have previously thrown
        fatal disconnection errors will fail validation immediately (no driver calls).
      </action>
      <action issue="DBCP-432" dev="psteitz" type="fix">
        Changed BasicDataSource createDataSource method to ensure that initialization
        completes before clients get reference to newly created instances.
      </action>
      <action issue="DBCP-433" dev="psteitz" type="fix" due-to="Vladimir Konkov">
        Fixed connection leak when SQLException is thrown while enlisting an XA
        transaction.
      </action>
      <action issue="DBCP-434" dev="psteitz" type="fix">
        Setting jmxName to null should suppress JMX registration of connection
        and statement pools.
      </action>
      <action dev="psteitz" type="update">
        Eliminated synchronization in BasicDataSource getNumActive, getNumIdle methods.
      </action>
      <action issue="DBCP-435" type="update" due-to="Denixx Baykin">
        Added property name verification to BasicDataSourceFactory. References including
        obsolete or unrecognized properties now generate log messages.
      </action>
    </release>
    <release version="2.0.1" date="24 May 2014" 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 DelegatingStatement 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
        InstanceKeyDataSource.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 user name and 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>
