Apache Commons DBCP
Version 2.12.0
RELEASE NOTES

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

Apache Commons DBCP software implements Database Connection Pooling.

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

New features
------------
*            Add property project.build.outputTimestamp for build reproducibility. Thanks to Gary Gregory.
*            Add null guards in DelegatingDatabaseMetaData constructor #352. Thanks to Heewon Lee.
* DBCP-473:  Data source bean creation failed due to mismatched return type of setter and getter for connectionInitSqls in BasicDataSource: Add BasicDataSource.setConnectionInitSqls(List). Thanks to Steve Cohen, Gary Gregory.

Fixed Bugs
----------
* DBCP-590:  BasicDataSource#setAbandonedUsageTracking has no effect. Thanks to Réda Housni Alaoui.
* DBCP-596:  PoolingConnection.toString() causes StackOverflowError. Thanks to Aapo Haapanen, Gary Gregory.
*            PooledConnectionImpl.destroyObject(PStmtKey, PooledObject) can throw NullPointerException #312. Thanks to Gary Gregory, Rémy Maucherat.
*            PoolingConnection.destroyObject(PStmtKey, PooledObject) can throw NullPointerException #312. Thanks to Gary Gregory, Rémy Maucherat.
* DBCP-477:  Fix examples in src/main/java/org/apache/commons/dbcp2/package-info.java. Thanks to Mubasher Usman, Gary Gregory.

Changes
-------
*            Use ReentrantLock in PoolableConnection.close, #591 Thanks to cortlepp-intershop.
*            Bump commons-lang3 from 3.13.0 to 3.14.0. Thanks to Gary Gregory.
*            Bump commons-parent from 64 to 66. Thanks to Gary Gregory.
*            Bump org.slf4j:slf4j-simple from 2.0.9 to 2.0.12 #349. Thanks to Dependabot.


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

https://commons.apache.org/proper/commons-dbcp/

Download page: https://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi

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

Apache Commons DBCP
Version 2.11.0
RELEASE NOTES

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

Apache Commons DBCP software implements Database Connection Pooling.

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

Changes in this version include:

Changes
-------
o            Update call sites of deprecated APIs from Apache Commons Pool. Thanks to Gary Gregory.
o            Add DataSourceMXBean.getUserName() and deprecate getUsername(). Thanks to Gary Gregory, Dependabot.
o            Bump h2 from 2.2.220 to 2.2.224, #308. Thanks to Gary Gregory, Dependabot.
o            Bump commons-parent from 60 to 64. Thanks to Gary Gregory.
o            Bump org.slf4j:slf4j-simple from 2.0.7 to 2.0.9 #301. Thanks to Dependabot.
o            Bump org.apache.commons:commons-pool2 from 2.11.1 to 2.12.0. Thanks to Gary Gregory.
o            Bump jakarta.transaction:jakarta.transaction-api from 1.3.1 to 1.3.3. 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 Commons DBCP website:

https://commons.apache.org/dbcp/

Download page: https://commons.apache.org/dbcp/download_dbcp.cgi

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

Apache Commons DBCP
Version 2.10.0
RELEASE NOTES

The Apache Commons DBCP team is pleased to announce the release of Apache Commons DBCP 2.10.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            Add and use AbandonedTrace#setLastUsed(Instant). Thanks to Gary Gregory.
o            - 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. Thanks to Gary Gregory.
o            Add PMD check to default Maven goal. Thanks to Gary Gregory.
o            Add Utils.getDisconnectionSqlCodes() and Utils.DISCONNECTION_SQL_CODES. Thanks to Gary Gregory.
o            Make BasicDataSource.getConnectionPool() public. Thanks to Gary Gregory.
o            Add github/codeql-action. Thanks to Gary Gregory.

