Repository: commons-pool
Updated Branches:
  refs/heads/master 7348e0962 -> a34a39018


Prepare for release.

Project: http://git-wip-us.apache.org/repos/asf/commons-pool/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-pool/commit/a34a3901
Tree: http://git-wip-us.apache.org/repos/asf/commons-pool/tree/a34a3901
Diff: http://git-wip-us.apache.org/repos/asf/commons-pool/diff/a34a3901

Branch: refs/heads/master
Commit: a34a39018c5bac67793d21fac614f2e96dfd82a2
Parents: 7348e09
Author: Gary Gregory <ggreg...@apache.org>
Authored: Sat Dec 16 11:51:59 2017 -0700
Committer: Gary Gregory <ggreg...@apache.org>
Committed: Sat Dec 16 11:51:59 2017 -0700

----------------------------------------------------------------------
 src/changes/changes.xml | 1430 +++++++++++++++++++++---------------------
 1 file changed, 715 insertions(+), 715 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-pool/blob/a34a3901/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index dd5eaab..1e225fb 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -1,715 +1,715 @@
-<?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 also 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 JIRA search for tickets closed since the previous release.
-
-3.  Use the report generated by the maven-changelog-plugin to see all
-SVN commits. TBA how to use this with SVN.
-
-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>
-  <properties>
-    <title>Apache Commons Pool Changes</title>
-  </properties>
-  <body>
-  <release version="2.5.0" date="2017-12-16" description="This is a patch 
release, including bug fixes only.">
-    <action dev="ggregory" issue="POOL-331" type="update">
-      Update from Java 6 to 7.
-    </action>
-    <action dev="ggregory" issue="POOL-330" type="delete">
-      Drop Ant build.
-    </action>
-    <action dev="ggregory" issue="POOL-332" type="add">
-      ObjectPool and KeyedObject pool should extend Closeable.
-    </action>
-    <action dev="ggregory" issue="POOL-333" type="update">
-      Update optional dependency asm-util from 5.2 to 6.0.
-    </action>
-    <action dev="ggregory" issue="POOL-334" type="update">
-      org.apache.commons.pool2.impl.ThrowableCallStack.Snapshot is missing 
serialVersionUID.
-    </action>
-    <action dev="mattsicker" issue="POOL-335" type="add">
-      Make abandoned logging stack trace requirements configurable. This also 
reverts
-      the default behavior introduced by POOL-320.
-    </action>
-  </release>
-  <release version="2.4.3" date="2017-10-24" description="This is a patch 
release, including bug fixes only.">
-    <action dev="ggregory" issue="POOL-328" type="fix" due-to="Lorenzo Solano 
Martinez">
-      Documentation with repeated words (sources, tests, and examples).
-    </action>
-    <action dev="ggregory" issue="POOL-317" type="fix" due-to="KeiichiFujino">
-      Correction of default value of softMinEvictableIdleTimeMillis in 
BaseObjectPoolConfig.
-    </action>
-    <action dev="ggregory" issue="POOL-309" type="fix" due-to="jolestar, 
Roopam Patekar">
-      Fix misspellings from "destory" to "destroy".
-    </action>
-    <action dev="markt" issue="POOL-306" type="fix" due-to="Adrian Crum">
-      Ensure BaseGenericObjectPool.IdentityWrapper#equals() follows the 
expected
-      contract for equals(). 
-    </action>
-    <action dev="markt" issue="POOL-303" type="fix">
-      Ensure that threads do not block indefinitely if more than maxTotal
-      threads try to borrow an object at the same time and the factory fails to
-      create any objects. 
-    </action>
-    <action dev="markt" issue="POOL-280" type="update" due-to="Jacopo 
Cappellato">
-      Small refactoring of borrowObject() to reduce code duplication.
-    </action>
-    <action dev="markt" issue="POOL-307" type="update" due-to="Anthony 
Whitford">
-      Replace inefficient use of keySet with entrySet in GKOP.
-    </action>
-    <action dev="markt" issue="POOL-310" type="fix" due-to="Ivan Iliev">
-      Ensure that threads using GKOP do not block indefinitely if more than
-      maxTotal threads try to borrow objects with different keys at the same
-      time and the factory destroys objects on return. 
-    </action>
-    <action dev="markt" type="fix">
-      Ensure that any class name used for evictionPolicyClassName represents a
-      class that implements EvictionPolicy.
-    </action>
-    <action dev="markt" issue="POOL-315" type="fix" due-to="KeiichiFujino">
-      Add a configurable delay (default 10 seconds) to wait when shutting down
-      an Evictor to allow the associated thread time to complete and current
-      evictions and to terminate.
-    </action>
-    <action dev="markt" type="fix">
-      Ensure that a call to GKOP preparePool() takes account of other threads
-      that might create objects concurrently, particularly the Evictor.
-    </action>
-    <action dev="mattsicker" issue="POOL-320" type="add">
-      Use more efficient stack walking mechanisms for usage tracking when 
possible.
-    </action>
-    <action dev="ggregory" issue="POOL-322" type="update">
-      Update optional cglib library from 3.1 to 3.2.5.
-    </action>
-    <action dev="ggregory" issue="POOL-323" type="update">
-      Update optional OW2 ASM from 5.0.4 to 5.2.
-    </action>
-  </release>
-  <release version="2.4.2" date="2015-08-01" description=
- "This is a patch release, including bug fixes only.">
-    <action dev="psteitz" issue="POOL-298" type="fix">
-      Changed default jmxNameBase in BaseObjectPoolConfig to the correct (null)
-      default.
-    </action>
-    <action dev="psteitz" issue="POOL-300" type="fix">
-      Added PrintWriter flush to DefaultPooledObject's printStackTrace method.
-    </action>
-  </release>
-  <release version="2.4.1" date="2015-05-30" description=
- "This is a patch release, replacing a defective binary jar in version 2.4. 
Other
-than the build configuration, the source distribution for version 2.4.1 is 
identical
-to version 2.4.">
-    <action dev="psteitz" issue="POOL-297" type="fix">
-      Reverted cobertura plugin update that caused binary jar corruption.
-    </action>
-  </release>
-  <release version="2.4" date="2015-05-27" description=
- "This is a maintenance release that includes bug fixes and minor 
enhancements.">
-    <action dev="psteitz" type="fix" issue="POOL-287" due-to="Caleb Spare and 
Thomas Neidhart">
-      Fixed capacity leak when an object is offered from a 
GenericKeyedObjectPool while it is
-      being validated by the evictor. 
-    </action>
-    <action dev="psteitz" type="fix" issue="POOL-283">
-      Eliminated the requirement that objects managed by GenericObjectPool or
-      GenericKeyedObjectPool be discernible by equals.  Prior to this fix,
-      equal but distinct object instances could not be stored in the same pool.
-    </action>
-    <action dev="psteitz" type="fix" issue="POOL-284">
-      Eliminated the requirement that object equality and hashcodes do not 
change
-      while objects are under management by GenericObjectPool or 
GenericKeyedObjectPool.
-    </action>
-    <action dev="markt" type="fix" issue="POOL-289" due-to="Luke Winkenbach">
-      Fixed class loading for custom EvictionPolicy implementations that may 
not
-      be present in the class loader hierarchy of the Pool classes by falling
-      back to the class loader of the current class.
-    </action>
-    <action dev="psteitz" type="fix" issue="POOL-285">
-      Ensured that when an instance that has already been returned to a pool is
-      returned again, the expected IllegalStateException is generated before 
the
-      returning object is re-validated or re-passivated.
-    </action>
-    <action dev="psteitz" type="add" issue="POOL-286">
-      Added preparePool method to GenericObjectPool.
-    </action>
-    <action dev="ggregory" type="update" issue="POOL-296">
-      Update asm-util from 5.0.3 to 5.0.4.
-    </action>
-    <action dev="psteitz" type="update" issue="POOL-293">
-      Exposed getEvictionPolicy as protected in BaseGenericObjectPool.
-    </action>
-  </release>
-  <release version="2.3" date="2014-12-30" description=
-"This is a maintenance release that includes bug fixes and minor 
enhancements.">  
-    <action dev="psteitz" type="fix" issue="POOL-279" due-to="Jacopo 
Cappellato">
-      Eliminated possibility that DefaultPoolObject#getIdleTimeMillis() could
-      return a negative value. Use by pool implementations would not hit this
-      bug. 
-    </action>
-    <action dev="psteitz" type="fix" issue="POOL-275">
-      Made wrapped BaseProxyHandler.pooledObject volatile.
-    </action>
-    <action dev="ecki" type="fix" issue="POOL-277" due-to="Lucas Pouzac">
-      Replace synchronisation with lock-free maxBorrowWaitTimeMillis to
-      increase scalability.
-    </action>
-    <action dev="markt" type="fix" issue="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.
-    </action>
-    <action dev="psteitz" type="fix" issue="POOL-270" due-to="Michael Berman">
-      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.
-    </action>
-    <action dev="markt" type="fix" issue="POOL-263">
-      Fix a threading issue that meant that concurrent calls to close() and
-      returnObject() could result in some returned objects not being destroyed.
-    </action>
-    <action dev="psteitz" type="add" issue="POOL-262">
-      Made fairness configurable for GenericObjectPool, GenericKeyedObjectPool.
-    </action>
-    <action dev="markt" type="fix" issue="POOL-261">
-      Correctly mark cglib as an optional dependency and ensure that the OSGi
-      manifest information reflects that.
-    </action>
-    <action dev="markt" type="fix">
-      Improve performance of statistics collection for pools that extend
-      BaseGenericObjectPool.
-    </action>
-    <action dev="psteitz" type="fix" issue="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.
-    </action>
-    <action dev="ggregory" type="update" issue="POOL-273">
-      Update cglib to 3.1 from 3.0.
-    </action>
-    <action dev="ggregory" type="update" issue="POOL-274">
-      Update asm-util to 5.0.3 from 4.0.
-    </action>
-    <action dev="markt" type="fix">
-      Prevent potential memory leaks when the Pool is dereferenced without 
being
-      closed.
-    </action>
-    <action dev="markt" type="fix">
-      Prevent potential memory leaks with using an Evictor in a container
-      environment.
-    </action>
-    <action dev="markt" type="fix">
-      Protect against a user provided eviction policy throwing an exception and
-      stopping the Evictor thread.
-    </action>
-    <action dev="markt" type="fix">
-      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.
-    </action>
-    <action dev="markt" type="fix" issue="POOL-281">
-      Fix a potential infinite loop in the underlying Deque implementation.
-    </action>
-  </release>
-  <release version="2.2" date="2014-02-24" description=
-"This is a maintenance release that adds a new testOnCreate configuration 
option
-and fixes a small number of bugs.">
-    <action issue="POOL-248" dev="markt" type="fix" due-to="Warren Chen">
-      Ensure that if an attempt is made to return an object multiple times that
-      the current active and idle object counts are not corrupted.
-    </action>
-    <action issue="POOL-249" dev="markt" type="fix" due-to="Ville Skyttä">
-      Fix Javadoc issues when building docs with Java 8.
-    </action>
-    <action dev="markt" type="fix">
-      Fix the remaining Javadoc warnings.
-    </action>
-    <action dev="markt" type="add">
-      Add a new validation configuration option testOnCreate that tests an
-      object immediately after it is created.
-    </action>
-  </release>
-   <release version="2.1" date="2013-12-30" description=
-"This is a maintenance release that includes a small number of new features as 
well as 
-including bugfixes and test case improvements.">
-    <action issue="POOL-243" dev="psteitz" type="fix" due-to="Michal Sabo">
-      Added missing create counter decrement in GenericKeyedObjectPool create 
method on factory
-      exception path. Prior to this fix, exceptions thrown by factory 
makeObject calls could leak
-      per key capacity.
-    </action>
-    <action issue="POOL-240" dev="psteitz" type="fix" due-to="Dan McNulty">
-      Ensured that blocked threads waiting on a depleted pool get served when
-      objects are destroyed due to validation or passivation failures in
-      returnObject or when a checked out instance is invalidated.
-    </action>
-    <action issue="POOL-241" dev="markt" type="add" due-to="Bruno P. 
Kinoshita">
-      Expand the coverage of the unit tests.
-    </action>
-    <action dev="markt" type="add">
-      Provide more control over the names under which Pools are registered in
-      JMX so components using the pools can register the pools they use under a
-      related name.
-    </action>
-    <action dev="markt" type="add">
-      Include the number of times an object has been borrowed from the Pool 
when
-      the DefaultPooledObject wrapper is used and expose this property via JMX.
-    </action>
-    <action issue="POOL-245" dev="markt" type="fix" due-to="Bruno P. 
Kinoshita">
-      Remove a duplicate null check and fix some typos in PoolUtils.
-    </action>
-    <action issue="POOL-246" dev="markt" type="fix" due-to="Bruno P. 
Kinoshita">
-      Make the toString() method of ErodingKeyedObjectPool consistent with the
-      other pools.
-    </action>
-    <action issue="POOL-245" dev="markt" type="add" due-to="Bruno P. 
Kinoshita">
-      Further expansion of the coverage of the unit tests.
-    </action>
-  </release>
-  <release version="2.0" date="2013-11-11" description=
-"This is a major new release that provides significant performance improvements
-in high concurrency environments. Pools now provide a mechanism for tracking
-objects that have been borrowed from the pool but not returned. There have been
-numerous API changes to support these and other new features as well as to
-clarify behaviour and improve consistency across the API. This release requires
-JDK level 1.6 or above.">
-    <action issue="POOL-211" dev="markt" type="add" due-to="Brad Koehn">
-      Add support for proxy wrappers to ObjectPool and KeyedObjectPool. The
-      primary advantage of these wrappers is that use of pooled objects is
-      prevented after they have been returned to the pool.
-    </action>
-    <action issue="POOL-229" dev="psteitz" type="update">
-      Added abandoned object removal (moved from DBCP) to GenericObjectPool.
-    </action>
-    <action issue="POOL-221" dev="markt" type="fix" >
-      PooledObject.state does not need to be volatile
-    </action>
-    <action issue="POOL-220" dev="markt" type="fix">
-      Suppress a FindBugs warning
-    </action>
-    <action issue="POOL-217" dev="markt" type="update"  due-to="sebb">
-      Use an IODH for PoolUtils.MIN_IDLE_TIMER
-    </action>
-    <action issue="POOL-216" dev="markt" type="update" >
-      GenericKeyedObjectPool.ensureMinIdle(K) does not need to check 
getMinIdlePerKey().
-    </action>
-    <action issue="POOL-215" dev="markt" type="fix" >
-      GenericKeyedObjectPool - multiple mutable fields not published safely.
-    </action>
-    <action issue="POOL-214" dev="markt" type="fix" >
-      GenericObjectPool.evictionPolicy not thread-safe
-    </action>
-    <action issue="POOL-212" dev="markt" type="fix" >
-      GenericObjectPool allows maxIdle &lt; minIdle
-    </action>
-    <action issue="POOL-207" dev="markt" type="fix" >
-      GenericKeyedObjectPool.clear() has unnecessary null check of 
objectDequeue
-    </action>
-    <action issue="POOL-201" dev="markt" type="fix" >
-      Classes Generic[Keyed]ObjectPoolConfig are generic - but why? 
-    </action>
-    <action issue="POOL-200" dev="markt" type="fix" >
-      GOP/GKOP don't consistently use getters to access fields
-    </action>
-    <action issue="POOL-199" dev="markt" type="fix" >
-      GOP/GKOP evict() method is not synchronised and is not thread-safe
-    </action>
-    <action issue="POOL-197" dev="markt" type="fix" >
-      PooledObject: risky init of lastBorrowTime &amp; lastReturnTime
-    </action>
-    <action issue="POOL-196" dev="markt" type="fix" >
-      PooledObject.getActiveTimeMillis() does not synch. access to 
lastReturnTime and lastBorrowTime
-    </action>
-    <action issue="POOL-194" dev="simonetripodi" type="update" 
date="2011-12-12">
-      Replace synchronized blocks in PoolUtils with Read/Write locks.
-    </action>
-    <action issue="POOL-83" dev="simonetripodi" type="update" 
date="2011-04-28">
-      Support Java 1.5 Generics.
-    </action>
-    <action issue="POOL-186" dev="simonetripodi" type="update" 
date="2011-04-28">
-      Developer documentation and examples have to be updated once the 2.0 
repackaging has been done
-    </action>
-    <action dev="markt" type="update">
-      Switch GOP to use a pooling mechanism based on java.util.concurrent and a
-      LinkedBlockingQueue implementation from Apache Harmony (originally by 
Doug
-      Lea and the JSR-166 expert group).
-    </action>
-    <action dev="markt" type="update">
-      Make deprecated protected attributes private, requiring that access is 
via
-      the appropriate getters. 
-    </action>
-    <action dev="markt" type="update">
-      Code clean-up. Add missing @Override annotations, remove unused code,
-      remove deprecated code and unnecessary code.
-    </action>
-    <action dev="markt" type="update">
-      Introduce an Enum (WhenExhaustedAction) to control pool behaviour when no
-      more objects are available to allocate.
-    </action>
-    <action dev="markt" type="update">
-      Remove WhenExhuastedAction.GROW since it is equivalent to
-      WhenExhuastedAction.FAIL with a maxActive value of Integer.MAX_VALUE. 
-    </action>
-    <action issue="POOL-188" dev="markt" type="fix" due-to="sebb">
-      Remove confusing method PoolUtils.ErodingKeyedObjectPool.numIdle(K key).
-    </action>
-    <action issue="POOL-155" dev="markt" type="update">
-      Guard against multiple returns of the same object to the pool and ensure
-      that only objects borrowed from the pool are returned to it.
-    </action>
-    <action issue="POOL-150" dev="markt" type="fix">
-      Ensure GKOP.preparePool() throws an exception if no factory has been
-      defined.
-    </action>
-    <action issue="POOL-134" dev="markt" type="fix">
-      Add the ability to specify a per call wait time when borrowing an object.
-    </action>
-    <action issue="POOL-121" dev="markt" type="fix">
-      Provide a name for the eviction timer thread.
-    </action>
-    <action dev="markt" type="update">
-      Remove setFactory() method from GOP.
-    </action>
-    <action issue="POOL-173" dev="markt" type="fix">
-      Reduce duplication in configuration code.
-    </action>
-    <action issue="POOL-178" dev="markt" type="fix">
-      Re-factor common code into common base classes.
-    </action>
-    <action issue="POOL-172" dev="markt" type="update">
-      Expose GOP and GKOP attributes via JMX.
-    </action>
-    <action issue="POOL-98" dev="markt" type="update">
-      Add additional attributes (also accessible via JMX) for monitoring.
-    </action>
-    <action dev="markt" type="update">
-      Change meaning of zero for maxWait to a maximum wait of zero milliseconds
-      rather than the unexpected infinite wait.
-    </action>
-    <action issue="POOL-100" dev="markt" type="fix">
-      Allow custom eviction policies to be defined.
-    </action>
-    <action issue="POOL-211" dev="markt" type="add" due-to="Brad Koehn">
-      Add support for proxy wrappers for ObjectPool and KeyedObjectPool. The
-      primary advantage of using these wrappers is that use of pooled objects
-      is prevented after they have been returned to the pool.  
-    </action>
-  </release>
-  <release version="1.6" date="2012-01-07" description="Adds generics and 
requires Java 5.">
-    <action dev="ggregory" type="add" issue="POOL-208">
-      Support Java 1.5 Generics in version 1.x.
-    </action>
-  </release>
-  <release version="1.5.7" date="2011-12-20" description="This is a patch 
release, including bugfixes only.">
-    <action dev="psteitz" type="fix" issue="POOL-189" due-to="Bill Speirs">
-      Awaken threads waiting on borrowObject when a pool has been closed and 
have them throw
-      IllegalStateException.  Prior to the fix for this issue, threads waiting 
in borrowObject when
-      close was invoked on GOP or GKOP would block indefinitely.
-    </action>
-    <action dev="psteitz" type="fix" issue="POOL-192" due-to="Helge 
Dannenberg">
-      Corrected total internal processing counter update in destroy.  Prior to 
the fix
-      for this issue, clear(key) was leaking capacity associated with elements 
in the
-      pool being cleared.
-    </action>
-  </release>
-  <release version="1.5.6" date="2011-04-03" description="This is a patch 
release, including bugfixes only.">
-    <action dev="markt" type="fix" issue="POOL-179" due-to="Axel Grossmann">
-      Correctly handle an InterruptedException when waiting for an object from
-      the pool.
-    </action>
-    <action dev="markt" type="fix" issue="POOL-180">
-      Only stop tracking objects for a key when there are no idle objects, no
-      active objects and no objects being processed.
-    </action>
-    <action dev="markt" type="update" issue="POOL-181">
-      Make BaseObjectPool.isClosed() public.
-    </action>
-    <action dev="markt" type="fix" issue="POOL-184" due-to="Adrian Nistor">
-      Correct bug that could lead to inappropriate pool starvation when evict()
-      and borrowObject() are called concurrently.
-    </action>
-    <action dev="markt" type="fix" due-to="psteitz">
-      Fix performance issues when object destruction has latency.
-    </action>
-  </release>
-  <release version="1.5.5" date="2010-09-10" description=
-     "This is a patch release, including bugfixes, documentation improvements 
and some deprecations
-      in preparation for pool 2.0.">
-    <action dev="psteitz" type="update" issue="POOL-169">
-      In preparation for pool 2.0, deprecated direct access to protected fields
-      and setFactory methods.  In pool 2.0, pool object factories will be 
immutable.
-    </action>
-    <action dev="psteitz" type="fix" issue="POOL-158">
-      Made GenericKeyedObjectPool._minIdle volatile.
-    </action>
-    <action dev="markt" type="fix" issue="POOL-161">
-      Made the default context class loader for the eviction thread the same 
loader that loads
-      the library to prevent memory leaks in multiple class loader 
environments.
-    </action>
-    <action dev="sebb" type="update" issue="POOL-166">
-      GenericKeyedObjectPool.destroy could use entrySet() rather than keySet() 
followed by get()
-    </action>
-    <action dev="psteitz" type="fix" issue="POOL-157" due-to="David Hu">
-      GenericObjectPool and GenericKeyedObjectPool setFactory methods destroy 
idle instances
-      in the pool by contract. Prior to the fix for this issue, newly set 
factories were being
-      used to destroy idle instances, rather than the factories used to create 
them.  The 
-      setFactory methods have also been deprecated, to be removed in version 
2.0.
-    </action>
-    <action dev="sebb" type="update" issue="POOL-156">
-      ObjectPool classes can ignore Throwable. Added consistent handling for 
Throwables
-      that are normally swallowed including always re-throwing certain 
Throwables (e.g. ThreadDeath).
-    </action>
-    <action dev="markt" type="fix" issue="POOL-162">
-      When waiting threads are interrupted, GOP, GKOP may leak capacity.
-    </action>
-    <action dev="psteitz" type="fix" issue="POOL-154" due-to="Glen Mazza">
-      Documentation for the close method in GenericObjectPool and 
GenericKeyedObjectPool
-      incorrectly states that this method does not clear the pool.
-    </action>
-  </release>
-  <release version="1.5.4" date="2009-11-20" description=
- "This is a patch release containing a fix for POOL-152, a regression
-introduced in version 1.5.">
-    <action dev="markt" type="fix" issue="POOL-152" due-to="Bushov Alexander">
-      GenericObjectPool can block forever in borrowObject when the pool is 
exhausted and a newly created
-      object fails validation. When borrowing an object if a new object is 
created but validate fails,
-      the latch should not be returned to the queue as an exception will be 
thrown.
-    </action>
-  </release>
-  <release version="1.5.3" date="2009-09-21" description=
-"This is a patch release containing a fix for POOL-149, a regression
-introduced in version 1.5.">
-    <action dev="markt" type="fix" issue="POOL-149" due-to="Shuyang Zhou">
-      Fix case where a thread could end up waiting indefinitely even if objects
-      were available. Also fixes a couple of leaks in the internal processing
-      object count that could lead to pool exhaustion.
-    </action>
-  </release>
-  <release version="1.5.2" date="2009-07-12" description=
-"This is a patch release containing fixes for POOL-146 and POOL-147, 
regressions
-introduced in version 1.5.">
-    <action dev="markt" type="fix" issue="POOL-146">
-      Handle the case where one key has reached maxActive but other keys have 
not.
-      Prior to the fix for this issue, threads waiting on objects from keyed 
pools
-      still having instances available could be blocked by a thread requesting 
an
-      instance from an exhausted pool.
-    </action>
-    <action dev="markt" type="fix" issue="POOL-147" due-to="Giambattista 
Bloisi">
-      Fix case where a thread could end up waiting indefinitely even if objects
-      were available.
-    </action>
-    <action dev="markt" type="fix" issue="POOL-145">
-      Ensure that the GenericKeyedObjectPool idle object evictor does not 
visit the
-      same instance more than once per eviction run.
-    </action>
-  </release>
-  <release version="1.5.1" date="2009-06-16" description=
-"This is a patch release containing a fix for POOL-144, a regression introduced
-in version 1.5.">
-    <action dev="markt" type="fix" issue="POOL-144">
-      When exhausted action is set to WHEN_EXHAUSTED_BLOCK, maxwait is 
positive and
-      client threads time out waiting for idle objects, capacity can be 
"leaked"
-      from GenericObjectPools and GeneritCkeyedObjectPools. 
-    </action>
-  </release>
-  <release version="1.5" date="2009-06-10" description=
-"This is a maintenance release including several important bug fixes. This 
release
-is source and binary compatible with versions 1.3 and 1.4 of commons pool. In 
addition
-to resolving some important concurrency-related bugs (POOL-135, POOL-125, 
POOL-29
-POOL-107) this release implements a fairness algorithm to ensure that threads 
waiting
-for available object instances from GenericObjectPools and 
GenericKeyedObjectPools are served
-in request arrival order.">
-    <action dev="markt" type="fix" issue="POOL-139" due-to="Sebastian Bazley">
-      StackKeyedObjectPool.getNumActive() needs to be synchronized.
-    </action>
-    <action dev="markt" type="fix" issue="POOL-137" due-to="Sebastian Bazley">
-      Inconsistent synchronization in GenericObjectPool; constant fields 
should be final.
-    </action>
-    <action dev="markt" type="fix" issue="POOL-75" due-to="Takayuki Kaneko and 
Gordon Mohr">
-       GenericObjectPool not FIFO with respect to borrowing threads.
-    </action>
-    <action dev="markt" type="fix" issue="POOL-135">
-      _numActive > _maxActive under load
-    </action>
-    <action dev="markt" type="fix" issue="POOL-125">
-      Insufficient control over concurrent access to pooled objects by 
Evictor, client threads.
-    </action>
-    <action dev="markt" type="fix" issue="POOL-107">
-      Number of connections created has crossed more than maxActive.
-    </action>
-    <action dev="markt" type="fix" issue="POOL-122">
-      java.util.Timer in EvictionTimer does not recover from OutOfMemoryError 
in Evictor.
-    </action>
-    <action dev="markt" type="fix" issue="POOL-133">
-      Failed object creation may result in invalid active count in GKOP.
-    </action>
-  </release>
-  <release version="1.4" date="2008-01-15" description=
-"This is a maintenance release including numerous bug fixes. This release
-is source and binary compatible with version 1.3 of commons pool, but
-there are some behavior changes introduced to resolve bugs, remove ambiguity
-or improve robustness. Among these are the change in default behavior of
-GenericObjectPool and GenericKeyedObjectPool from FIFO back to LIFO queues
-(as in 1.2 and earlier). The LIFO/FIFO behavior is now configurable. Some of
-the extra synchronization included in version 1.3 was removed / refactored to
-improve performance. The javadoc has also been made more complete and explicit.
-See the detailed list of changes below for specifics on fixed bugs and behavior
-changes in Commons Pool 1.4. This version of Commons Pool depends only on
-JDK version 1.3 or higher. Classes implementing pools are all intended to be
-threadsafe.">
-      <action dev="sandymac" type="fix">
-        Fixed constructor which was ignoring maxTotal parameter: 
-          GenericKeyedObjectPool(KeyedPoolableObjectFactory factory, int 
maxActive, byte whenExhaustedAction,
-          long maxWait, int maxIdle, int maxTotal, boolean testOnBorrow, 
boolean testOnReturn,
-          long timeBetweenEvictionRunsMillis, int numTestsPerEvictionRun, long 
minEvictableIdleTimeMillis,
-          boolean testWhileIdle)
-      </action>
-      <action dev="sandymac" type="fix">
-        Changed StackKeyedObjectPool to discard stalest, not freshest, idle 
object when maxSleeping is reached.
-      </action>
-      <action dev="psteitz" type="fix" issue="POOL-102" due-to="John Sumsion">
-        Allowed blocked threads in GenericObjectPool borrowObject to be 
interrupted.
-      </action>
-      <action dev="psteitz" type="fix" issue="POOL-86">
-        Fixes to address idle object eviction and LIFO/FIFO behavior reported
-        in POOL-86. Made LIFO/FIFO behavior configurable for GenericObjectPool 
and
-        GenericKeyedObjectPool, with default set back to LIFO (reverting to 
1.2 behavior).
-        Fixed GOP, GKOP evict method and added tests to ensure objects are 
visited in
-        oldest-to-youngest order. Changed backing store for GOP, GKOP pools 
back to Commons
-        Collections CursorableLinkedList (brought this class in, repackaged 
with package scope).
-      </action>
-      <action dev="psteitz" type="fix" issue="POOL-110" due-to="Alexander 
Pogrebnyak">
-        Changed the default setting for Config.softMinEvictableIdleTimeMillis 
to
-        GenericObjectPool.DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME_MILLIS (was
-        being incorrectly defaulted to DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS).
-      </action>
-      <action dev="psteitz" type="fix" issue="POOL-97" due-to="Mark Thomas">
-         Added a wrapper for the shared idle object eviction timer for all
-         pools. The wrapper class wraps the Timer and keeps track of how many
-         pools are using it. If no pools are using the timer, it is canceled.
-         This prevents a thread being left running which, in application server
-         environments, can lead to memory leaks and/or prevent applications
-         from shutting down or reloading cleanly.
-      </action>
-      <action dev="psteitz" type="fix" issue="POOL-93"  
-      due-to="Mark Thomas">
-        Reduced synchronization in GenericObjectPool, GenericKeyedObjectPool.
-        Factory method activations within synchronized blocks were causing
-        performance problems in DBCP and other applications where factory
-        methods could block. Fixes both POOL-93 and POOL-108.
-      </action>
-      <action dev="psteitz" type="fix" issue="POOL-113">
-        Made _testOnBorrow, _testOnReturn volatile and removed synchronization
-        in associated getters and setters in GenericObjectPool,
-        GenericKeyedObjectPool. Made getNumIdle synchronized in
-        StackKeyedObjectPool. 
-      </action>
-      <action dev="psteitz" type="fix" issue="POOL-116">
-        Fixed an error in the GenericKeyedObjectPool constructor that takes
-        a Config instance as a parameter. The minIdle setting in the Config
-        was being ignored by the constructor.
-      </action>
-      <action def="psteitz" type="fix" issue="POOL-117">
-        Made behavior on instance validation failure consistent across pools,
-        eliminating possible infinite loops in StackObjectPool,
-        StackKeyedObjectPool, SoftReferenceObjectPool when factory fails to
-        create valid objects. 
-      </action>
-      <action dev="sandymac" type="update">
-        When no factory has been defined, addObject now throws 
-        IllegalStateExecption instead of NullPointerException for all pools.
-      </action>
-      <action dev="sandymac" type="update">
-        SoftReferenceObjectPool. Improved the accuracy of getNumIdle by
-        "pruning" references to objects that have been garbage collected.
-      </action>
-      <action dev="sandymac" type="update">
-        GenericObjectPool, GenericKeyedObjectPool, SoftReferenceObjectPool,
-        StackObjectPool. Eliminated IllegalStateExceptions when the following
-        operations are attempted on a closed pool: getNumActive, getNumIdle, 
-        returnObject, invalidateObject.  In each case, the operation is allowed
-        to proceed, reporting the state of the pool that is being shut down, or
-        destroying objects returning to the closed pool.
-      </action>
-      <action dev="sandymac" type="update">
-        StackObjectPool, SoftReferenceObjectPool, GenericKeyedObjectPool. 
Allowed
-        borrowObject to continue (either examining additional idle instances or
-        with makeObject) when an exception is encountered activating an idle
-        object instead of propagating the exception to the client.  Also made
-        addObject propagate (not swallow) exceptions when passivating newly
-        created instances. 
-      </action>
-      <action dev="psteitz" type="update">
-        StackKeyedObjectPool. Added validation check for objects returned
-        from borrowObject. 
-      </action>
-      <action dev="sandymac" type="update">
-        BaseObjectPool, BaseKeyedObjectPool. Instead of throwing 
-        UnsupportedOperationException, the base class implementations
-        of getNumIdle and getNumActive return negative values. The
-        base implementation of close in BaseObjectPool no longer throws
-        IllegalStateException when invoked on an already closed pool.
-      </action>
-      
-    </release>
-
-    <release version="1.3" date="2006-04-06" description="1.x bugfix release">
-      <action type="fix">A large number of bug fixes. See release notes for 
changes.</action>
-    </release>
-
-    <release version="1.2" date="2004-06-07" description="bugfixes">
-      <action dev="dirkv" type="fix">
-           GenericKeyedObjectPoolFactory Config Constructor is incorrect
-      </action>
-      <action dev="dirkv" type="fix">
-        Not possible to extend GenericObjectPool.returnObject() without 
affecting addObject()
-      </action>
-    </release>
-
-    <release version="1.1" date="2003-10-20" description="bugfixes">
-      <action type="fix">A lot of corner cases were fixed</action>
-      <action type="fix">Performance improvement by optimizing pool 
synchronization, the critical code paths were optimized by reducing pool 
synchronization but we also added more synchronization where needed</action>
-      <action type="fix">New minIdle feature: the minimum number of objects 
allowed in the pool before the evictor thread (if active) spawns new objects. 
(Note no objects are created when: numActive + numIdle >= maxActive)</action>
-      <action type="fix">New maxTotal feature: a cap on the total number of 
instances controlled by a pool. Only for GenericKeyedObjectPool where maxActive 
is a cap on the number of active instances from the pool (per key).</action>
-      <action type="fix">UML Class and sequence diagrams</action>
-      <action type="fix">See bugzilla for more changes</action>
-    </release>
-
-    <release version="1.0.1" date="2002-08-12">
-      <action type="fix">No change log available.</action>
-    </release>
-
-    <release version="1.0" date="2002-05-04">
-      <action type="add">No change log available.</action>
-    </release>
-  </body>
-</document>
+<?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 also 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 JIRA search for tickets closed since the previous release.
+
+3.  Use the report generated by the maven-changelog-plugin to see all
+SVN commits. TBA how to use this with SVN.
+
+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>
+  <properties>
+    <title>Apache Commons Pool Changes</title>
+  </properties>
+  <body>
+  <release version="2.5.0" date="2017-12-16" description="This is a minor 
release, updating to Java 7.">
+    <action dev="ggregory" issue="POOL-331" type="update">
+      Update from Java 6 to 7.
+    </action>
+    <action dev="ggregory" issue="POOL-330" type="delete">
+      Drop Ant build.
+    </action>
+    <action dev="ggregory" issue="POOL-332" type="add">
+      ObjectPool and KeyedObject pool should extend Closeable.
+    </action>
+    <action dev="ggregory" issue="POOL-333" type="update">
+      Update optional dependency asm-util from 5.2 to 6.0.
+    </action>
+    <action dev="ggregory" issue="POOL-334" type="update">
+      org.apache.commons.pool2.impl.ThrowableCallStack.Snapshot is missing 
serialVersionUID.
+    </action>
+    <action dev="mattsicker" issue="POOL-335" type="add">
+      Make abandoned logging stack trace requirements configurable. This also 
reverts
+      the default behavior introduced by POOL-320.
+    </action>
+  </release>
+  <release version="2.4.3" date="2017-10-24" description="This is a patch 
release, including bug fixes only.">
+    <action dev="ggregory" issue="POOL-328" type="fix" due-to="Lorenzo Solano 
Martinez">
+      Documentation with repeated words (sources, tests, and examples).
+    </action>
+    <action dev="ggregory" issue="POOL-317" type="fix" due-to="KeiichiFujino">
+      Correction of default value of softMinEvictableIdleTimeMillis in 
BaseObjectPoolConfig.
+    </action>
+    <action dev="ggregory" issue="POOL-309" type="fix" due-to="jolestar, 
Roopam Patekar">
+      Fix misspellings from "destory" to "destroy".
+    </action>
+    <action dev="markt" issue="POOL-306" type="fix" due-to="Adrian Crum">
+      Ensure BaseGenericObjectPool.IdentityWrapper#equals() follows the 
expected
+      contract for equals(). 
+    </action>
+    <action dev="markt" issue="POOL-303" type="fix">
+      Ensure that threads do not block indefinitely if more than maxTotal
+      threads try to borrow an object at the same time and the factory fails to
+      create any objects. 
+    </action>
+    <action dev="markt" issue="POOL-280" type="update" due-to="Jacopo 
Cappellato">
+      Small refactoring of borrowObject() to reduce code duplication.
+    </action>
+    <action dev="markt" issue="POOL-307" type="update" due-to="Anthony 
Whitford">
+      Replace inefficient use of keySet with entrySet in GKOP.
+    </action>
+    <action dev="markt" issue="POOL-310" type="fix" due-to="Ivan Iliev">
+      Ensure that threads using GKOP do not block indefinitely if more than
+      maxTotal threads try to borrow objects with different keys at the same
+      time and the factory destroys objects on return. 
+    </action>
+    <action dev="markt" type="fix">
+      Ensure that any class name used for evictionPolicyClassName represents a
+      class that implements EvictionPolicy.
+    </action>
+    <action dev="markt" issue="POOL-315" type="fix" due-to="KeiichiFujino">
+      Add a configurable delay (default 10 seconds) to wait when shutting down
+      an Evictor to allow the associated thread time to complete and current
+      evictions and to terminate.
+    </action>
+    <action dev="markt" type="fix">
+      Ensure that a call to GKOP preparePool() takes account of other threads
+      that might create objects concurrently, particularly the Evictor.
+    </action>
+    <action dev="mattsicker" issue="POOL-320" type="add">
+      Use more efficient stack walking mechanisms for usage tracking when 
possible.
+    </action>
+    <action dev="ggregory" issue="POOL-322" type="update">
+      Update optional cglib library from 3.1 to 3.2.5.
+    </action>
+    <action dev="ggregory" issue="POOL-323" type="update">
+      Update optional OW2 ASM from 5.0.4 to 5.2.
+    </action>
+  </release>
+  <release version="2.4.2" date="2015-08-01" description=
+ "This is a patch release, including bug fixes only.">
+    <action dev="psteitz" issue="POOL-298" type="fix">
+      Changed default jmxNameBase in BaseObjectPoolConfig to the correct (null)
+      default.
+    </action>
+    <action dev="psteitz" issue="POOL-300" type="fix">
+      Added PrintWriter flush to DefaultPooledObject's printStackTrace method.
+    </action>
+  </release>
+  <release version="2.4.1" date="2015-05-30" description=
+ "This is a patch release, replacing a defective binary jar in version 2.4. 
Other
+than the build configuration, the source distribution for version 2.4.1 is 
identical
+to version 2.4.">
+    <action dev="psteitz" issue="POOL-297" type="fix">
+      Reverted cobertura plugin update that caused binary jar corruption.
+    </action>
+  </release>
+  <release version="2.4" date="2015-05-27" description=
+ "This is a maintenance release that includes bug fixes and minor 
enhancements.">
+    <action dev="psteitz" type="fix" issue="POOL-287" due-to="Caleb Spare and 
Thomas Neidhart">
+      Fixed capacity leak when an object is offered from a 
GenericKeyedObjectPool while it is
+      being validated by the evictor. 
+    </action>
+    <action dev="psteitz" type="fix" issue="POOL-283">
+      Eliminated the requirement that objects managed by GenericObjectPool or
+      GenericKeyedObjectPool be discernible by equals.  Prior to this fix,
+      equal but distinct object instances could not be stored in the same pool.
+    </action>
+    <action dev="psteitz" type="fix" issue="POOL-284">
+      Eliminated the requirement that object equality and hashcodes do not 
change
+      while objects are under management by GenericObjectPool or 
GenericKeyedObjectPool.
+    </action>
+    <action dev="markt" type="fix" issue="POOL-289" due-to="Luke Winkenbach">
+      Fixed class loading for custom EvictionPolicy implementations that may 
not
+      be present in the class loader hierarchy of the Pool classes by falling
+      back to the class loader of the current class.
+    </action>
+    <action dev="psteitz" type="fix" issue="POOL-285">
+      Ensured that when an instance that has already been returned to a pool is
+      returned again, the expected IllegalStateException is generated before 
the
+      returning object is re-validated or re-passivated.
+    </action>
+    <action dev="psteitz" type="add" issue="POOL-286">
+      Added preparePool method to GenericObjectPool.
+    </action>
+    <action dev="ggregory" type="update" issue="POOL-296">
+      Update asm-util from 5.0.3 to 5.0.4.
+    </action>
+    <action dev="psteitz" type="update" issue="POOL-293">
+      Exposed getEvictionPolicy as protected in BaseGenericObjectPool.
+    </action>
+  </release>
+  <release version="2.3" date="2014-12-30" description=
+"This is a maintenance release that includes bug fixes and minor 
enhancements.">  
+    <action dev="psteitz" type="fix" issue="POOL-279" due-to="Jacopo 
Cappellato">
+      Eliminated possibility that DefaultPoolObject#getIdleTimeMillis() could
+      return a negative value. Use by pool implementations would not hit this
+      bug. 
+    </action>
+    <action dev="psteitz" type="fix" issue="POOL-275">
+      Made wrapped BaseProxyHandler.pooledObject volatile.
+    </action>
+    <action dev="ecki" type="fix" issue="POOL-277" due-to="Lucas Pouzac">
+      Replace synchronisation with lock-free maxBorrowWaitTimeMillis to
+      increase scalability.
+    </action>
+    <action dev="markt" type="fix" issue="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.
+    </action>
+    <action dev="psteitz" type="fix" issue="POOL-270" due-to="Michael Berman">
+      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.
+    </action>
+    <action dev="markt" type="fix" issue="POOL-263">
+      Fix a threading issue that meant that concurrent calls to close() and
+      returnObject() could result in some returned objects not being destroyed.
+    </action>
+    <action dev="psteitz" type="add" issue="POOL-262">
+      Made fairness configurable for GenericObjectPool, GenericKeyedObjectPool.
+    </action>
+    <action dev="markt" type="fix" issue="POOL-261">
+      Correctly mark cglib as an optional dependency and ensure that the OSGi
+      manifest information reflects that.
+    </action>
+    <action dev="markt" type="fix">
+      Improve performance of statistics collection for pools that extend
+      BaseGenericObjectPool.
+    </action>
+    <action dev="psteitz" type="fix" issue="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.
+    </action>
+    <action dev="ggregory" type="update" issue="POOL-273">
+      Update cglib to 3.1 from 3.0.
+    </action>
+    <action dev="ggregory" type="update" issue="POOL-274">
+      Update asm-util to 5.0.3 from 4.0.
+    </action>
+    <action dev="markt" type="fix">
+      Prevent potential memory leaks when the Pool is dereferenced without 
being
+      closed.
+    </action>
+    <action dev="markt" type="fix">
+      Prevent potential memory leaks with using an Evictor in a container
+      environment.
+    </action>
+    <action dev="markt" type="fix">
+      Protect against a user provided eviction policy throwing an exception and
+      stopping the Evictor thread.
+    </action>
+    <action dev="markt" type="fix">
+      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.
+    </action>
+    <action dev="markt" type="fix" issue="POOL-281">
+      Fix a potential infinite loop in the underlying Deque implementation.
+    </action>
+  </release>
+  <release version="2.2" date="2014-02-24" description=
+"This is a maintenance release that adds a new testOnCreate configuration 
option
+and fixes a small number of bugs.">
+    <action issue="POOL-248" dev="markt" type="fix" due-to="Warren Chen">
+      Ensure that if an attempt is made to return an object multiple times that
+      the current active and idle object counts are not corrupted.
+    </action>
+    <action issue="POOL-249" dev="markt" type="fix" due-to="Ville Skyttä">
+      Fix Javadoc issues when building docs with Java 8.
+    </action>
+    <action dev="markt" type="fix">
+      Fix the remaining Javadoc warnings.
+    </action>
+    <action dev="markt" type="add">
+      Add a new validation configuration option testOnCreate that tests an
+      object immediately after it is created.
+    </action>
+  </release>
+   <release version="2.1" date="2013-12-30" description=
+"This is a maintenance release that includes a small number of new features as 
well as 
+including bugfixes and test case improvements.">
+    <action issue="POOL-243" dev="psteitz" type="fix" due-to="Michal Sabo">
+      Added missing create counter decrement in GenericKeyedObjectPool create 
method on factory
+      exception path. Prior to this fix, exceptions thrown by factory 
makeObject calls could leak
+      per key capacity.
+    </action>
+    <action issue="POOL-240" dev="psteitz" type="fix" due-to="Dan McNulty">
+      Ensured that blocked threads waiting on a depleted pool get served when
+      objects are destroyed due to validation or passivation failures in
+      returnObject or when a checked out instance is invalidated.
+    </action>
+    <action issue="POOL-241" dev="markt" type="add" due-to="Bruno P. 
Kinoshita">
+      Expand the coverage of the unit tests.
+    </action>
+    <action dev="markt" type="add">
+      Provide more control over the names under which Pools are registered in
+      JMX so components using the pools can register the pools they use under a
+      related name.
+    </action>
+    <action dev="markt" type="add">
+      Include the number of times an object has been borrowed from the Pool 
when
+      the DefaultPooledObject wrapper is used and expose this property via JMX.
+    </action>
+    <action issue="POOL-245" dev="markt" type="fix" due-to="Bruno P. 
Kinoshita">
+      Remove a duplicate null check and fix some typos in PoolUtils.
+    </action>
+    <action issue="POOL-246" dev="markt" type="fix" due-to="Bruno P. 
Kinoshita">
+      Make the toString() method of ErodingKeyedObjectPool consistent with the
+      other pools.
+    </action>
+    <action issue="POOL-245" dev="markt" type="add" due-to="Bruno P. 
Kinoshita">
+      Further expansion of the coverage of the unit tests.
+    </action>
+  </release>
+  <release version="2.0" date="2013-11-11" description=
+"This is a major new release that provides significant performance improvements
+in high concurrency environments. Pools now provide a mechanism for tracking
+objects that have been borrowed from the pool but not returned. There have been
+numerous API changes to support these and other new features as well as to
+clarify behaviour and improve consistency across the API. This release requires
+JDK level 1.6 or above.">
+    <action issue="POOL-211" dev="markt" type="add" due-to="Brad Koehn">
+      Add support for proxy wrappers to ObjectPool and KeyedObjectPool. The
+      primary advantage of these wrappers is that use of pooled objects is
+      prevented after they have been returned to the pool.
+    </action>
+    <action issue="POOL-229" dev="psteitz" type="update">
+      Added abandoned object removal (moved from DBCP) to GenericObjectPool.
+    </action>
+    <action issue="POOL-221" dev="markt" type="fix" >
+      PooledObject.state does not need to be volatile
+    </action>
+    <action issue="POOL-220" dev="markt" type="fix">
+      Suppress a FindBugs warning
+    </action>
+    <action issue="POOL-217" dev="markt" type="update"  due-to="sebb">
+      Use an IODH for PoolUtils.MIN_IDLE_TIMER
+    </action>
+    <action issue="POOL-216" dev="markt" type="update" >
+      GenericKeyedObjectPool.ensureMinIdle(K) does not need to check 
getMinIdlePerKey().
+    </action>
+    <action issue="POOL-215" dev="markt" type="fix" >
+      GenericKeyedObjectPool - multiple mutable fields not published safely.
+    </action>
+    <action issue="POOL-214" dev="markt" type="fix" >
+      GenericObjectPool.evictionPolicy not thread-safe
+    </action>
+    <action issue="POOL-212" dev="markt" type="fix" >
+      GenericObjectPool allows maxIdle &lt; minIdle
+    </action>
+    <action issue="POOL-207" dev="markt" type="fix" >
+      GenericKeyedObjectPool.clear() has unnecessary null check of 
objectDequeue
+    </action>
+    <action issue="POOL-201" dev="markt" type="fix" >
+      Classes Generic[Keyed]ObjectPoolConfig are generic - but why? 
+    </action>
+    <action issue="POOL-200" dev="markt" type="fix" >
+      GOP/GKOP don't consistently use getters to access fields
+    </action>
+    <action issue="POOL-199" dev="markt" type="fix" >
+      GOP/GKOP evict() method is not synchronised and is not thread-safe
+    </action>
+    <action issue="POOL-197" dev="markt" type="fix" >
+      PooledObject: risky init of lastBorrowTime &amp; lastReturnTime
+    </action>
+    <action issue="POOL-196" dev="markt" type="fix" >
+      PooledObject.getActiveTimeMillis() does not synch. access to 
lastReturnTime and lastBorrowTime
+    </action>
+    <action issue="POOL-194" dev="simonetripodi" type="update" 
date="2011-12-12">
+      Replace synchronized blocks in PoolUtils with Read/Write locks.
+    </action>
+    <action issue="POOL-83" dev="simonetripodi" type="update" 
date="2011-04-28">
+      Support Java 1.5 Generics.
+    </action>
+    <action issue="POOL-186" dev="simonetripodi" type="update" 
date="2011-04-28">
+      Developer documentation and examples have to be updated once the 2.0 
repackaging has been done
+    </action>
+    <action dev="markt" type="update">
+      Switch GOP to use a pooling mechanism based on java.util.concurrent and a
+      LinkedBlockingQueue implementation from Apache Harmony (originally by 
Doug
+      Lea and the JSR-166 expert group).
+    </action>
+    <action dev="markt" type="update">
+      Make deprecated protected attributes private, requiring that access is 
via
+      the appropriate getters. 
+    </action>
+    <action dev="markt" type="update">
+      Code clean-up. Add missing @Override annotations, remove unused code,
+      remove deprecated code and unnecessary code.
+    </action>
+    <action dev="markt" type="update">
+      Introduce an Enum (WhenExhaustedAction) to control pool behaviour when no
+      more objects are available to allocate.
+    </action>
+    <action dev="markt" type="update">
+      Remove WhenExhuastedAction.GROW since it is equivalent to
+      WhenExhuastedAction.FAIL with a maxActive value of Integer.MAX_VALUE. 
+    </action>
+    <action issue="POOL-188" dev="markt" type="fix" due-to="sebb">
+      Remove confusing method PoolUtils.ErodingKeyedObjectPool.numIdle(K key).
+    </action>
+    <action issue="POOL-155" dev="markt" type="update">
+      Guard against multiple returns of the same object to the pool and ensure
+      that only objects borrowed from the pool are returned to it.
+    </action>
+    <action issue="POOL-150" dev="markt" type="fix">
+      Ensure GKOP.preparePool() throws an exception if no factory has been
+      defined.
+    </action>
+    <action issue="POOL-134" dev="markt" type="fix">
+      Add the ability to specify a per call wait time when borrowing an object.
+    </action>
+    <action issue="POOL-121" dev="markt" type="fix">
+      Provide a name for the eviction timer thread.
+    </action>
+    <action dev="markt" type="update">
+      Remove setFactory() method from GOP.
+    </action>
+    <action issue="POOL-173" dev="markt" type="fix">
+      Reduce duplication in configuration code.
+    </action>
+    <action issue="POOL-178" dev="markt" type="fix">
+      Re-factor common code into common base classes.
+    </action>
+    <action issue="POOL-172" dev="markt" type="update">
+      Expose GOP and GKOP attributes via JMX.
+    </action>
+    <action issue="POOL-98" dev="markt" type="update">
+      Add additional attributes (also accessible via JMX) for monitoring.
+    </action>
+    <action dev="markt" type="update">
+      Change meaning of zero for maxWait to a maximum wait of zero milliseconds
+      rather than the unexpected infinite wait.
+    </action>
+    <action issue="POOL-100" dev="markt" type="fix">
+      Allow custom eviction policies to be defined.
+    </action>
+    <action issue="POOL-211" dev="markt" type="add" due-to="Brad Koehn">
+      Add support for proxy wrappers for ObjectPool and KeyedObjectPool. The
+      primary advantage of using these wrappers is that use of pooled objects
+      is prevented after they have been returned to the pool.  
+    </action>
+  </release>
+  <release version="1.6" date="2012-01-07" description="Adds generics and 
requires Java 5.">
+    <action dev="ggregory" type="add" issue="POOL-208">
+      Support Java 1.5 Generics in version 1.x.
+    </action>
+  </release>
+  <release version="1.5.7" date="2011-12-20" description="This is a patch 
release, including bugfixes only.">
+    <action dev="psteitz" type="fix" issue="POOL-189" due-to="Bill Speirs">
+      Awaken threads waiting on borrowObject when a pool has been closed and 
have them throw
+      IllegalStateException.  Prior to the fix for this issue, threads waiting 
in borrowObject when
+      close was invoked on GOP or GKOP would block indefinitely.
+    </action>
+    <action dev="psteitz" type="fix" issue="POOL-192" due-to="Helge 
Dannenberg">
+      Corrected total internal processing counter update in destroy.  Prior to 
the fix
+      for this issue, clear(key) was leaking capacity associated with elements 
in the
+      pool being cleared.
+    </action>
+  </release>
+  <release version="1.5.6" date="2011-04-03" description="This is a patch 
release, including bugfixes only.">
+    <action dev="markt" type="fix" issue="POOL-179" due-to="Axel Grossmann">
+      Correctly handle an InterruptedException when waiting for an object from
+      the pool.
+    </action>
+    <action dev="markt" type="fix" issue="POOL-180">
+      Only stop tracking objects for a key when there are no idle objects, no
+      active objects and no objects being processed.
+    </action>
+    <action dev="markt" type="update" issue="POOL-181">
+      Make BaseObjectPool.isClosed() public.
+    </action>
+    <action dev="markt" type="fix" issue="POOL-184" due-to="Adrian Nistor">
+      Correct bug that could lead to inappropriate pool starvation when evict()
+      and borrowObject() are called concurrently.
+    </action>
+    <action dev="markt" type="fix" due-to="psteitz">
+      Fix performance issues when object destruction has latency.
+    </action>
+  </release>
+  <release version="1.5.5" date="2010-09-10" description=
+     "This is a patch release, including bugfixes, documentation improvements 
and some deprecations
+      in preparation for pool 2.0.">
+    <action dev="psteitz" type="update" issue="POOL-169">
+      In preparation for pool 2.0, deprecated direct access to protected fields
+      and setFactory methods.  In pool 2.0, pool object factories will be 
immutable.
+    </action>
+    <action dev="psteitz" type="fix" issue="POOL-158">
+      Made GenericKeyedObjectPool._minIdle volatile.
+    </action>
+    <action dev="markt" type="fix" issue="POOL-161">
+      Made the default context class loader for the eviction thread the same 
loader that loads
+      the library to prevent memory leaks in multiple class loader 
environments.
+    </action>
+    <action dev="sebb" type="update" issue="POOL-166">
+      GenericKeyedObjectPool.destroy could use entrySet() rather than keySet() 
followed by get()
+    </action>
+    <action dev="psteitz" type="fix" issue="POOL-157" due-to="David Hu">
+      GenericObjectPool and GenericKeyedObjectPool setFactory methods destroy 
idle instances
+      in the pool by contract. Prior to the fix for this issue, newly set 
factories were being
+      used to destroy idle instances, rather than the factories used to create 
them.  The 
+      setFactory methods have also been deprecated, to be removed in version 
2.0.
+    </action>
+    <action dev="sebb" type="update" issue="POOL-156">
+      ObjectPool classes can ignore Throwable. Added consistent handling for 
Throwables
+      that are normally swallowed including always re-throwing certain 
Throwables (e.g. ThreadDeath).
+    </action>
+    <action dev="markt" type="fix" issue="POOL-162">
+      When waiting threads are interrupted, GOP, GKOP may leak capacity.
+    </action>
+    <action dev="psteitz" type="fix" issue="POOL-154" due-to="Glen Mazza">
+      Documentation for the close method in GenericObjectPool and 
GenericKeyedObjectPool
+      incorrectly states that this method does not clear the pool.
+    </action>
+  </release>
+  <release version="1.5.4" date="2009-11-20" description=
+ "This is a patch release containing a fix for POOL-152, a regression
+introduced in version 1.5.">
+    <action dev="markt" type="fix" issue="POOL-152" due-to="Bushov Alexander">
+      GenericObjectPool can block forever in borrowObject when the pool is 
exhausted and a newly created
+      object fails validation. When borrowing an object if a new object is 
created but validate fails,
+      the latch should not be returned to the queue as an exception will be 
thrown.
+    </action>
+  </release>
+  <release version="1.5.3" date="2009-09-21" description=
+"This is a patch release containing a fix for POOL-149, a regression
+introduced in version 1.5.">
+    <action dev="markt" type="fix" issue="POOL-149" due-to="Shuyang Zhou">
+      Fix case where a thread could end up waiting indefinitely even if objects
+      were available. Also fixes a couple of leaks in the internal processing
+      object count that could lead to pool exhaustion.
+    </action>
+  </release>
+  <release version="1.5.2" date="2009-07-12" description=
+"This is a patch release containing fixes for POOL-146 and POOL-147, 
regressions
+introduced in version 1.5.">
+    <action dev="markt" type="fix" issue="POOL-146">
+      Handle the case where one key has reached maxActive but other keys have 
not.
+      Prior to the fix for this issue, threads waiting on objects from keyed 
pools
+      still having instances available could be blocked by a thread requesting 
an
+      instance from an exhausted pool.
+    </action>
+    <action dev="markt" type="fix" issue="POOL-147" due-to="Giambattista 
Bloisi">
+      Fix case where a thread could end up waiting indefinitely even if objects
+      were available.
+    </action>
+    <action dev="markt" type="fix" issue="POOL-145">
+      Ensure that the GenericKeyedObjectPool idle object evictor does not 
visit the
+      same instance more than once per eviction run.
+    </action>
+  </release>
+  <release version="1.5.1" date="2009-06-16" description=
+"This is a patch release containing a fix for POOL-144, a regression introduced
+in version 1.5.">
+    <action dev="markt" type="fix" issue="POOL-144">
+      When exhausted action is set to WHEN_EXHAUSTED_BLOCK, maxwait is 
positive and
+      client threads time out waiting for idle objects, capacity can be 
"leaked"
+      from GenericObjectPools and GeneritCkeyedObjectPools. 
+    </action>
+  </release>
+  <release version="1.5" date="2009-06-10" description=
+"This is a maintenance release including several important bug fixes. This 
release
+is source and binary compatible with versions 1.3 and 1.4 of commons pool. In 
addition
+to resolving some important concurrency-related bugs (POOL-135, POOL-125, 
POOL-29
+POOL-107) this release implements a fairness algorithm to ensure that threads 
waiting
+for available object instances from GenericObjectPools and 
GenericKeyedObjectPools are served
+in request arrival order.">
+    <action dev="markt" type="fix" issue="POOL-139" due-to="Sebastian Bazley">
+      StackKeyedObjectPool.getNumActive() needs to be synchronized.
+    </action>
+    <action dev="markt" type="fix" issue="POOL-137" due-to="Sebastian Bazley">
+      Inconsistent synchronization in GenericObjectPool; constant fields 
should be final.
+    </action>
+    <action dev="markt" type="fix" issue="POOL-75" due-to="Takayuki Kaneko and 
Gordon Mohr">
+       GenericObjectPool not FIFO with respect to borrowing threads.
+    </action>
+    <action dev="markt" type="fix" issue="POOL-135">
+      _numActive > _maxActive under load
+    </action>
+    <action dev="markt" type="fix" issue="POOL-125">
+      Insufficient control over concurrent access to pooled objects by 
Evictor, client threads.
+    </action>
+    <action dev="markt" type="fix" issue="POOL-107">
+      Number of connections created has crossed more than maxActive.
+    </action>
+    <action dev="markt" type="fix" issue="POOL-122">
+      java.util.Timer in EvictionTimer does not recover from OutOfMemoryError 
in Evictor.
+    </action>
+    <action dev="markt" type="fix" issue="POOL-133">
+      Failed object creation may result in invalid active count in GKOP.
+    </action>
+  </release>
+  <release version="1.4" date="2008-01-15" description=
+"This is a maintenance release including numerous bug fixes. This release
+is source and binary compatible with version 1.3 of commons pool, but
+there are some behavior changes introduced to resolve bugs, remove ambiguity
+or improve robustness. Among these are the change in default behavior of
+GenericObjectPool and GenericKeyedObjectPool from FIFO back to LIFO queues
+(as in 1.2 and earlier). The LIFO/FIFO behavior is now configurable. Some of
+the extra synchronization included in version 1.3 was removed / refactored to
+improve performance. The javadoc has also been made more complete and explicit.
+See the detailed list of changes below for specifics on fixed bugs and behavior
+changes in Commons Pool 1.4. This version of Commons Pool depends only on
+JDK version 1.3 or higher. Classes implementing pools are all intended to be
+threadsafe.">
+      <action dev="sandymac" type="fix">
+        Fixed constructor which was ignoring maxTotal parameter: 
+          GenericKeyedObjectPool(KeyedPoolableObjectFactory factory, int 
maxActive, byte whenExhaustedAction,
+          long maxWait, int maxIdle, int maxTotal, boolean testOnBorrow, 
boolean testOnReturn,
+          long timeBetweenEvictionRunsMillis, int numTestsPerEvictionRun, long 
minEvictableIdleTimeMillis,
+          boolean testWhileIdle)
+      </action>
+      <action dev="sandymac" type="fix">
+        Changed StackKeyedObjectPool to discard stalest, not freshest, idle 
object when maxSleeping is reached.
+      </action>
+      <action dev="psteitz" type="fix" issue="POOL-102" due-to="John Sumsion">
+        Allowed blocked threads in GenericObjectPool borrowObject to be 
interrupted.
+      </action>
+      <action dev="psteitz" type="fix" issue="POOL-86">
+        Fixes to address idle object eviction and LIFO/FIFO behavior reported
+        in POOL-86. Made LIFO/FIFO behavior configurable for GenericObjectPool 
and
+        GenericKeyedObjectPool, with default set back to LIFO (reverting to 
1.2 behavior).
+        Fixed GOP, GKOP evict method and added tests to ensure objects are 
visited in
+        oldest-to-youngest order. Changed backing store for GOP, GKOP pools 
back to Commons
+        Collections CursorableLinkedList (brought this class in, repackaged 
with package scope).
+      </action>
+      <action dev="psteitz" type="fix" issue="POOL-110" due-to="Alexander 
Pogrebnyak">
+        Changed the default setting for Config.softMinEvictableIdleTimeMillis 
to
+        GenericObjectPool.DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME_MILLIS (was
+        being incorrectly defaulted to DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS).
+      </action>
+      <action dev="psteitz" type="fix" issue="POOL-97" due-to="Mark Thomas">
+         Added a wrapper for the shared idle object eviction timer for all
+         pools. The wrapper class wraps the Timer and keeps track of how many
+         pools are using it. If no pools are using the timer, it is canceled.
+         This prevents a thread being left running which, in application server
+         environments, can lead to memory leaks and/or prevent applications
+         from shutting down or reloading cleanly.
+      </action>
+      <action dev="psteitz" type="fix" issue="POOL-93"  
+      due-to="Mark Thomas">
+        Reduced synchronization in GenericObjectPool, GenericKeyedObjectPool.
+        Factory method activations within synchronized blocks were causing
+        performance problems in DBCP and other applications where factory
+        methods could block. Fixes both POOL-93 and POOL-108.
+      </action>
+      <action dev="psteitz" type="fix" issue="POOL-113">
+        Made _testOnBorrow, _testOnReturn volatile and removed synchronization
+        in associated getters and setters in GenericObjectPool,
+        GenericKeyedObjectPool. Made getNumIdle synchronized in
+        StackKeyedObjectPool. 
+      </action>
+      <action dev="psteitz" type="fix" issue="POOL-116">
+        Fixed an error in the GenericKeyedObjectPool constructor that takes
+        a Config instance as a parameter. The minIdle setting in the Config
+        was being ignored by the constructor.
+      </action>
+      <action def="psteitz" type="fix" issue="POOL-117">
+        Made behavior on instance validation failure consistent across pools,
+        eliminating possible infinite loops in StackObjectPool,
+        StackKeyedObjectPool, SoftReferenceObjectPool when factory fails to
+        create valid objects. 
+      </action>
+      <action dev="sandymac" type="update">
+        When no factory has been defined, addObject now throws 
+        IllegalStateExecption instead of NullPointerException for all pools.
+      </action>
+      <action dev="sandymac" type="update">
+        SoftReferenceObjectPool. Improved the accuracy of getNumIdle by
+        "pruning" references to objects that have been garbage collected.
+      </action>
+      <action dev="sandymac" type="update">
+        GenericObjectPool, GenericKeyedObjectPool, SoftReferenceObjectPool,
+        StackObjectPool. Eliminated IllegalStateExceptions when the following
+        operations are attempted on a closed pool: getNumActive, getNumIdle, 
+        returnObject, invalidateObject.  In each case, the operation is allowed
+        to proceed, reporting the state of the pool that is being shut down, or
+        destroying objects returning to the closed pool.
+      </action>
+      <action dev="sandymac" type="update">
+        StackObjectPool, SoftReferenceObjectPool, GenericKeyedObjectPool. 
Allowed
+        borrowObject to continue (either examining additional idle instances or
+        with makeObject) when an exception is encountered activating an idle
+        object instead of propagating the exception to the client.  Also made
+        addObject propagate (not swallow) exceptions when passivating newly
+        created instances. 
+      </action>
+      <action dev="psteitz" type="update">
+        StackKeyedObjectPool. Added validation check for objects returned
+        from borrowObject. 
+      </action>
+      <action dev="sandymac" type="update">
+        BaseObjectPool, BaseKeyedObjectPool. Instead of throwing 
+        UnsupportedOperationException, the base class implementations
+        of getNumIdle and getNumActive return negative values. The
+        base implementation of close in BaseObjectPool no longer throws
+        IllegalStateException when invoked on an already closed pool.
+      </action>
+      
+    </release>
+
+    <release version="1.3" date="2006-04-06" description="1.x bugfix release">
+      <action type="fix">A large number of bug fixes. See release notes for 
changes.</action>
+    </release>
+
+    <release version="1.2" date="2004-06-07" description="bugfixes">
+      <action dev="dirkv" type="fix">
+           GenericKeyedObjectPoolFactory Config Constructor is incorrect
+      </action>
+      <action dev="dirkv" type="fix">
+        Not possible to extend GenericObjectPool.returnObject() without 
affecting addObject()
+      </action>
+    </release>
+
+    <release version="1.1" date="2003-10-20" description="bugfixes">
+      <action type="fix">A lot of corner cases were fixed</action>
+      <action type="fix">Performance improvement by optimizing pool 
synchronization, the critical code paths were optimized by reducing pool 
synchronization but we also added more synchronization where needed</action>
+      <action type="fix">New minIdle feature: the minimum number of objects 
allowed in the pool before the evictor thread (if active) spawns new objects. 
(Note no objects are created when: numActive + numIdle >= maxActive)</action>
+      <action type="fix">New maxTotal feature: a cap on the total number of 
instances controlled by a pool. Only for GenericKeyedObjectPool where maxActive 
is a cap on the number of active instances from the pool (per key).</action>
+      <action type="fix">UML Class and sequence diagrams</action>
+      <action type="fix">See bugzilla for more changes</action>
+    </release>
+
+    <release version="1.0.1" date="2002-08-12">
+      <action type="fix">No change log available.</action>
+    </release>
+
+    <release version="1.0" date="2002-05-04">
+      <action type="add">No change log available.</action>
+    </release>
+  </body>
+</document>

Reply via email to