              Apache Apache Commons DBCP
                  Version 2.3.0-SNAPSHOT
                 RELEASE NOTES

The Apache Commons DBCP team is pleased to announce the release of Apache Apache Commons DBCP 2.3.0-SNAPSHOT.

Apache Commons DBCP software implements Database Connection Pooling.

This is a minor release, including bug fixes and enhancements.

Changes in this version include:


Fixed Bugs:
o DBCP-476:  AbandonedTrace.getTrace() contains race condition Thanks to Gary Evesson, Richard Cordova.
o DBCP-482:  Avoid javax.management.InstanceNotFoundException on shutdown when a bean is not registered. Thanks to Dennis Lloyd, Gary Gregory.

Changes:
o DBCP-483:  Make constant public: org.apache.commons.dbcp2.PoolingDriver.URL_PREFIX. Thanks to Gary Gregory.
o DBCP-486:  DriverAdapterCPDS.setUser(), setPassword(), and getPooledConnection() with null arguments throw NullPointerExceptions when connection properties are set. Thanks to Gary Gregory.
o DBCP-487:  Add API org.apache.commons.dbcp2.datasources.PerUserPoolDataSource.clear(). Thanks to Gary Gregory.
o DBCP-488:  NPE for org.apache.commons.dbcp2.cpdsadapter.DriverAdapterCPDS.setConnectionProperties(null). Thanks to Gary Gregory.
o DBCP-490:  The method org.apache.commons.dbcp2.PoolingDriver.getConnectionPool(String) does not tell you which pool name is not registered when it throws an exception. Thanks to Gary Gregory.


For complete information on Apache Commons DBCP, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons DBCP website:

http://commons.apache.org/dbcp/

-----------------------------------------------------------------------------

              Apache Apache Commons DBCP
                  Version 2.2.0
                 RELEASE NOTES

The Apache Commons DBCP team is pleased to announce the release of Apache Apache Commons DBCP 2.2.0.

Apache Commons DBCP software implements Database Connection Pooling.

This is a minor release, including bug fixes and enhancements.

Changes in this version include:

New features:
o DBCP-451:  Add constructor DriverManagerConnectionFactory(String).
o DBCP-462:  Refactoring to prepare for a future patch to enable pooling of all
             prepared and callable statements in PoolingConnection. Thanks to Keiichi Fujino.
o DBCP-458:  Make it simpler to extend BasicDataSource to allow sub-classes to
             provide custom GenericObjectPool implementations. Thanks to Adrian Tarau.
o DBCP-474:  Enable pooling of all prepared and callable statements
             inPoolingConnection. Thanks to Keiichi Fujino.

Fixed Bugs:
o DBCP-481:  Update Apache Commons Pool from 2.4.2 to 2.5.0. Thanks to Gary Gregory.
o DBCP-454:  OSGi declarations contain multiple import headers for javax.transaction. Thanks to Philipp Marx, Matt Sicker.
o DBCP-478:  Wrong parameter name in site documentation for BasicDataSource Configuration Parameters. Thanks to nicola mele.
o 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.
o DBCP-446:  NullPointerException thrown when calling ManagedConnection.isClosed(). Thanks to Gary Gregory, feng yang, Euclides M, Phil Steitz.
o DBCP-444:  InvalidateConnection can result in closed connection returned by getConnection.
o DBCP-449:  Complete the fix for DBCP-418, enabling PoolableConnection class to load in environments
             (such as GAE) where the JMX ManagementFactory is not available. Thanks to Grzegorz D..
o DBCP-455:  Ensure that the cacheState setting is used when statement pooling is
             disabled. Thanks to Kyohei Nakamura.
o DBCP-453:  Ensure that setSoftMinEvictableIdleTimeMillis is used when working with
             BasicDataSource. Thanks to Philipp Marx.
o DBCP-456:  Correct the name of the configuration attribute
             softMinEvictableIdleTimeMillis. Thanks to Kyohei Nakamura.
o DBCP-472:  Avoid potential infinite loops when checking if an SQLException is fatal
             for a connection or not.
o DBCP-468:  Expand the fail-fast for fatal connection errors feature to include
             managed connections.
o 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.
o 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().
o 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.



For complete information on Apache Commons DBCP, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons DBCP website:

http://commons.apache.org/dbcp/

-----------------------------------------------------------------------------

              Apache Apache Commons DBCP
                  Version 2.1.1
                 RELEASE NOTES

The Apache Commons DBCP team is pleased to announce the release of Apache Apache Commons DBCP 2.1.1.

Apache Commons DBCP software implements Database Connection Pooling.

This is a patch release, including bug fixes only.

Changes in this version include:


Fixed Bugs:
o DBCP-441:  Added BasicDataSource abandonedUsageTracking property missing from BasicDataSourceFactory.
o DBCP-442:  SharedPoolDataSource getConnection fails when testOnBorrow is set with
             a null validation query.
o DBCP-438:  Nested connections in a transaction (local) throws null pointer. Thanks to Raihan Kibria.
o DBCP-437:  BasicDataSource does not set disconnectionSql properties on its PoolableConnectionFactory.

Changes:
o            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.


For complete information on Apache Commons DBCP, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons DBCP website:

http://commons.apache.org/dbcp/