Fixed Bugs
----------
o            Fix StackOverflowError in PoolableConnection.isDisconnectionSqlException #123. Thanks to newnewcoder, Gary Gregory.
o            PerUserPoolDataSourceFactory.getNewInstance(Reference) parsed defaultMaxWaitMillis as an int instead of a long. Thanks to Gary Gregory.
o            Reimplement time tracking in AbandonedTrace with an Instant instead of a long. Thanks to Gary Gregory.
o            Migrate away from deprecated APIs in Apache Commons Pool. Thanks to Gary Gregory.
o            Fix possible NullPointerException in BasicDataSourceFactory.validatePropertyNames(). Thanks to Gary Gregory.
o            Fix possible NullPointerException in BasicDataSourceFactory.getObjectInstance(). Thanks to Gary Gregory.
o DBCP-585:  Connection level JMX queries result in concurrent access to connection objects, causing errors #179. Thanks to Kurtcebe Eroglu, Gary Gregory, Phil Steitz.
o            UserPassKey should be Serializable. Thanks to Gary Gregory.
o            LifetimeExceededException should extend SQLException. Thanks to Gary Gregory.
o            Replace Exception with SQLException in some method signatures (preserves binary compatibility, not source). Thanks to Gary Gregory.
o            Don't leak Connections when PoolableConnectionFactory.makeObject() fails to create a JMX ObjectName. Thanks to Gary Gregory.
o            Performance: No need for map lookups if we traverse map entries instead of keys. Thanks to SpotBugs, Gary Gregory.
o            Performance: Refactor to use a static inner class in DataSourceXAConnectionFactory. Thanks to SpotBugs, Gary Gregory.
o            Reuse pattern of throwing XAException instead of NullPointerException in LocalXAConnectionFactory.LocalXAResource. Thanks to SpotBugs, Gary Gregory.
o            SpotBugs: An overridable method is called from constructors in PoolableCallableStatement. Thanks to SpotBugs, Gary Gregory.
o            SpotBugs: An overridable method is called from constructors in PoolablePreparedStatement. Thanks to SpotBugs, Gary Gregory.
o            Wrong property name logged in ConnectionFactoryFactory.createConnectionFactory(BasicDataSource, Driver). Thanks to Gary Gregory.
o            Throw SQLException instead of NullPointerException when the connection is already closed. Thanks to Gary Gregory.
o            CPDSConnectionFactory.makeObject() does not need to wrap and rethrow SQLException. Thanks to Gary Gregory.
o            PoolingDataSource.close() now always throws SQLException. Thanks to Gary Gregory.
o            [StepSecurity] ci: Harden GitHub Actions #282. Thanks to step-security-bot, Gary Gregory.
o            Fixes typos, missing or misplaced characters, and grammar issues #299. Thanks to Martin Wiesner.

Changes
-------
o            Bump actions/cache from 2.1.6 to 3.0.8 #147, #176. Thanks to Dependabot, Gary Gregory.
o            Bump actions/checkout from 2.3.4 to 3.0.2 #139, #143, #173. Thanks to Dependabot, Gary Gregory.
o            Bump actions/setup-java from 2 to 3.6.0 #229. Thanks to Gary Gregory, Dependabot.
o            Bump actions/upload-artifact from 3.1.0 to 3.1.1 #231. Thanks to Dependabot.
o            Bump checkstyle from 8.44 to 9.3 #121, #130, #149, #158, #190. Thanks to Dependabot.
o            Bump maven-checkstyle-plugin from 3.1.2 to 3.2.0 #210. Thanks to Dependabot.
o            Bump commons-pool2 2.10.0 to 2.11.1. Thanks to Gary Gregory, Dependabot.
o            Bump junit-jupiter from 5.8.0-M1 to 5.9.1 #125, #136, #157, #203, #218. Thanks to Dependabot.
o            Bump spotbugs-maven-plugin from 4.3.0 to 4.7.3.0 #140, #154, #161, #178, #192, #200, #204, #213, #234. Thanks to Dependabot.
o            Bump spotbugs from 4.3.0 to 4.7.3 #124, #133, #151, #164, #177, #189, #214, #230. Thanks to Dependabot, Gary Gregory.
o            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. Thanks to Gary Gregory, Dependabot.
o            Bump maven-javadoc-plugin from 3.3.0 to 3.4.1 #131, #184. Thanks to Dependabot.
o            Bump maven-pmd-plugin from 3.14.0 to 3.19.0 #132, #172, #195. Thanks to Dependabot, Gary Gregory.
o            Bump pmd from 6.44.0 to 6.52.0. Thanks to Dependabot, Gary Gregory.
o            Bump narayana-jta from 5.12.0.Final to 5.12.7.Final #134, #156, #163, #185, #197. Thanks to Dependabot.
o            Bump japicmp-maven-plugin from 0.15.3 to 0.17.1 #137, #166, #174, #211, #238. Thanks to Dependabot.
o            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. Thanks to Gary Gregory, Dependabot.
o            Bump jboss-logging from 3.4.2.Final to 3.4.3.Final #162. Thanks to Dependabot.
o            Bump slf4j-simple from 1.7.30 to 1.7.36 #169. Thanks to Dependabot.
o            Bump commons-parent from 52 to 60 #180, #219, #254, #278. Thanks to Dependabot, Gary Gregory.
o            Bump JaCoCo from 0.8.7 to 0.8.8. Thanks to Gary Gregory.
o            Bump maven-surefire-plugin 2.22.2 to 3.0.0-M7. Thanks to Gary Gregory.
o            Bump apache-rat-plugin 0.13 to 0.14. Thanks to Gary Gregory.
o            Bump commons-lang3 from 3.12 to 3.13.0. 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 Commons DBCP website:

