<?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 xmlns="http://maven.apache.org/changes/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 http://maven.apache.org/xsd/changes-1.0.0.xsd">
  <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.
    EvictionTimer
     -->
  <body>
    <release version="2.10.0" date="2023-08-28" description="This is a minor release, including bug fixes and enhancements.">
      <!-- FIX -->
      <action dev="ggregory" type="fix" due-to="newnewcoder, Gary Gregory">
        Fix StackOverflowError in PoolableConnection.isDisconnectionSqlException #123.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        PerUserPoolDataSourceFactory.getNewInstance(Reference) parsed defaultMaxWaitMillis as an int instead of a long.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Reimplement time tracking in AbandonedTrace with an Instant instead of a long.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Migrate away from deprecated APIs in Apache Commons Pool.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Fix possible NullPointerException in BasicDataSourceFactory.validatePropertyNames().
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Fix possible NullPointerException in BasicDataSourceFactory.getObjectInstance().
      </action>
      <action dev="ggregory" type="fix" due-to="Kurtcebe Eroglu, Gary Gregory, Phil Steitz" issue="DBCP-585">
        Connection level JMX queries result in concurrent access to connection objects, causing errors #179.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        UserPassKey should be Serializable.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        LifetimeExceededException should extend SQLException.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Replace Exception with SQLException in some method signatures (preserves binary compatibility, not source).
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Don't leak Connections when PoolableConnectionFactory.makeObject() fails to create a JMX ObjectName.
      </action>
      <action dev="ggregory" type="fix" due-to="SpotBugs, Gary Gregory">
        Performance: No need for map lookups if we traverse map entries instead of keys.
      </action>
      <action dev="ggregory" type="fix" due-to="SpotBugs, Gary Gregory">
        Performance: Refactor to use a static inner class in DataSourceXAConnectionFactory.
      </action>
      <action dev="ggregory" type="fix" due-to="SpotBugs, Gary Gregory">
        Reuse pattern of throwing XAException instead of NullPointerException in LocalXAConnectionFactory.LocalXAResource.
      </action>
      <action dev="ggregory" type="fix" due-to="SpotBugs, Gary Gregory">
        SpotBugs: An overridable method is called from constructors in PoolableCallableStatement.
      </action>
      <action dev="ggregory" type="fix" due-to="SpotBugs, Gary Gregory">
        SpotBugs: An overridable method is called from constructors in PoolablePreparedStatement.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Wrong property name logged in ConnectionFactoryFactory.createConnectionFactory(BasicDataSource, Driver).
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Throw SQLException instead of NullPointerException when the connection is already closed.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        CPDSConnectionFactory.makeObject() does not need to wrap and rethrow SQLException.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        PoolingDataSource.close() now always throws SQLException.
      </action>
      <action dev="ggregory" type="fix" due-to="step-security-bot, Gary Gregory">
        [StepSecurity] ci: Harden GitHub Actions #282.
      </action>
      <action dev="ggregory" type="fix" due-to="Martin Wiesner">
        Fixes typos, missing or misplaced characters, and grammar issues #299.
      </action>
      <!-- ADD -->
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and use AbandonedTrace#setLastUsed(Instant).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        - Add and use Duration versions of now deprecated APIs that use ints and longs. 
        - Internally track durations with Duration objects instead of ints and longs.
        - See the JApiCmp report for the complete list.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add PMD check to default Maven goal.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add Utils.getDisconnectionSqlCodes() and Utils.DISCONNECTION_SQL_CODES.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Make BasicDataSource.getConnectionPool() public.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add github/codeql-action.
      </action>
      <!-- UPDATE -->
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump actions/cache from 2.1.6 to 3.0.8 #147, #176.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump actions/checkout from 2.3.4 to 3.0.2 #139, #143, #173.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
        Bump actions/setup-java from 2 to 3.6.0 #229.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump actions/upload-artifact from 3.1.0 to 3.1.1 #231.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump checkstyle from 8.44 to 9.3 #121, #130, #149, #158, #190.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump maven-checkstyle-plugin from 3.1.2 to 3.2.0 #210.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
        Bump commons-pool2 2.10.0 to 2.11.1.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump junit-jupiter from 5.8.0-M1 to 5.9.1 #125, #136, #157, #203, #218.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump spotbugs-maven-plugin from 4.3.0 to 4.7.3.0 #140, #154, #161, #178, #192, #200, #204, #213, #234.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump spotbugs from 4.3.0 to 4.7.3 #124, #133, #151, #164, #177, #189, #214, #230.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
        Bump org.mockito:mockito-core from 3.11.2 to 4.11.0, #128, #138, #152, #175, #188. #193, #208, #215, #232, #235, #246, #252.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump maven-javadoc-plugin from 3.3.0 to 3.4.1 #131, #184.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump maven-pmd-plugin from 3.14.0 to 3.19.0 #132, #172, #195.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump pmd from 6.44.0 to 6.52.0.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump narayana-jta from 5.12.0.Final to 5.12.7.Final #134, #156, #163, #185, #197.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump japicmp-maven-plugin from 0.15.3 to 0.17.1 #137, #166, #174, #211, #238.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
        Bump h2 from 1.4.200 to 2.2.220 #153, #183, #196, #287.
        Update SQL for migration from H2 1.4.200 to 2.0.204 where "KEY" and "VALUE" are now reserved keywords.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump jboss-logging from 3.4.2.Final to 3.4.3.Final #162.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump slf4j-simple from 1.7.30 to 1.7.36 #169.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump commons-parent from 52 to 60 #180, #219, #254, #278.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump JaCoCo from 0.8.7 to 0.8.8.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump maven-surefire-plugin 2.22.2 to 3.0.0-M7.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump apache-rat-plugin 0.13 to 0.14.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump commons-lang3 from 3.12 to 3.13.0.
      </action>
    </release>
    <release version="2.9.0" date="2021-07-30" description="This is a minor release, including bug fixes and enhancements.">
      <!-- ADD -->
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and reuse Constants.KEY_USER and Constants.KEY_PASSWORD.
      </action>
      <action dev="ggregory" type="add" due-to="Frank Gasdorf, Gary Gregory">
        Add and reuse DataSourceMXBean.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and reuse DriverAdapterCPDS.{get|set}DurationBetweenEvictionRuns(), deprecate {get|set}TimeBetweenEvictionRunsMillis(long).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and reuse DriverAdapterCPDS.{get|set}MinEvictableIdleDuration(), deprecate {get|set}MinEvictableIdleTimeMillis(int).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and reuse CPDSConnectionFactory.setMaxConnLifetime(Duration), deprecate setMaxConnLifetimeMillis(long).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and reuse KeyedCPDSConnectionFactory.setMaxConnLifetime(Duration), deprecate setMaxConnLifetimeMillis(long).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and reuse KeyedCPDSConnectionFactory.setMaxConnLifetime(Duration), deprecate setMaxConnLifetimeMillis(long).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and reuse InstanceKeyDataSource.{get|set}DefaultMaxWait(Duration), deprecate {get|set}DefaultMaxWaitMillis(long).
      </action>
      <!--  FIXES -->
      <action dev="ggregory" type="fix" issue="DBCP-569" due-to="Florent Guillaume">
        Fix test random failure on TestSynchronizationOrder.testInterposedSynchronization, #84.
      </action>
      <action dev="ggregory" type="fix" issue="DBCP-568" due-to="Florent Guillaume">
        ManagedConnection must clear its cached state after transaction completes, #75.
      </action>
      <action dev="ggregory" type="fix" due-to="Arturo Bernal">
        Minor Improvements #78.
      </action>
      <action issue="DBCP-567" dev="ggregory" type="fix" due-to="Phil Steitz, Gary Gregory, Phil Steitz, Romain Manni-Bucau">
        Use abort rather than close to clean up abandoned connections.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory, DaGeRe">
        Performance Enhancement: Call toArray with Zero Array Size #20.
      </action>
      <action issue="DBCP-562" dev="ggregory" type="fix" due-to="Frank Gasdorf, Gary Gregory">
        Avoid exposing password via JMX #38.
      </action>
      <action issue="DBCP-575" dev="ggregory" type="fix" due-to="Arturo Bernal">
        Remove redundant initializers #98.
      </action>
      <action issue="DBCP-577" dev="ggregory" type="fix" due-to="Arturo Bernal">
        Simplify test assertions #100, #113. 
      </action>
      <action issue="DBCP-573" dev="ggregory" type="fix" due-to="Réda Housni Alaoui, Gary Gregory">
        DataSource implementations do not implement Wrapper interface correctly #93.
      </action>
      <action dev="ggregory" type="fix">
        Replace FindBugs with SpotBugs.
      </action>
      <action dev="ggregory" type="fix">
        DataSourceConnectionFactory.getUserPassword() may expose internal representation by returning DataSourceConnectionFactory.userPassword.
      </action>
      <action dev="ggregory" type="fix">
        DataSourceXAConnectionFactory.getUserPassword() may expose internal representation by returning DataSourceXAConnectionFactory.userPassword.
      </action>
      <action dev="ggregory" type="fix">
        DriverAdapterCPDS.getPasswordCharArray() may expose internal representation by returning DriverAdapterCPDS.userPassword.
      </action>
      <action dev="ggregory" type="fix">
        new org.apache.commons.dbcp2.managed.DataSourceXAConnectionFactory(TransactionManager, XADataSource, String, char[], TransactionSynchronizationRegistry) may expose internal representation by storing an externally mutable object into DataSourceXAConnectionFactory.userPassword.
      </action>
      <action dev="ggregory" type="fix">
        org.apache.commons.dbcp2.managed.DataSourceXAConnectionFactory.setPassword(char[]) may expose internal representation by storing an externally mutable object into DataSourceXAConnectionFactory.userPassword.
      </action>
      <action dev="ggregory" type="fix">
        org.apache.commons.dbcp2.PStmtKey.getColumnIndexes() may expose internal representation by returning PStmtKey.columnIndexes.
      </action>
      <action dev="ggregory" type="fix">
        org.apache.commons.dbcp2.PStmtKey.getColumnNames() may expose internal representation by returning PStmtKey.columnNames.
      </action>
      <action issue="DBCP-578" dev="ggregory" type="fix" due-to="Arturo Bernal">
        Use Collections.synchronizedList() Instead Of Vector #101.
      </action>
      <action issue="DBCP-576" dev="ggregory" type="fix" due-to="Arturo Bernal">
        Simplify and inline variables #99.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Update PoolKey#toString() to avoid revealing a user name is here.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Internal package private UserPassKey class stores its user name as a char[] as it already does the password.
      </action>
      <action issue="DBCP-579" dev="ggregory" type="fix" due-to="Shaktisinh Jhala, Gary Gregory">
		Performance of DelegatingConnection.prepareStatement(String) regressed enormously in 2.8.0 compared to 1.4.
        DelegatingConnection should also cache connection schema string to avoid calling the Connection#getSchema() for each key creation.
        DelegatingConnection should also cache connection catalog string to avoid calling the Connection#getCatalog() for each key creation.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        BasicDataSource should test for the presence of a security manager dynamically, not once on initialization.
      </action>
      <!-- UPDATES -->
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump mockito-core from 3.5.11 to 3.11.2 #66, #72, #77, #85, #91, #105, #110, #116.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump actions/checkout from v2.3.2 to v2.3.4 #65, #74.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump actions/cache from v2 to v2.1.6 #90, #108.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump commons-pool2 from 2.8.1 to 2.9.0.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump actions/setup-java from v1.4.2 to v2 #69.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump japicmp-maven-plugin from 0.14.3 to 0.15.2 #71, #82.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump maven-pmd-plugin from 3.13.0 to 3.14.0 #76.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump japicmp-maven-plugin from 0.14.4 to 0.15.3, #83.
      </action>
      <action dev="ggregory" type="update" due-to="John Patrick">
        Bump Hamcrest 1.3 -> 2.2 #70.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump maven-checkstyle-plugin from 3.1.1 to 3.1.2 #88.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump junit-jupiter from 5.7.0 to 5.8.0-M1, #89, #106.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot">
        Bump narayana-jta from 5.10.6.Final to 5.12.0.Final #103, #111.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot">
        Bump maven-javadoc-plugin from 3.2.0 to 3.3.0 #107.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump commons.jacoco.version 0.8.6 -> 0.8.7.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot">
        Bump jboss-logging from 3.4.1.Final to 3.4.2.Final #109.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump org.jboss:jboss-transaction-spi from 7.6.0.Final to 7.6.1.Final.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump commons-pool2 from 2.9.0 to 2.10.0.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump checkstyle to 8.44.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot">
        Bump spotbugs from 4.2.3 to 4.3.0 #117.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot">
        Bump spotbugs-maven-plugin from 4.2.3 to 4.3.0 #118.
      </action>
    </release>
    <release version="2.8.0" date="2020-09-21" description="This is a minor release, including bug fixes and enhancements.">
      <!-- add -->
      <action dev="ggregory" type="add" issue="DBCP-564" due-to="Florent Guillaume">
        Fix BasicManagedDataSource leak of connections opened after transaction is rollback-only #39.
      </action>
      <action dev="ggregory" type="add" issue="DBCP-566" due-to="Robert Paschek, Gary Gregory, Phil Steitz">
        Add clearStatementPoolOnReturn #42.
      </action>
      <action dev="ggregory" type="add" issue="DBCP-559" due-to="Phil Steitz">
        Add start, restart methods to BasicDataSource. #50.
      </action>
      <!-- fix -->
      <action dev="ggregory" type="fix" issue="DBCP-555" due-to="Gary Gregory">
        NPE when creating a SQLExceptionList with a null list.
      </action>
      <action dev="ggregory" type="fix" issue="DBCP-558" due-to="louislatreille">
        Fix DelegatingConnection readOnly and autoCommit caching mechanism #35.
      </action>
      <action dev="markt" type="fix" due-to="Sebastian Haas">
        Fix regression introduced by unreleased code clean-up #63.
      </action>
      <action dev="ggregory" type="update" due-to="DoiMasayuki, Alexander Norz, Gary Gregory">
        Update to PR#36 - PrepareStatement and prepareCall methods are extracted #37.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Do not display credentials in DriverAdapterCPDS.toString().
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Do not display credentials in DelegatingConnection.toString().
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Do not display credentials in DriverConnectionFactory.toString().
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Do not display credentials in PoolKey.toString().
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Do not display credentials in UserPassKey.toString().
      </action>
      <!-- UPDATES -->
      <action dev="ggregory" type="update" issue="DBCP-650" due-to="Gary Gregory, Dependabot">
        Update Apache Commons Pool from 2.7.0 to 2.8.1, #48.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from H2 1.4.199 to 1.4.200.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
        Update tests from Mockito 3.0.0 to 3.5.11 #47, #60, #64.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from jboss-logging 3.4.0.Final to 3.4.1.Final.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from narayana-jta 5.9.5.Final to 5.10.6.Final, #61.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from junit-jupiter 5.5.1 to 5.7.0 #62.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from org.slf4j:slf4j-simple 1.7.26 to 1.7.30.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update build from com.github.siom79.japicmp:japicmp-maven-plugin 0.13.1 to 0.14.3.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update build from maven-javadoc-plugin 3.1.1 to 3.2.0.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update build from maven-pmd-plugin 3.12.0 to 3.13.0.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update org.apache.commons:commons-parent from 48 to 51.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update jacoco-maven-plugin from 0.8.4 to 0.8.6.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update maven-checkstyle-plugin from 3.0.0 to 3.1.1.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update actions/checkout from v1 to v2.3.2, #44, #51.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update actions/setup-java from v1.4.0 to v1.4.2 #58.
      </action>
    </release>
    <release version="2.7.0" date="2019-07-31" description="This is a minor release, including bug fixes and enhancements.">
      <!-- add -->
      <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-547" due-to="leechoongyon, Gary Gregory">
        Add a ConnectionFactory class name setting for BasicDataSource.createConnectionFactory() #33.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add missing Javadocs.
      </action>
      <!-- fix -->
      <action dev="ggregory" type="fix" issue="DBCP-538" due-to="Ragnar Haugan, Gary Gregory">
        Wrong JMX base name derived in BasicDataSource#updateJmxName.
      </action>
      <action dev="ggregory" type="fix" issue="DBCP-546" due-to="Sergey Chupov">
        Avoid NPE when calling DriverAdapterCPDS.toString().
      </action>
      <action dev="ggregory" type="fix" 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="fix" due-to="LichKing-lee">
        Fix Javadoc link in README.md #21.
      </action>      
      <!-- update -->
      <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-529" due-to="Yuri">
        Add 'jmxName' property to web configuration parameters listing.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-548" due-to="Gary Gregory">
        Update Apache Commons Pool from 2.6.2 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-551" due-to="Gary Gregory">
        org.apache.commons.dbcp2.DelegatingStatement.close() should try to close ALL of its result sets even when an exception occurs.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-552" due-to="Gary Gregory">
        org.apache.commons.dbcp2.DelegatingConnection.passivate() should close ALL of its resources even when an exception occurs.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-553" due-to="Gary Gregory">
        org.apache.commons.dbcp2.PoolablePreparedStatement.passivate() should close ALL of its resources even when an exception occurs.
      </action>
      <action dev="ggregory" type="update" issue="DBCP-554" due-to="Gary Gregory">
        org.apache.commons.dbcp2.PoolableCallableStatement.passivate() should close ALL of its resources even when an exception occurs.
      </action>
      <!-- update, no Jira -->     
      <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" due-to="Gary Gregory">
        Update tests from H2 1.4.198 to 1.4.199.
      </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>
    </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 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>
