              Apache Commons Pool 2.3 RELEASE NOTES

The Apache Commons Pool team is pleased to announce the release of Apache Commons Pool 2.3.

Apache Commons Pool provides an object-pooling API and a number of object pool implementations.
Version 2 contains a completely re-written pooling implementation compared to the 1.x series.
In addition to performance and scalability improvements, version 2 includes robust instance
tracking and pool monitoring. Version 2 requires JDK level 1.6 or above. 

No client code changes are required to migrate from version 2.0, 2.1, or 2.2 to 2.3.
Users of version 1.x should consult the migration guide on the Commons Pool web site.

NOTE: The MBean interfaces (DefaultPooledObjectInfoMBean, GenericKeyedObjectPoolMXBean
      and GenericKeyedObjectPoolMXBean) exist only to define the attributes and methods
      that will be made available via JMX. They must not be implemented by clients as
      they are subject to change between major, minor and patch version releases of
      Commons Pool. Clients that implement any of these interfaces may not, therefore,
      be able to upgrade to a new minor or patch release without requiring code
      changes.

This is a maintenance release that includes bug fixes and minor enhancements.

Changes in version 2.3 include:

New features:
o POOL-262:  Made fairness configurable for GenericObjectPool, GenericKeyedObjectPool.

Fixed Bugs:
o POOL-279:  Eliminated possibility that DefaultPoolObject#getIdleTimeMillis() could
             return a negative value. Use by pool implementations would not hit this
             bug. Thanks to Jacopo Cappellato.
o POOL-275:  Made wrapped BaseProxyHandler.pooledObject volatile.
o POOL-277:  Replace synchronisation with lock-free maxBorrowWaitTimeMillis to
             increase scalability. Thanks to Lucas Pouzac.
o POOL-276:  Ensure that objects are not validated on borrow when testOnBorrow is set
             to false, testOnCreate is set to true and the pool is exhausted at the
             point borrowObject() is called.
o POOL-270:  Fixed error in GenericKeyedObjectPool constructor causing minEvictableIdleTimeMillis
             to be used in place of timeBetweenEvictionRunsMillis in eviction timer setup
             when a GenericKeyedObjectPoolConfig instance is supplied to the constructor. Thanks to Michael Berman.
o POOL-263:  Fix a threading issue that meant that concurrent calls to close() and
             returnObject() could result in some returned objects not being destroyed.
o POOL-261:  Correctly mark cglib as an optional dependency and ensure that the OSGi
             manifest information reflects that.
o            Improve performance of statistics collection for pools that extend
             BaseGenericObjectPool.
o POOL-259:  Made client wait time statistics accurate when pools are configured to
             block indefinitely.  Also modified computation to include latency clients
             experience due to waiting on factory methods.
o            Prevent potential memory leaks when the Pool is dereferenced without being
             closed.
o            Prevent potential memory leaks with using an Evictor in a container
             environment.
o            Protect against a user provided eviction policy throwing an exception and
             stopping the Evictor thread.
o            Use the thread context class loader to load custom eviction policies. This
             allows application provided eviction policies to be used in a container
             environment when the pooling implementation is provided by the container.
o POOL-281:  Fix a potential infinite loop in the underlying Deque implementation.

Changes:
o POOL-273:  Update cglib to 3.1 from 3.0.
o POOL-274:  Update asm-util to 5.0.3 from 4.0.


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

http://commons.apache.org/proper/commons-pool/