https://commons.apache.org/dbcp/

Download page: https://commons.apache.org/dbcp/download_dbcp.cgi

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

Apache Commons DBCP
Version 2.9.0
RELEASE NOTES

The Apache Commons DBCP team is pleased to announce the release of Apache Commons DBCP 2.9.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            Add and reuse Constants.KEY_USER and Constants.KEY_PASSWORD. Thanks to Gary Gregory.
o            Add and reuse DataSourceMXBean. Thanks to Frank Gasdorf, Gary Gregory.
o            Add and reuse DriverAdapterCPDS.{get|set}DurationBetweenEvictionRuns(), deprecate {get|set}TimeBetweenEvictionRunsMillis(long). Thanks to Gary Gregory.
o            Add and reuse DriverAdapterCPDS.{get|set}MinEvictableIdleDuration(), deprecate {get|set}MinEvictableIdleTimeMillis(int). Thanks to Gary Gregory.
o            Add and reuse CPDSConnectionFactory.setMaxConnLifetime(Duration), deprecate setMaxConnLifetimeMillis(long). Thanks to Gary Gregory.
o            Add and reuse KeyedCPDSConnectionFactory.setMaxConnLifetime(Duration), deprecate setMaxConnLifetimeMillis(long). Thanks to Gary Gregory.
o            Add and reuse KeyedCPDSConnectionFactory.setMaxConnLifetime(Duration), deprecate setMaxConnLifetimeMillis(long). Thanks to Gary Gregory.
o            Add and reuse InstanceKeyDataSource.{get|set}DefaultMaxWait(Duration), deprecate {get|set}DefaultMaxWaitMillis(long). Thanks to Gary Gregory.

Fixed Bugs
----------
o DBCP-569:  Fix test random failure on TestSynchronizationOrder.testInterposedSynchronization, #84. Thanks to Florent Guillaume.
o DBCP-568:  ManagedConnection must clear its cached state after transaction completes, #75. Thanks to Florent Guillaume.
o            Minor Improvements #78. Thanks to Arturo Bernal.
o DBCP-567:  Use abort rather than close to clean up abandoned connections. Thanks to Phil Steitz, Gary Gregory, Phil Steitz, Romain Manni-Bucau.
o            Performance Enhancement: Call toArray with Zero Array Size #20. Thanks to Gary Gregory, DaGeRe.
o DBCP-562:  Avoid exposing password via JMX #38. Thanks to Frank Gasdorf, Gary Gregory.
o DBCP-575:  Remove redundant initializers #98. Thanks to Arturo Bernal.
o DBCP-577:  Simplify test assertions #100, #113. Thanks to Arturo Bernal.
o DBCP-573:  DataSource implementations do not implement Wrapper interface correctly #93. Thanks to Réda Housni Alaoui, Gary Gregory.
o            Replace FindBugs with SpotBugs.
o            DataSourceConnectionFactory.getUserPassword() may expose internal representation by returning DataSourceConnectionFactory.userPassword.
o            DataSourceXAConnectionFactory.getUserPassword() may expose internal representation by returning DataSourceXAConnectionFactory.userPassword.
o            DriverAdapterCPDS.getPasswordCharArray() may expose internal representation by returning DriverAdapterCPDS.userPassword.
o            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.
o            org.apache.commons.dbcp2.managed.DataSourceXAConnectionFactory.setPassword(char[]) may expose internal representation by storing an externally mutable object into DataSourceXAConnectionFactory.userPassword.
o            org.apache.commons.dbcp2.PStmtKey.getColumnIndexes() may expose internal representation by returning PStmtKey.columnIndexes.
o            org.apache.commons.dbcp2.PStmtKey.getColumnNames() may expose internal representation by returning PStmtKey.columnNames.
o DBCP-578:  Use Collections.synchronizedList() Instead Of Vector #101. Thanks to Arturo Bernal.
o DBCP-576:  Simplify and inline variables #99. Thanks to Arturo Bernal.
o            Update PoolKey#toString() to avoid revealing a user name is here. Thanks to Gary Gregory.
o            Internal package private UserPassKey class stores its user name as a char[] as it already does the password. Thanks to Gary Gregory.
o DBCP-579:  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. Thanks to Shaktisinh Jhala, Gary Gregory.
o            BasicDataSource should test for the presence of a security manager dynamically, not once on initialization. Thanks to Gary Gregory.

