<?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 Release Notes</title>
  </properties>
  <body>
  <release version="2.8.1" date="2019-MM-DD" description="This is a maintenance release (Java 8).">
    <action dev="ggregory" type="fix" due-to="Prodigysov, Gary Gregory">
       [Javadoc] Add missing @throws comment in PoolUtils. #27.
    </action>
  </release>
  <release version="2.8.0" date="2019-12-05" description="This is a maintenance release (Java 8).">
    <action dev="ggregory" issue="POOL-374" type="fix" due-to="Gary Gregory, Phil Steitz">
       org.apache.commons.pool2.impl.GenericKeyedObjectPool.returnObject(K, T) should throw IllegalStateException instead of NullPointerException when a key is not found in the pool map.
    </action>
    <action dev="ggregory" issue="POOL-375" type="update" due-to="Gary Gregory">
       Update optional library cglib from 3.2.12 to 3.3.0.
    </action>
    <action dev="psteitz" issue="POOL-376" type="fix" due-to="Sazzadul Hoque, Phil Steitz">
      Fixed regression from original fix for POOL-356 which could result in NPE when destroying objects.
    </action>
    <action dev="psteitz" issue="POOL-326" type="fix" due-to="Phil Steitz">
      Eliminated NPE / ISE exceptions due to keyed pools being prematurely removed.
    </action>
    <action dev="ggregory" type="update" due-to="Gary Gregory">
      Update site build from Apache Commons BCEL 6.3.1 to 6.4.1.
    </action>
    <action dev="ggregory" issue="POOL-377" type="update" due-to="Gary Gregory">
      Update optional library org.ow2.asm:asm-util from 7.1 to 7.2.
    </action>
    <action dev="ggregory" issue="POOL-378" type="add" due-to="Gary Gregory">
      Deprecate PoolUtils.prefill(ObjectPool, int) in favor of ObjectPool.addObjects(int).
    </action>
    <action dev="ggregory" issue="POOL-379" type="add" due-to="Gary Gregory">
      Deprecate PoolUtils.prefill(KeyedObjectPool, K, int) in favor of KeyedObjectPool.addObjects(K, int).
    </action>
    <action dev="ggregory" issue="POOL-380" type="add" due-to="Gary Gregory">
      Deprecate PoolUtils.prefill(KeyedObjectPool, Collection, int) in favor of KeyedObjectPool.addObjects(Collection, int).
    </action>
    <action dev="ggregory" type="fix" due-to="emopers">
      Close BufferedOutputStream in test before calling toString on underlying BufferedOutputStream #26.
    </action>
    <action dev="ggregory" type="fix" due-to="Prodigysov">
      [Javadoc] Add missing @throws comment in SoftReferenceObjectPool. #28.
    </action>
  </release>
  <release version="2.7.0" date="2019-07-25" description="This is a feature release (Java 8).">
    <action dev="ggregory" issue="POOL-364" type="update" due-to="Gary Gregory">
       Update from Java 7 to Java 8.
    </action>
    <action dev="ggregory" issue="POOL-365" type="update" due-to="Gary Gregory">
       Update ASM from 7.0 to 7.1
    </action>
    <action dev="ggregory" issue="POOL-366" type="update" due-to="Gary Gregory">
      Update optional library cglib from 3.2.10 to 3.2.12.
    </action>
    <action dev="ggregory" issue="POOL-367" type="update" due-to="Per Lundberg">
      Fix typo in package private method name stopEvitor() -> stopEvictor() #22.
    </action>
    <action dev="ggregory" issue="POOL-361" type="fix" due-to="Pablo, Phil Steitz, Bruno P. Kinoshita">
      Move validation for newly created objects into create(). Fixes #23.
    </action>
    <action dev="ggregory" type="add" issue="POOL-370" due-to="Mark Thomas, Gary Gregory">
      Add org.apache.commons.pool2.PooledObject#getBorrowedCount().
    </action>
    <action dev="ggregory" type="add" issue="POOL-371" due-to="Matt Sicker, Gary Gregory">
      Add org.apache.commons.pool2.PooledObject#setRequireFullStackTrace(boolean).
    </action>
    <action dev="ggregory" type="fix" issue="POOL-352" due-to=" Volker Kleinschmidt">
      CallStackUtils mishandles security manager check part 1.
    </action>
  </release>
  <release version="2.6.2" date="2019-03-05" description="This is a maintenance release (Java 7).">
    <action dev="ggregory" issue="POOL-362" type="fix">
       Always null out org.apache.commons.pool2.impl.BaseGenericObjectPool.evictionIterator to match org.apache.commons.pool2.impl.BaseGenericObjectPool.evictor.
    </action>
    <action dev="ggregory" issue="POOL-363" type="fix" due-to="Josh Landin">
       Evictor Thread prevents Spring Context shutdown in standalone app.
    </action>
    <action dev="ggregory" issue="POOL-348" type="fix" due-to="Josh Landin">
       The commons-pool-evictor-thread should run as a Deamon.
    </action>
  </release>
  <release version="2.6.1" date="2019-02-08" description="This is a maintenance release (Java 7).">
    <action dev="struberg" issue="POOL-340" type="fix" due-to="Pavel Kolesov">
      Correct validateObject with concurrent borrowObject
    </action>
    <action dev="struberg" issue="POOL-356" type="fix">
      Fix deadlock on massive concurrent requests
    </action>
    <action dev="ggregory" issue="POOL-345" type="update">
      Update optional library cglib from 3.2.6 to 3.2.9.
    </action>
    <action dev="ggregory" issue="POOL-346" type="update" due-to="Michael Chen">
      Move common configuration setter to BaseGenericObjectPool #9.
    </action>
    <action dev="ggregory" issue="POOL-347" type="fix" due-to="Shunsuke Nakamura">
      Method borrowObject waits for maxWaitMillis over in pool full.
    </action>
    <action dev="ggregory" issue="POOL-349" type="update">
      Update optional library asm-util from 6.2 to 7.0.
    </action>
    <action dev="ggregory" issue="POOL-359" type="fix" due-to="Michael Wintermeyer, Gary Gregory">
      NullPointerException closing multiple GenericObjectPools.
    </action>
    <action dev="ggregory" issue="POOL-360" type="update">
      Update optional library cglib from 3.2.9 to 3.2.10.
    </action>
    <action dev="ggregory" issue="POOL-326" type="fix" due-to="Chris Allison, Phil Steitz">
      Threading issue, NullPointerException and IllegalStateException in GenericKeyedObjectPool.
    </action>
    <action dev="ggregory" issue="POOL-352" type="fix" due-to="Volker Kleinschmidt, Gary Gregory">
      CallStackUtils mishandles security manager check (partial fix.)
    </action>
  </release>  
  <release version="2.6.0" date="2018-07-06" description="This is a maintenance release (Java 7).">
    <action dev="ggregory" issue="POOL-336" type="update" due-to="Wolfgang Glas">
      GenericObjectPool's borrowObject lock if create() fails with Error.
    </action>
    <action dev="ggregory" issue="POOL-339" type="update">
      Update optional library cglib from 3.2.5 to 3.2.6.
    </action>
    <action dev="markt" issue="POOL-337" type="fix" due-to="Reinald Verheij">
      Ensure cancelled eviction tasks are removed from scheduler.
    </action>
    <action dev="ggregory" issue="POOL-341" type="update">
      Update optional library asm-util from 6.0 to 6.1.1.
    </action>
    <action dev="ggregory" issue="POOL-342" type="update">
      Update optional library asm-util from 6.1.1 to 6.2.
    </action>
    <action dev="ggregory" issue="POOL-338" type="fix" due-to="Michael C, Gary Gregory">
      GenericObjectPool constructor may throw an exception under OSGi.
    </action>
    <action dev="ggregory" issue="POOL-324" type="fix" due-to="Jay Xu, Gary Gregory">
      org.apache.commons.pool2.impl.GenericObjectPool.getFactoryType() throws java.lang.ClassCastException.
    </action>
    <action dev="ggregory" issue="POOL-344" type="fix" due-to="Yulin Wang">
      Delete repeated call startEvictor.
    </action>
  </release>
  <release version="2.5.0" date="2017-12-16" description="This is a minor release (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>
    <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 (Java 6).">
    <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 any 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 (Java 6).">
    <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 (Java 6), 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 (Java 6).">
    <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 (Java 6).">  
    <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 (Java 6) 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 (Java 6) 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 (Java 6) 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 (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>
