Apache Apache Commons DBCP Version 2.0 RELEASE NOTES The Apache Commons DBCP team is pleased to announce the release of Apache Apache Commons DBCP 2.0 Apache Commons DBCP software implements Database Connection Pooling 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 (TBA) 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. Applications running under Java 7 should use DBCP 2.0.x. Changes in this version include: New features: o 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. o DBCP-292: 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). o DBCP-368: Expose the new Pool 2 property evictionPolicyClassName to enable more sophisticated eviction strategies to be used. o DBCP-406: Add support for pooling PreparedStatements that use auto-generated keys. Thanks to Steeve Beroard. o DBCP-177: Enable DBCP to work with a SecurityManager such that only DBCP needs to be granted the necessary permissions to communicate with the database. o DBCP-219: Register pooled connections with JMX so that they may be forcibly closed via JMX if required. o DBCP-373: 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. o DBCP-351: Provide an option to control if autoCommit is always set to true when a connection is returned to the connection pool. o DBCP-399: Provide an option to control if rollback is called when a connection is returned to the poll with autoCommit disabled. o DBCP-340: Provide an option to set the default query timeout. o 249: Add support for validation testing database connections on creation. Fixed Bugs: o DBCP-411: BasicManagedDataSource - unregister from JMX on close(). o DBCP-154: Log validation failures of poolable connections. o DBCP-403: DelegatingStatement.close() fails with NPE if statement is null o DBCP-322: CPDSConnectionFactory.validateObject(Object) ignores Throwable. o DBCP-300: Removed unnecessary synchronisation in BasicDataSource#createDataSource. o DBCP-384: Fix threading issues with accessToUnderlyingConnectionAllowed attribute of PoolingDriver which is used to support unit testing. o DBCP-376: Fix thread safety issues in the SharedPoolDataSource and the PerUserPoolDataSource. Thanks to Dave Oxley. o DBCP-382: Allow accessToUnderlyingConnectionAllowed to be configured when configuration takes place via JNDI in a JavaEE container. Thanks to Stefan Rempfer. o DBCP-369: Fix threading issue when using multiple instances of the SharedPoolDataSource concurrently. Thanks to Michael Pradel. o DBCP-391: 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. o DBCP-404: Make all mutable fields private. o DBCP-364: Return BasicDataSource rather than DataSource from BasicDataSourceFactory so a cast is not required to use BasicDataSource specific methods. o DBCP-358: 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. o DBCP-180: Enable JDBC resources that are no longer referenced by client code to be eligible for garbage collection. o DBCP-410: Correct path to Javadoc overview in build.xml. Thanks to Andreas Sturmlechner. o DBCP-234: 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. o Connection.isValid() should not throw an SQLException if the connection is closed. o DBCP-357: 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. Changes: o The Java package name has been changed from org.apache.commons.dbcp to org.apache.commons.dbcp2. o Update to Commons Pool 2 (based on java.util.concurrent) to provide pooling functionality. o Updated source code for Java 1.6 (added @Override & @Deprecated annotations). o Removed JOCL support. o DBCP-143: Remove deprecated SQLNestedException. 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/proper/commons-dbcp/