Changes
-------
o            Bump mockito-core from 3.5.11 to 3.11.2 #66, #72, #77, #85, #91, #105, #110, #116. Thanks to Dependabot.
o            Bump actions/checkout from v2.3.2 to v2.3.4 #65, #74. Thanks to Dependabot.
o            Bump actions/cache from v2 to v2.1.6 #90, #108. Thanks to Dependabot.
o            Bump commons-pool2 from 2.8.1 to 2.9.0. Thanks to Gary Gregory.
o            Bump actions/setup-java from v1.4.2 to v2 #69. Thanks to Dependabot, Gary Gregory.
o            Bump japicmp-maven-plugin from 0.14.3 to 0.15.2 #71, #82. Thanks to Dependabot, Gary Gregory.
o            Bump maven-pmd-plugin from 3.13.0 to 3.14.0 #76. Thanks to Dependabot.
o            Bump japicmp-maven-plugin from 0.14.4 to 0.15.3, #83. Thanks to Dependabot, Gary Gregory.
o            Bump Hamcrest 1.3 -> 2.2 #70. Thanks to John Patrick.
o            Bump maven-checkstyle-plugin from 3.1.1 to 3.1.2 #88. Thanks to Gary Gregory.
o            Bump junit-jupiter from 5.7.0 to 5.8.0-M1, #89, #106. Thanks to Gary Gregory.
o            Bump narayana-jta from 5.10.6.Final to 5.12.0.Final #103, #111. Thanks to Dependabot.
o            Bump maven-javadoc-plugin from 3.2.0 to 3.3.0 #107. Thanks to Dependabot.
o            Bump commons.jacoco.version 0.8.6 -> 0.8.7. Thanks to Gary Gregory.
o            Bump jboss-logging from 3.4.1.Final to 3.4.2.Final #109. Thanks to Dependabot.
o            Bump org.jboss:jboss-transaction-spi from 7.6.0.Final to 7.6.1.Final. Thanks to Gary Gregory.
o            Bump commons-pool2 from 2.9.0 to 2.10.0. Thanks to Gary Gregory.
o            Bump checkstyle to 8.44. Thanks to Gary Gregory.
o            Bump spotbugs from 4.2.3 to 4.3.0 #117. Thanks to Dependabot.
o            Bump spotbugs-maven-plugin from 4.2.3 to 4.3.0 #118. Thanks to Dependabot.


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

https://commons.apache.org/dbcp/

Download page: https://commons.apache.org/dbcp/download_dbcp.cgi

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

Apache Commons DBCP
Version 2.8.0
RELEASE NOTES

The Apache Commons DBCP team is pleased to announce the release of Apache Commons DBCP 2.8.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-564:  Fix BasicManagedDataSource leak of connections opened after transaction is rollback-only #39. Thanks to Florent Guillaume.
o DBCP-566:  Add clearStatementPoolOnReturn #42. Thanks to Robert Paschek, Gary Gregory, Phil Steitz.
o DBCP-559:  Add start, restart methods to BasicDataSource. #50. Thanks to Phil Steitz.

