<?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

    https://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 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.  Set the project.properties' maven.changelog.range
property to the number of days since the last release.


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 xmlns="http://maven.apache.org/changes/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/changes/2.0.0 https://maven.apache.org/xsd/changes-2.0.0.xsd">
  <properties>
    <title>Apache Commons Pool Release Notes</title>
  </properties>
  <body>
    <release version="3.0.0" date="YYYY-MM-DD" description="This is a feature and maintenance release (Java 8 or above).">
      <!-- ADD -->
      <action type="add" dev="psteitz" issue="POOL-407">Add ReslientPooledObjectFactory to provide resilience against factory outages.</action>
      <action type="add" dev="ggregory" issue="POOL-415" due-to="Réda Housni Alaoui, Gary Gregory, Phil Steitz">Add an option to JdkProxySource allowing to unwrap UndeclaredThrowableException #261.</action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.pool3.proxy.CglibProxySource.Builder.</action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.pool3.proxy.JdkProxySource.Builder.</action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.pool3.proxy.AbstractProxySource.</action>
      <action type="add" dev="ggregory" due-to="Pratyay, Gary Gregory">Made statistics collection optional in BaseGenericObjectPool #429.</action>
      <!-- FIX -->
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Remove -nouses directive from maven-bundle-plugin. OSGi package imports now state 'uses' definitions for package imports, this doesn't affect JPMS (from org.apache.commons:commons-parent:80).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Operation on the "idleHighWaterMark" shared variable in "ErodingFactor" class is not atomic [org.apache.commons.pool3.PoolUtils$ErodingFactor] At PoolUtils.java:[line 101] AT_NONATOMIC_OPERATIONS_ON_SHARED_VARIABLE.</action>
      <action type="fix" dev="ggregory" due-to="shengulong, Gary Gregory" issue="POOL-422">org.apache.commons.pool3.impl.GenericObjectPool.create(Duration) duration computation doesn't match 2.x. See also PR #409 from shengulong.</action>
      <action type="fix" dev="markt" due-to="Coverity Scan">Fix potential ConcurrentModificationException in EvictionTimer thread clean-up.</action>
      <action type="fix" dev="markt" due-to="Coverity Scan">Fix potential ConcurrentModificationException in EvictionTimer tasks.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix Apache RAT plugin console warnings.</action>
      <!-- REMOVE -->
      <action dev="ggregory" type="remove">Deprecations from version 2.x have been removed.</action>
      <!-- UPDATE -->
      <action type="update" dev="ggregory" due-to="Gary Gregory">Bump Java from 8 to 17.</action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">Bump org.apache.commons:commons-parent from 58 to 99 #297, #328, #338, #341, #347, #351, #354, #361, #431, #445, #448.</action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">Bump org.ow2.asm:asm-util from 9.5 to 9.7.1 #252, #294, #355.</action>
      <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump org.apache.commons:commons-lang3 from 3.13.0 to 3.20.0 #326, #333, #342, #415.</action>
      <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump org.apache.bcel:bcel from 6.7.0 to 6.10.0 #263, #306, #327.</action>
    </release>
    <release version="2.13.1" date="2025-12-30" description="This is a maintenance release. Java 8 or later is required.">
      <!-- FIX -->
      <action type="fix" issue="POOL-427" dev="psteitz" due-to="Raju Gupta">The fix for POOL-425 introduced a regression where addObject fails when maxIdle is negative (indicating no limit).</action>
      <!-- ADD -->
      <!-- UPDATE -->
    </release>
    <release version="2.13.0" date="2025-12-06" description="This is a feature and maintenance release. Java 8 or later is required.">
      <!-- FIX -->
      <action type="fix" issue="POOL-424" dev="psteitz" due-to="Steven Adams">GenericObjectPool.invalidateObject() can leave other threads waiting to borrow hanging.
       The fix for this issue changes behavior of invalidateObject.  This method now always tries to add a new instance
       to the pool to replace the invalidated and destroyed instance.  As a result of this change, abandoned object
       removal now attemps to replace abandoned objects.
    </action>
      <action type="fix" issue="POOL-425" dev="psteitz">GenericObjectPool addObject does not respect maxIdle.</action>
      <action type="fix" issue="POOL-350" dev="psteitz">Make placement of calls to GKOP reuseCapacity configurable.</action>
      <action type="fix" issue="POOL-290" dev="psteitz" due-to="Serge Angelov">TestSoftRefOutOfMemory (unit test) can loop infinitely on failure.</action>
      <action type="fix" issue="POOL-419" dev="psteitz" due-to="Raju Gupta, Phil Steitz">GenericObjectPool counters and object collections can be corrupted when returnObject and invalidate are invoked concurrently by client threads on the same pooled object.</action>
      <action type="fix" issue="POOL-421" dev="psteitz" due-to="Phil Steitz">GenericObjectPool addObject should return immediately when there is no capacity to add.</action>
      <action type="fix" issue="POOL-420" dev="psteitz" due-to="Phil Steitz">The maximum wait time for GenericKeyedObjectPool.borrowObject(*) may exceed configured maximum wait time. This is the same issue as POOL-418, but for GKOP.
       Also included in this fix is a change to addObject that prevents it from waiting for capacity to create. That method now returns immediately when there is no capcity to add to the pool under the given key.
    </action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Remove -nouses directive from maven-bundle-plugin. OSGi package imports now state 'uses' definitions for package imports, this doesn't affect JPMS (from org.apache.commons:commons-parent:80).</action>
      <action type="fix" issue="POOL-418" dev="ggregory" due-to="Gary Gregory">The maximum wait time for GenericObjectPool.borrowObject(*) may exceed expectations due to a spurious thread wakeup.
      The remaining duration was incorrectly calculated and the method did not end up waiting long enough.
      Recompute the remaining duration an additional time when we block when exhausted.
    </action>
      <action type="fix" dev="ggregory" due-to="Wei Guo, Gary Gregory">Fix site link from the About page to the Download page, see also #387.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Operation on the "idleHighWaterMark" shared variable in "ErodingFactor" class is not atomic [org.apache.commons.pool2.PoolUtils$ErodingFactor] At PoolUtils.java:[line 98] AT_NONATOMIC_OPERATIONS_ON_SHARED_VARIABLE.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">org.apache.commons.pool2.impl.GenericObjectPool.create(Duration) should normalize a negative duration to zero.</action>
      <action type="fix" dev="markt" due-to="Coverity Scan">Fix potential ConcurrentModificationException in EvictionTimer thread clean-up.</action>
      <action type="fix" dev="markt" due-to="Coverity Scan">Fix potential ConcurrentModificationException in EvictionTimer tasks.</action>
      <!-- ADD -->
      <action type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.pool2.PooledObject.nonNull(PooledObject).</action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.pool2.PooledObject.getObject(PooledObject).</action>
      <action type="add" dev="ggregory" due-to="Pratyay, Gary Gregory">Made statistics collection optional in BaseGenericObjectPool #429.</action>
      <!-- UPDATE -->
      <action type="update" dev="ggregory" due-to="Gary Gregory">Bump org.apache.commons:commons-parent from 79 to 93.</action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">[test] Bump commons-lang3 from 3.17.0 to 3.20.0.</action>
    </release>
    <release version="2.12.1" date="2025-01-19" description="This is a feature and maintenance release (Java 8 or above).">
      <!-- FIX -->
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Use java.time.Instant precision in org.apache.commons.pool2.impl.ThrowableCallStack.Snapshot throwable message.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">GenericObjectPool.borrowObject(Duration) doesn't obey its borrowMaxWait Duration argument when the argument is different from GenericObjectPool.getMaxWaitDuration().</action>
      <action type="fix" issue="POOL-418" dev="ggregory" due-to="Gary Gregory">The maximum wait time for GenericObjectPool.borrowObject(*) may exceed expectations due to a spurious thread wakeup.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Javadoc is missing its Overview page.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Migrate site generation templates to https://maven.apache.org/xsd/xdoc-2.0.xsd.</action>
      <!-- ADD -->
      <!-- UPDATE -->
      <action type="update" dev="ggregory" due-to="Gary Gregory">Bump org.apache.commons:commons-parent from 62 to 79.</action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">[test] Bump commons-lang3 from 3.13.0 to 3.19.0.</action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">[site] Pickup org.apache.bcel:bcel version from parent POM.</action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">[test] Bump org.ow2.asm:asm-util from 9.5 to 9.7.1.</action>
    </release>
    <release version="2.12.0" date="2023-09-30" description="This is a feature and maintenance release (Java 8 or above).">
      <!-- FIX -->
      <action dev="psteitz" type="fix" issue="POOL-401">
      Ensure that capacity freed by invalidateObject is available to all keyed pools.
    </action>
      <action dev="psteitz" type="fix" due-to="Codievilky August" issue="POOL-391">
      Ensure capacity freed by clear is made available to GKOP borrowers.
    </action>
      <action dev="ggregory" type="fix" issue="POOL-402" due-to="Cp-John, Phil Steitz, Bruno P. Kinoshita, Gary Gregory">
      Check blockWhenExhausted in hasBorrowWaiters #116.
    </action>
      <action dev="ggregory" type="fix" due-to="Arturo Bernal">
      Simplify test assertion with similar call but simpler. #131.
    </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory" issue="POOL-269">
      Use generic exceptions instead of java.lang.Exception.
    </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory" issue="POOL-405">
      NullPointerException GenericKeyedObjectPool.invalidateObject(GenericKeyedObjectPool.java:1343).
    </action>
      <action dev="ggregory" type="fix" due-to="Zhenyu Luo, Gary Gregory" issue="POOL-408">
      A typo of KeyedPooledObjectFactory on the site and Javadoc.
    </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
      Fail-fast on null input for DefaultPooledObjectInfo.DefaultPooledObjectInfo(PooledObject) with a NullPointerException.
    </action>
      <action dev="niallp" type="fix" due-to="Shichao Yuan, Phil Steitz, Niall Pemberton" issue="POOL-393">
      Improve BaseGenericObjectPool's JMX Register performance when creating many pools.
    </action>
      <action dev="ggregory" type="fix" due-to="Réda Housni Alaoui, Gary Gregory">
      Null-guard in GenericObjectPool.use(T) like other call sites of GenericObjectPool.getPooledObject(T).
    </action>
      <action dev="ggregory" type="fix" issue="POOL-411" due-to="Richard Eckart de Castilho, Gary Gregory">
      NPE when deregistering key at end of borrow.
    </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
      Make private class GenericKeyedObjectPool.ObjectDeque class static.
    </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
      Make private class BaseGenericObjectPool.StatsStore class static.      
    </action>
      <action type="fix" dev="ggregory" due-to="step-security-bot, Gary Gregory">
      [StepSecurity] ci: Harden GitHub Actions #225.
    </action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">
      Fix possible NPE in DefaultPooledObjectInfo.getPooledObjectToString().
    </action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">
      Fix possible NPE in DefaultPooledObjectInfo.getPooledObjectType().
    </action>
      <!-- ADD -->
      <action dev="ggregory" type="add" due-to="Gary Gregory">
      Add PooledObject.getFullDuration().
    </action>
      <action dev="ggregory" type="add" due-to="Vamsi Pavan Kumar Sanka, Phil Steitz, Gary Gregory">
      Add GenericKeyedObjectPool.getKeys().
    </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
      Add KeyedObjectPool.getKeys().
    </action>
      <action dev="ggregory" type="add">
      Add github/codeql-action.
    </action>
      <action dev="ggregory" type="add">
      Add BaseGenericObjectPool.Evictor.toString().
    </action>
      <action dev="ggregory" type="add">
      BaseGenericObjectPool now implements AutoCloseable.
    </action>
      <!-- UPDATE -->
      <action dev="kinow" type="update" due-to="Dependabot, Gary Gregory">
      Bump actions/cache from 2.1.6 to 3.0.10 #117, #138, #158, #174, #178.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
      Bump actions/checkout from 2.3.4 to 3.0.2 #109, #112, #134.
    </action>
      <action dev="kinow" type="update" due-to="Gary Gregory">
      Bump actions/setup-java from 2 to 3.5.1.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
      Bump spotbugs from 4.3.0 to 4.7.3 #94, #99, #106, #114, #122, #129, #137, #155, #168, #187.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
      Bump spotbugs-maven-plugin from 4.3.0 to 4.7.3.0 #102, #110, #119, #125, #128, #139, #149, #157, #161, #169, #180, #190.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
      Bump junit-bom from 5.8.0-M1 to 5.9.1 #96, #100, #103, #120, #160, #172.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
      Bump checkstyle from 8.45.1 to 9.3 #97, #104, #111, #121, #126, #132.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
      Bump maven-checkstyle-plugin from 3.1.2 to 3.2.0 #166.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
      Bump maven-pmd-plugin from 3.14.0 to 3.19.0 #101, #153, #170.
    </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
      Bump pmd from 6.44.0 to 6.52.0.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
      Bump biz.aQute.bndlib from 5.3.0 to 6.4.1 #105, #118, #135, #151, #154, #191, #223.
    </action>
      <action dev="kinow" type="update" due-to="Dependabot">
      Bump maven-bundle-plugin from 5.1.3 to 5.1.8 #127, #146, #148, #159, #164.
    </action>
      <action dev="kinow" type="update" due-to="Dependabot">
      Bump maven-surefire-plugin from 3.0.0-M7 to 3.0.0-M6 #142, #152.
    </action>
      <action dev="kinow" type="update" due-to="Dependabot">
      Bump asm-util from 9.2 to 9.5 #141, #179, #220.
    </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
      Bump commons-parent from 52 to 58 #173, #195, #204, #222.
    </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
      Bump japicmp-maven-plugin from 0.15.3 to 0.16.0.
    </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
      Bump animal-sniffer-maven-plugin 1.20 to 1.21.
    </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
      Bump Apache Commons BCEL 6.5.0 to 6.7.0 #194.
    </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
      Bump commons-lang3 from 3.12.0 to 3.13.0.
    </action>
    </release>
    <release version="2.11.1" date="2021-08-18" description="This is a maintenance release (Java 8 or above).">
      <!-- FIX -->
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
      Getting a PooledObject's active duration returns a negative duration when the object is borrowed but not returned. Affects:
      - PooledObject.getActiveDuration()
      - PooledObject.getActiveTime()
      - PooledObject.getActiveTimeMillis()
    </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
      The default implementation of TrackedUse.getLastUsedInstant() uses seconds instead of milliseconds. 
      This interface is not implemented within Apache Commons Pool but affects Apache Commons DBCP.
    </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
      DefaultPooledObject.getIdleTime() drops nanoseconds on Java 9 and greater.
    </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
      Fix field label in BaseGenericObjectPool toString() builder: From timeBetweenEvictionRunsMillis to durationBetweenEvictionRuns.
    </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
      Fix field label in BaseObjectPoolConfig toString() builder: From maxWaitMillis to maxWaitDuration.
    </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
      Fix field label in NoSuchElementException message for GenericObjectPool.borrowObject(Duration): From borrowMaxWaitMillis to borrowMaxWaitDuration.
    </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
      Reimplement DefaultPooledObject.getIdleDuration() using Duration computation.
    </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
      Reimplement BaseGenericObjectPool.maxBorrowWait as a Duration instead of a long.
    </action>
      <action dev="ggregory" type="fix" due-to="Arturo Bernal">
      Minors Changes #89.
    </action>
      <!-- UPDATE -->
      <action dev="ggregory" type="update" due-to="Dependabot">
      Bump checkstyle from 8.45 to 8.45.1 #93.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
      Bump spotbugs from 4.2.3 to 4.3.0 and ignore new medium warnings EI_EXPOSE_REP and EI_EXPOSE_REP2.
    </action>
    </release>
    <release version="2.11.0" date="2021-08-08" description="This is a feature release (Java 8 or above).">
      <!-- FIX -->
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
      Fix "[WARNING] Old version of checkstyle detected. Consider updating to >= v8.30." Update Checktyle to 8.44.
    </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
      Make Duration setters use their respective default values when null.
    </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
      Call swallowException(Exception) instead of printing exceptions to the console in GenericKeyedObjectPool.removeAbandoned(AbandonedConfig) and GenericObjectPool.removeAbandoned(AbandonedConfig).
    </action>
      <action dev="ggregory" type="fix" due-to="Arturo Bernal">
      Fix Javadoc link reference #91.
    </action>
      <action dev="ggregory" type="fix" due-to="Arturo Bernal">
      No need to initialize to default values. #90.
    </action>
      <!-- ADD -->
      <action dev="ggregory" type="add" due-to="Gary Gregory">
      Track timestamps with Instants instead of longs. 
      There is currently no increased precision on Java 8, but starting with Java 9, the JRE SystemClock precision is increased usually down to microseconds, or tenth of microseconds, depending on the OS, Hardware, and JVM implementation.
      Add and use: 
      - DefaultPooledObject.getCreateInstant()
      - DefaultPooledObject.getLastUsedInstant()
      - PooledObject.getCreateInstant()
      - PooledObject.getLastBorrowInstant()
      - PooledObject.getLastReturnInstant()
      - PooledObject.getLastUsedInstant()
      - TrackedUse#getLastUsedInstant()
    </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
      Add BaseObjectPoolConfig.setEvictorShutdownTimeoutDuration(Duration), deprecate setEvictorShutdownTimeoutMillis(Duration).
    </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
      Add BaseGenericObjectPool.{get|set}MaxWaitDuration(Duration) and deprecate {get|set}MaxWaitMillis(long).
    </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
      Add BaseObjectPoolConfig.{get|set}MaxWaitDuration(Duration) and deprecate {get|set}MaxWaitMillis(long).
    </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
      Add and use Duration APIs instead of ints or longs.
      - Add and use Duration APIs in BaseGenericObjectPool: getDurationBetweenEvictionRuns(), getEvictorShutdownTimeoutDuration(), getMinEvictableIdleDuration(), getSoftMinEvictableIdleDuration(), setMaxWait(Duration), setMinEvictableIdle(Duration), setSoftMinEvictableIdle(Duration).
      - Add and use Duration APIs in BaseObjectPoolConfig: getDurationBetweenEvictionRuns(), getEvictorShutdownTimeoutDuration(),getMinEvictableIdleDuration(), getSoftMinEvictableIdleDuration().
      - Add and use Duration APIs in EvictionConfig: getIdleEvictDuration(), getIdleSoftEvictDuration().
      - Add and use Duration APIs in PooledObject: getIdleDuration(), getActiveDuration().
      - No need to initialize instance variables to their default values.
      - Update Javadocs.
      - Update toString() implementations with duration labels.
    </action>
      <action issue="POOL-396" dev="ggregory" type="add" due-to="Jeremy Kong, Phil Steitz">
      Handle validation exceptions during eviction. #85.
    </action>
      <action issue="POOL-395" dev="ggregory" type="add" due-to="Gary Gregory, Arash Nikoo">
      Improve exception thrown in GenericObjectPool.borrowObject when pool is exhausted. Added BaseGenericObjectPool.setMessagesStatistics(boolean).
    </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
      Add and use AbandonedConfig.copy(AbandonedConfig) to fix CPD code duplication issues in GenericKeyedObjectPool and GenericObjectPool.
    </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
      Pull up AbandonedConfig and related methods from GenericKeyedObjectPool and GenericObjectPool to BaseGenericObjectPool (fix for CPD issues).
      - BaseGenericObjectPool.getLogAbandoned()
      - BaseGenericObjectPool.getRemoveAbandonedOnBorrow()
      - BaseGenericObjectPool.getRemoveAbandonedOnMaintenance()
      - BaseGenericObjectPool.getRemoveAbandonedTimeout()
      - BaseGenericObjectPool.getRemoveAbandonedTimeoutDuration()
      - BaseGenericObjectPool.isAbandonedConfig()
      - BaseGenericObjectPool.setAbandonedConfig(AbandonedConfig)
    </action>
      <!-- UPDATES -->
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
      Bump org.ow2.asm:asm-util from 9.1 to 9.2.
    </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
      Bump com.github.spotbugs:spotbugs from 4.2.3 to 4.3.0.
    </action>
      <action dev="ggregory" type="fix" due-to="Dependabot">
      Bump checkstyle from 8.44 to 8.45 #92.
    </action>
    </release>
    <release version="2.10.0" date="2021-05-28" description="This is a feature release (Java 8 or above).">
      <!-- ADD -->
      <action dev="ggregory" type="add" due-to="Gary Gregory">
      Add and use java.time.Duration APIs timeouts instead of using ints for seconds.
      See the site and its API comparison report for a list of the new Duration-based APIs.
    </action>
      <action dev="ggregory" type="add" due-to="JSurf, Gary Gregory, Phil Steitz">
      Implement AbandonedConfig for GenericKeyedObjectPool #67.
    </action>
      <!-- FIXES -->
      <action dev="ggregory" type="fix" due-to="Arturo Bernal">
      Simplify Assertions in tests #77.
    </action>
      <action dev="ggregory" type="fix" due-to="Arturo Bernal">
      Replace C-style array declaration with Java style #80.
    </action>
      <action dev="ggregory" type="fix" due-to="Arturo Bernal">
      Use Objects.equals(); Use Anonymous type; Use method reference instead Lambda; Replace Loop with Collection.removeIf(). #81. 
    </action>
      <action dev="ggregory" type="fix" due-to="Arturo Bernal">
      Use diamond operator. #82. 
    </action>
      <action dev="ggregory" type="fix" due-to="Arturo Bernal">
      Code clean ups. #83.
    </action>
      <!-- UPDATE -->
      <action dev="ggregory" type="update" due-to="Dependabot">
      Bump spotbugs-maven-plugin from 4.0.4 to 4.2.1 #48, #53, #59, #62.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
      Bump actions/setup-java from v1.4.2 to v2, #47.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
      Bump junit from 4.13 to 4.13.1 #50.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
      Bump biz.aQute.bndlib from 5.1.2 to 5.3.0, #51, #66.
    </action>
      <action dev="ggregory" type="update" due-to="Arturo Bernal" issue="POOL-389">
      Migrate to JUnit 5 #57.
    </action>
      <action dev="ggregory" type="update" due-to="Arturo Bernal" issue="POOL-389">
      Minor Improvements #58, #60.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
      Bump actions/checkout from v2.3.3 to v2.3.4 #54.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
      Bump maven-pmd-plugin from 3.13.0 to 3.14.0 #55.
    </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
      Update commons.japicmp.version 0.14.3 -> 0.15.3.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
      Bump actions/cache from v2 to v2.1.6 #65, #75, #84.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
      Bump maven-checkstyle-plugin from 3.1.1 to 3.1.2 #61.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
      Bump asm-util from 9.0 to 9.1 #64.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
      Bump spotbugs from 4.2.1 to 4.2.3 #68, #73, #74.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
      Bump junit-bom from 5.7.1 to 5.8.0-M1 #76.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
      Bump maven-bundle-plugin from 5.1.1 to 5.1.2 #70.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
      Bump animal-sniffer-maven-plugin from 1.19 to 1.20.
    </action>
    </release>
    <release version="2.9.0" date="2020-09-25" description="This is a minor release (Java 8 or above).">
      <action issue="POOL-387" dev="ggregory" type="update" due-to=" Phil Steitz">
      Object factory destroy method should carry information on activation context.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
      Update spotbugs from 4.0.6 to 4.1.3, #37, #41, #46.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
      Update actions/checkout from v2.3.1 to v2.3.3 #56, #45.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
      Update actions/setup-java from v1.4.0 to v1.4.2 #42.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
      Update optional asm-util from 8.0.1 to 9.0 #44.
    </action>
    </release>
    <release version="2.8.1" date="2020-07-27" description="This is a maintenance release (Java 8 or above).">
      <action dev="ggregory" issue="POOL-386" type="fix" due-to="Phil Steitz, Mark Thomas">
      Refactored EvictionTimer usage tracking to fix POOL-386 and handle abandoned pools. #32.
    </action>
      <action dev="ggregory" type="fix" due-to="Prodigysov, Gary Gregory">
      [Javadoc] Add missing @throws comment in PoolUtils. #27.
    </action>
      <action dev="ggregory" issue="POOL-384" type="update" due-to="Gary Gregory">
      Update optional library org.ow2.asm:asm-util from 7.2 to 8.0.1.
    </action>
      <action dev="ggregory" issue="POOL-385" type="add" due-to="scholzi100">
      Added Automatic-Module-Name to support JPMS #31.
    </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
      Update site reports from org.apache.bcel:bcel 6.4.1 to 6.5.0.
    </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
      Update site reports from maven-pmd-plugin 3.12.0 to 3.13.0.
    </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
      Update build from biz.aQute.bnd:biz.aQute.bndlib 5.1.0 -> 5.1.2.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
      Update actions/checkout from v1 to v2.3.1 #33.
    </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
      Update commons-parent from 50 to 51 #36.
    </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
      Update Checkstyle plugin from 3.0.0 to 3.1.1.
    </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
      Update JApiCmp from 0.14.1 to 0.14.3.
    </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
      Update animal-sniffer-maven-plugin from 1.16 to 1.19.
    </action>
    </release>
    <release version="2.8.0" date="2019-12-05" description="This is a maintenance release (Java 8 or above).">
      <action dev="ggregory" issue="POOL-374" type="fix" due-to="Gary Gregory, Phil Steitz">
       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 or above).">
      <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.pool3.PooledObject#getBorrowedCount().
    </action>
      <action dev="ggregory" type="add" issue="POOL-371" due-to="Matt Sicker, Gary Gregory">
      Add org.apache.commons.pool3.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 or above).">
      <action dev="ggregory" issue="POOL-362" type="fix">
       Always null out org.apache.commons.pool3.impl.BaseGenericObjectPool.evictionIterator to match org.apache.commons.pool3.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 or above).">
      <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 or above).">
      <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.pool3.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 or above).">
      <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.pool3.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 or above).">
      <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 or above).">
      <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 or above), 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 or above).">
      <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 or above).">
      <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 or above) 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 or above) 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 or above) 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 behavior 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 synchronized 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 behavior 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 or above).">
      <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 dev="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>
