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