Fixed Bugs
----------
o DBCP-555:  NPE when creating a SQLExceptionList with a null list. Thanks to Gary Gregory.
o DBCP-558:  Fix DelegatingConnection readOnly and autoCommit caching mechanism #35. Thanks to louislatreille.
o            Fix regression introduced by unreleased code clean-up #63. Thanks to Sebastian Haas.

Changes
-------
o            Update to PR#36 - PrepareStatement and prepareCall methods are extracted #37. Thanks to DoiMasayuki, Alexander Norz, Gary Gregory.
o            Mask out user name and password from DriverAdapterCPDS.toString(). Thanks to Gary Gregory.
o DBCP-650:  Update Apache Commons Pool from 2.7.0 to 2.8.1, #48. Thanks to Gary Gregory, Dependabot.
o            Update tests from H2 1.4.199 to 1.4.200. Thanks to Gary Gregory.
o            Update tests from Mockito 3.0.0 to 3.5.11 #47, #60, #64. Thanks to Gary Gregory, Dependabot.
o            Update tests from jboss-logging 3.4.0.Final to 3.4.1.Final. Thanks to Gary Gregory.
o            Update tests from narayana-jta 5.9.5.Final to 5.10.6.Final, #61. Thanks to Gary Gregory.
o            Update tests from junit-jupiter 5.5.1 to 5.7.0 #62. Thanks to Gary Gregory.
o            Update tests from org.slf4j:slf4j-simple 1.7.26 to 1.7.30. Thanks to Gary Gregory.
o            Update build from com.github.siom79.japicmp:japicmp-maven-plugin 0.13.1 to 0.14.3. Thanks to Gary Gregory.
o            Update build from maven-javadoc-plugin 3.1.1 to 3.2.0. Thanks to Gary Gregory.
o            Update build from maven-pmd-plugin 3.12.0 to 3.13.0. Thanks to Gary Gregory.
o            Update org.apache.commons:commons-parent from 48 to 51. Thanks to Gary Gregory.
o            Update jacoco-maven-plugin from 0.8.4 to 0.8.6. Thanks to Gary Gregory.
o            Update maven-checkstyle-plugin from 3.0.0 to 3.1.1. Thanks to Gary Gregory.
o            Update actions/checkout from v1 to v2.3.2, #44, #51. Thanks to Dependabot.
o            Update actions/setup-java from v1.4.0 to v1.4.2 #58. Thanks to Dependabot.


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

https://commons.apache.org/dbcp/

Download page: https://commons.apache.org/dbcp/download_dbcp.cgi

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

Apache Commons DBCP
Version 2.7.0
RELEASE NOTES
7 July 2019

The Apache Commons DBCP team is pleased to announce the release of Apache Commons DBCP 2.7.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-539:  ManagedDataSource#close() should declare used exceptions. Thanks to Jacques Le Roux.
o DBCP-547:  Add a ConnectionFactory class name setting for BasicDataSource.createConnectionFactory() #33. Thanks to leechoongyon, Gary Gregory.
o            Add missing Javadocs. Thanks to Gary Gregory.

Fixed Bugs
----------
o DBCP-538:  Wrong JMX base name derived in BasicDataSource#updateJmxName. Thanks to Ragnar Haugan, Gary Gregory.
o DBCP-546:  Avoid NPE when calling DriverAdapterCPDS.toString(). Thanks to Sergey Chupov.
o DBCP-550:  java.util.IllegalFormatException while building a message for a SQLFeatureNotSupportedException in Jdbc41Bridge.getObject(ResultSet,String,Class). Thanks to Gary Gregory.
o            Fix Javadoc link in README.md #21. Thanks to LichKing-lee.

