<?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.4.0" date="2018-MM-DD" 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.
      </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>
