Prepare for release.
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>