Changes
-------
o DBCP-540:  Close ObjectOutputStream before calling toByteArray() on underlying ByteArrayOutputStream #28. Thanks to emopers.
o DBCP-541:  Upgrade to JUnit Jupiter #19. Thanks to Allon Murienik.
o DBCP-542:  Fix tests on Java 11. Thanks to Zheng Feng, Gary Gregory.
o DBCP-543:  Update Apache Commons Pool from 2.6.1 to 2.6.2. Thanks to Gary Gregory.
o DBCP-529:  Add 'jmxName' property to web configuration parameters listing. Thanks to Yuri.
o DBCP-548:  Update Apache Commons Pool from 2.6.2 to 2.7.0. Thanks to Gary Gregory.
o DBCP-549:  Make org.apache.commons.dbcp2.AbandonedTrace.removeTrace(AbandonedTrace) null-safe. Thanks to Gary Gregory.
o DBCP-551:  org.apache.commons.dbcp2.DelegatingStatement.close() should try to close ALL of its result sets even when an exception occurs. Thanks to Gary Gregory.
o DBCP-552:  org.apache.commons.dbcp2.DelegatingConnection.passivate() should close ALL of its resources even when an exception occurs. Thanks to Gary Gregory.
o DBCP-553:  org.apache.commons.dbcp2.PoolablePreparedStatement.passivate() should close ALL of its resources even when an exception occurs. Thanks to Gary Gregory.
o DBCP-554:  org.apache.commons.dbcp2.PoolableCallableStatement.passivate() should close ALL of its resources even when an exception occurs. Thanks to Gary Gregory.
o            Update tests from org.mockito:mockito-core 2.28.2 to 3.0.0. Thanks to Gary Gregory.
o            Update tests from H2 1.4.198 to 1.4.199. Thanks to Gary Gregory.
o            Update tests from com.h2database:h2 1.4.197 to 1.4.199. Thanks to Gary Gregory.
o            Update tests from org.jboss.narayana.jta:narayana-jta 5.9.2.Final to 5.9.5.Final. Thanks to Gary Gregory.
o            Update tests from org.jboss.logging:jboss-logging 3.3.2.Final to 3.4.0.Final. Thanks to Gary Gregory.
o            Update tests from org.mockito:mockito-core 2.24.0 to 2.28.2. Thanks to Gary Gregory.
o            Update tests from org.mockito:mockito-core 2.28.2 to 3.0.0. 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 Commons DBCP website:

https://commons.apache.org/dbcp/

Download page: https://commons.apache.org/dbcp/download_dbcp.cgi

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

Apache Commons DBCP
Version 2.6.0
RELEASE NOTES

The Apache Commons DBCP team is pleased to announce the release of Apache Commons DBCP 2.6.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-534:  Allow for manual connection eviction. Thanks to Peter Wicks.
o DBCP-514:  Allow DBCP to register with a TransactionSynchronizationRegistry for XA cases. Thanks to Tom Jenkinson, Gary Gregory.
o DBCP-519:  Add some toString() methods for debugging (never printing passwords.) Thanks to Gary Gregory.
o DBCP-527:  Add getters to some classes. Thanks to Gary Gregory.
o DBCP-528:  org.apache.commons.dbcp2.DriverManagerConnectionFactory should use a char[] instead of a String to store passwords. Thanks to Gary Gregory.

Fixed Bugs
----------
o DBCP-518:  Allow DBCP to work with old Java 6/JDBC drivers without throwing AbstractMethodError. Thanks to Gary Gregory.

Changes
-------
o DBCP-517:  Make defensive copies of char[] passwords. Thanks to Gary Gregory.
o DBCP-515:  Do not try to register synchronization when the transaction is no longer active. Thanks to Tom Jenkinson, Gary Gregory.
o DBCP-516:  Do not double returnObject back to the pool if there is a transaction context with a shared connection. Thanks to Tom Jenkinson, Gary Gregory.
o DBCP-520:  BasicManagedDataSource needs to pass the TSR with creating DataSourceXAConnectionFactory. Thanks to Zheng Feng.
o DBCP-537:  Update Apache Commons Pool from 2.6.0 to 2.6.1. 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 Commons DBCP website:

https://commons.apache.org/dbcp/

Download page: https://commons.apache.org/dbcp/download_dbcp.cgi

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

Apache Commons DBCP
Version 2.5.0
RELEASE NOTES

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

Apache Commons DBCP software implements Database Connection Pooling.

This is a minor release, including bug fixes and enhancements and requires Java 8 or above to support JDBC 4.2.

Changes in this version include:

New features
------------
o DBCP-506:  Support JDBC 4.2. Thanks to Gary Gregory.
o DBCP-479:  Support default schema in configuration. Thanks to Guillaume Husta, Gary Gregory.

Fixed Bugs
----------
o DBCP-508:  Prepared statement keys should take a Connection's schema into account. Thanks to Gary Gregory.
o DBCP-512:  Avoid exceptions when closing a connection in mutli-threaded use case. Thanks to Gary Gregory.

Changes
-------
o DBCP-505:  Update Java requirement from version 7 to 8. Thanks to Gary Gregory.
o DBCP-427:  Examines 'SQLException's thrown by underlying connections or statements for fatal (disconnection) errors. Thanks to Vladimir Konkov, Phil Steitz, Gary Gregory.
o DBCP-507:  Change default for fail-fast connections from false to true. Thanks to Vladimir Konkov, Phil Steitz, Gary Gregory.
o DBCP-504:  Increase test coverage. Thanks to Bruno P. Kinoshita.
o DBCP-510:  Update Apache Commons Pool from 2.5.0 to 2.6.0. Thanks to Gary Gregory.

Note that Clirr incorrectly reports one binary incompatible change because it is not aware of Java 8 and default methods:
[ERROR] 7012: org.apache.commons.dbcp2.BasicDataSourceMXBean: Method 'public java.lang.String getDefaultSchema()' has been added to an interface

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

https://commons.apache.org/dbcp/

Download from https://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi

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

Download page: https://commons.apache.org/dbcp/download_dbcp.cgi

Apache Commons DBCP
Version 2.4.0
RELEASE NOTES

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

Apache Commons DBCP software implements Database Connection Pooling.

This is a minor release, including bug fixes and enhancements, which you can download from https://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi

Changes in this version include:


Fixed Bugs
----------
o DBCP-484:  Connection leak during XATransaction in high load. Thanks to Emanuel Freitas.
o DBCP-496:  Add support for pooling CallableStatements to the org.apache.commons.dbcp2.cpdsadapter package. Thanks to Gary Gregory.

Changes
-------
o DBCP-492:  Drop Ant build. Thanks to Gary Gregory.
o DBCP-491:  Ensure DBCP ConnectionListener can deal with transaction managers which invoke rollback in a separate thread. Thanks to Zheng Feng, Gary Gregory.
o DBCP-494:  org.apache.commons.dbcp2.PStmtKey should make copies of given arrays in constructors. Thanks to Gary Gregory.
o DBCP-495:  Remove duplicate code in org.apache.commons.dbcp2.cpdsadapter.PStmtKeyCPDS. Thanks to Gary Gregory.
o DBCP-497:  Deprecate use of PStmtKeyCPDS in favor of PStmtKey. Thanks to Gary Gregory.
o DBCP-498:  org.apache.commons.dbcp2.DataSourceConnectionFactory should use a char[] instead of a String to store passwords. Thanks to Gary Gregory.
o DBCP-499:  org.apache.commons.dbcp2.managed.DataSourceXAConnectionFactory should use a char[] instead of a String to store passwords. Thanks to Gary Gregory.
o DBCP-500:  org.apache.commons.dbcp2.cpdsadapter.DriverAdapterCPDS should use a char[] instead of a String to store passwords. Thanks to Gary Gregory.
o DBCP-501:  org.apache.commons.dbcp2.datasources.CPDSConnectionFactory should use a char[] instead of a String to store passwords. Thanks to Gary Gregory.
o DBCP-502:  org.apache.commons.dbcp2.datasources internals should use a char[] instead of a String to store passwords. Thanks to Gary Gregory.
o DBCP-503:  org.apache.commons.dbcp2.datasources.InstanceKeyDataSourceFactory.closeAll() does not close all. 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 Commons DBCP website:

https://commons.apache.org/dbcp/

Download from https://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi

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

Apache Commons DBCP
Version 2.3.0
RELEASE NOTES

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

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 Commons DBCP website:

https://commons.apache.org/dbcp/

Download from https://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi

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

Apache Commons DBCP
Version 2.2.0
RELEASE NOTES

The Apache Commons DBCP team is pleased to announce the release of 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 Commons DBCP website:

https://commons.apache.org/dbcp/

Download from https://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi

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

Apache Commons DBCP
Version 2.1.1
RELEASE NOTES

The Apache Commons DBCP team is pleased to announce the release of 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 Commons DBCP website:

https://commons.apache.org/dbcp/

Download from https://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi
