<?xml version="1.0"?> | |
<!-- | |
Licensed to the Apache Software Foundation (ASF) under one or more | |
contributor license agreements. See the NOTICE file distributed with | |
this work for additional information regarding copyright ownership. | |
The ASF licenses this file to You under the Apache License, Version 2.0 | |
(the "License"); you may not use this file except in compliance with | |
the License. You may obtain a copy of the License at | |
http://www.apache.org/licenses/LICENSE-2.0 | |
Unless required by applicable law or agreed to in writing, software | |
distributed under the License is distributed on an "AS IS" BASIS, | |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
See the License for the specific language governing permissions and | |
limitations under the License. | |
--> | |
<!-- | |
This file is also used by the maven-changes-plugin to generate the release notes. | |
Useful ways of finding items to add to this file are: | |
1. Add items when you fix a bug or add a feature (this makes the | |
release process easy :-). | |
2. Do a JIRA search for tickets closed since the previous release. | |
3. Use the report generated by the maven-changelog-plugin to see all | |
SVN commits. TBA how to use this with SVN. | |
To generate the release notes from this file: | |
mvn changes:announcement-generate -Prelease-notes [-Dchanges.version=nnn] | |
then tweak the formatting if necessary | |
and commit | |
The <action> type attribute can be add,update,fix,remove. | |
--> | |
<document> | |
<properties> | |
<title>Apache Commons Pool Release Notes</title> | |
</properties> | |
<body> | |
<release version="2.8.1" date="2019-MM-DD" description="This is a maintenance release (Java 8)."> | |
<action dev="ggregory" type="fix" due-to="Prodigysov, Gary Gregory"> | |
[Javadoc] Add missing @throws comment in PoolUtils. #27. | |
</action> | |
</release> | |
<release version="2.8.0" date="2019-12-05" description="This is a maintenance release (Java 8)."> | |
<action dev="ggregory" issue="POOL-374" type="fix" due-to="Gary Gregory, Phil Steitz"> | |
org.apache.commons.pool2.impl.GenericKeyedObjectPool.returnObject(K, T) should throw IllegalStateException instead of NullPointerException when a key is not found in the pool map. | |
</action> | |
<action dev="ggregory" issue="POOL-375" type="update" due-to="Gary Gregory"> | |
Update optional library cglib from 3.2.12 to 3.3.0. | |
</action> | |
<action dev="psteitz" issue="POOL-376" type="fix" due-to="Sazzadul Hoque, Phil Steitz"> | |
Fixed regression from original fix for POOL-356 which could result in NPE when destroying objects. | |
</action> | |
<action dev="psteitz" issue="POOL-326" type="fix" due-to="Phil Steitz"> | |
Eliminated NPE / ISE exceptions due to keyed pools being prematurely removed. | |
</action> | |
<action dev="ggregory" type="update" due-to="Gary Gregory"> | |
Update site build from Apache Commons BCEL 6.3.1 to 6.4.1. | |
</action> | |
<action dev="ggregory" issue="POOL-377" type="update" due-to="Gary Gregory"> | |
Update optional library org.ow2.asm:asm-util from 7.1 to 7.2. | |
</action> | |
<action dev="ggregory" issue="POOL-378" type="add" due-to="Gary Gregory"> | |
Deprecate PoolUtils.prefill(ObjectPool, int) in favor of ObjectPool.addObjects(int). | |
</action> | |
<action dev="ggregory" issue="POOL-379" type="add" due-to="Gary Gregory"> | |
Deprecate PoolUtils.prefill(KeyedObjectPool, K, int) in favor of KeyedObjectPool.addObjects(K, int). | |
</action> | |
<action dev="ggregory" issue="POOL-380" type="add" due-to="Gary Gregory"> | |
Deprecate PoolUtils.prefill(KeyedObjectPool, Collection, int) in favor of KeyedObjectPool.addObjects(Collection, int). | |
</action> | |
<action dev="ggregory" type="fix" due-to="emopers"> | |
Close BufferedOutputStream in test before calling toString on underlying BufferedOutputStream #26. | |
</action> | |
<action dev="ggregory" type="fix" due-to="Prodigysov"> | |
[Javadoc] Add missing @throws comment in SoftReferenceObjectPool. #28. | |
</action> | |
</release> | |
<release version="2.7.0" date="2019-07-25" description="This is a feature release (Java 8)."> | |
<action dev="ggregory" issue="POOL-364" type="update" due-to="Gary Gregory"> | |
Update from Java 7 to Java 8. | |
</action> | |
<action dev="ggregory" issue="POOL-365" type="update" due-to="Gary Gregory"> | |
Update ASM from 7.0 to 7.1 | |
</action> | |
<action dev="ggregory" issue="POOL-366" type="update" due-to="Gary Gregory"> | |
Update optional library cglib from 3.2.10 to 3.2.12. | |
</action> | |
<action dev="ggregory" issue="POOL-367" type="update" due-to="Per Lundberg"> | |
Fix typo in package private method name stopEvitor() -> stopEvictor() #22. | |
</action> | |
<action dev="ggregory" issue="POOL-361" type="fix" due-to="Pablo, Phil Steitz, Bruno P. Kinoshita"> | |
Move validation for newly created objects into create(). Fixes #23. | |
</action> | |
<action dev="ggregory" type="add" issue="POOL-370" due-to="Mark Thomas, Gary Gregory"> | |
Add org.apache.commons.pool2.PooledObject#getBorrowedCount(). | |
</action> | |
<action dev="ggregory" type="add" issue="POOL-371" due-to="Matt Sicker, Gary Gregory"> | |
Add org.apache.commons.pool2.PooledObject#setRequireFullStackTrace(boolean). | |
</action> | |
<action dev="ggregory" type="fix" issue="POOL-352" due-to=" Volker Kleinschmidt"> | |
CallStackUtils mishandles security manager check part 1. | |
</action> | |
</release> | |
<release version="2.6.2" date="2019-03-05" description="This is a maintenance release (Java 7)."> | |
<action dev="ggregory" issue="POOL-362" type="fix"> | |
Always null out org.apache.commons.pool2.impl.BaseGenericObjectPool.evictionIterator to match org.apache.commons.pool2.impl.BaseGenericObjectPool.evictor. | |
</action> | |
<action dev="ggregory" issue="POOL-363" type="fix" due-to="Josh Landin"> | |
Evictor Thread prevents Spring Context shutdown in standalone app. | |
</action> | |
<action dev="ggregory" issue="POOL-348" type="fix" due-to="Josh Landin"> | |
The commons-pool-evictor-thread should run as a Deamon. | |
</action> | |
</release> | |
<release version="2.6.1" date="2019-02-08" description="This is a maintenance release (Java 7)."> | |
<action dev="struberg" issue="POOL-340" type="fix" due-to="Pavel Kolesov"> | |
Correct validateObject with concurrent borrowObject | |
</action> | |
<action dev="struberg" issue="POOL-356" type="fix"> | |
Fix deadlock on massive concurrent requests | |
</action> | |
<action dev="ggregory" issue="POOL-345" type="update"> | |
Update optional library cglib from 3.2.6 to 3.2.9. | |
</action> | |
<action dev="ggregory" issue="POOL-346" type="update" due-to="Michael Chen"> | |
Move common configuration setter to BaseGenericObjectPool #9. | |
</action> | |
<action dev="ggregory" issue="POOL-347" type="fix" due-to="Shunsuke Nakamura"> | |
Method borrowObject waits for maxWaitMillis over in pool full. | |
</action> | |
<action dev="ggregory" issue="POOL-349" type="update"> | |
Update optional library asm-util from 6.2 to 7.0. | |
</action> | |
<action dev="ggregory" issue="POOL-359" type="fix" due-to="Michael Wintermeyer, Gary Gregory"> | |
NullPointerException closing multiple GenericObjectPools. | |
</action> | |
<action dev="ggregory" issue="POOL-360" type="update"> | |
Update optional library cglib from 3.2.9 to 3.2.10. | |
</action> | |
<action dev="ggregory" issue="POOL-326" type="fix" due-to="Chris Allison, Phil Steitz"> | |
Threading issue, NullPointerException and IllegalStateException in GenericKeyedObjectPool. | |
</action> | |
<action dev="ggregory" issue="POOL-352" type="fix" due-to="Volker Kleinschmidt, Gary Gregory"> | |
CallStackUtils mishandles security manager check (partial fix.) | |
</action> | |
</release> | |
<release version="2.6.0" date="2018-07-06" description="This is a maintenance release (Java 7)."> | |
<action dev="ggregory" issue="POOL-336" type="update" due-to="Wolfgang Glas"> | |
GenericObjectPool's borrowObject lock if create() fails with Error. | |
</action> | |
<action dev="ggregory" issue="POOL-339" type="update"> | |
Update optional library cglib from 3.2.5 to 3.2.6. | |
</action> | |
<action dev="markt" issue="POOL-337" type="fix" due-to="Reinald Verheij"> | |
Ensure cancelled eviction tasks are removed from scheduler. | |
</action> | |
<action dev="ggregory" issue="POOL-341" type="update"> | |
Update optional library asm-util from 6.0 to 6.1.1. | |
</action> | |
<action dev="ggregory" issue="POOL-342" type="update"> | |
Update optional library asm-util from 6.1.1 to 6.2. | |
</action> | |
<action dev="ggregory" issue="POOL-338" type="fix" due-to="Michael C, Gary Gregory"> | |
GenericObjectPool constructor may throw an exception under OSGi. | |
</action> | |
<action dev="ggregory" issue="POOL-324" type="fix" due-to="Jay Xu, Gary Gregory"> | |
org.apache.commons.pool2.impl.GenericObjectPool.getFactoryType() throws java.lang.ClassCastException. | |
</action> | |
<action dev="ggregory" issue="POOL-344" type="fix" due-to="Yulin Wang"> | |
Delete repeated call startEvictor. | |
</action> | |
</release> | |
<release version="2.5.0" date="2017-12-16" description="This is a minor release (Java 7)."> | |
<action dev="ggregory" issue="POOL-331" type="update"> | |
Update from Java 6 to 7. | |
</action> | |
<action dev="ggregory" issue="POOL-330" type="delete"> | |
Drop Ant build. | |
</action> | |
<action dev="ggregory" issue="POOL-332" type="add"> | |
ObjectPool and KeyedObject pool should extend Closeable. | |
</action> | |
<action dev="ggregory" issue="POOL-333" type="update"> | |
Update optional dependency asm-util from 5.2 to 6.0. | |
</action> | |
<action dev="ggregory" issue="POOL-334" type="update"> | |
org.apache.commons.pool2.impl.ThrowableCallStack.Snapshot is missing serialVersionUID. | |
</action> | |
<action dev="mattsicker" issue="POOL-335" type="add"> | |
Make abandoned logging stack trace requirements configurable. This also reverts | |
the default behavior introduced by POOL-320. | |
</action> | |
<action dev="mattsicker" issue="POOL-335" type="add"> | |
Make abandoned logging stack trace requirements configurable. This also reverts | |
the default behavior introduced by POOL-320. | |
</action> | |
</release> | |
<release version="2.4.3" date="2017-10-24" description="This is a patch release, including bug fixes only (Java 6)."> | |
<action dev="ggregory" issue="POOL-328" type="fix" due-to="Lorenzo Solano Martinez"> | |
Documentation with repeated words (sources, tests, and examples). | |
</action> | |
<action dev="ggregory" issue="POOL-317" type="fix" due-to="KeiichiFujino"> | |
Correction of default value of softMinEvictableIdleTimeMillis in BaseObjectPoolConfig. | |
</action> | |
<action dev="ggregory" issue="POOL-309" type="fix" due-to="jolestar, Roopam Patekar"> | |
Fix misspellings from "destory" to "destroy". | |
</action> | |
<action dev="markt" issue="POOL-306" type="fix" due-to="Adrian Crum"> | |
Ensure BaseGenericObjectPool.IdentityWrapper#equals() follows the expected | |
contract for equals(). | |
</action> | |
<action dev="markt" issue="POOL-303" type="fix"> | |
Ensure that threads do not block indefinitely if more than maxTotal | |
threads try to borrow an object at the same time and the factory fails to | |
create any objects. | |
</action> | |
<action dev="markt" issue="POOL-280" type="update" due-to="Jacopo Cappellato"> | |
Small refactoring of borrowObject() to reduce code duplication. | |
</action> | |
<action dev="markt" issue="POOL-307" type="update" due-to="Anthony Whitford"> | |
Replace inefficient use of keySet with entrySet in GKOP. | |
</action> | |
<action dev="markt" issue="POOL-310" type="fix" due-to="Ivan Iliev"> | |
Ensure that threads using GKOP do not block indefinitely if more than | |
maxTotal threads try to borrow objects with different keys at the same | |
time and the factory destroys objects on return. | |
</action> | |
<action dev="markt" type="fix"> | |
Ensure that any class name used for evictionPolicyClassName represents a | |
class that implements EvictionPolicy. | |
</action> | |
<action dev="markt" issue="POOL-315" type="fix" due-to="KeiichiFujino"> | |
Add a configurable delay (default 10 seconds) to wait when shutting down | |
an Evictor to allow the associated thread time to complete any current | |
evictions and to terminate. | |
</action> | |
<action dev="markt" type="fix"> | |
Ensure that a call to GKOP preparePool() takes account of other threads | |
that might create objects concurrently, particularly the Evictor. | |
</action> | |
<action dev="mattsicker" issue="POOL-320" type="add"> | |
Use more efficient stack walking mechanisms for usage tracking when possible. | |
</action> | |
<action dev="ggregory" issue="POOL-322" type="update"> | |
Update optional cglib library from 3.1 to 3.2.5. | |
</action> | |
<action dev="ggregory" issue="POOL-323" type="update"> | |
Update optional OW2 ASM from 5.0.4 to 5.2. | |
</action> | |
</release> | |
<release version="2.4.2" date="2015-08-01" description="This is a patch release, including bug fixes only (Java 6)."> | |
<action dev="psteitz" issue="POOL-298" type="fix"> | |
Changed default jmxNameBase in BaseObjectPoolConfig to the correct (null) | |
default. | |
</action> | |
<action dev="psteitz" issue="POOL-300" type="fix"> | |
Added PrintWriter flush to DefaultPooledObject's printStackTrace method. | |
</action> | |
</release> | |
<release version="2.4.1" date="2015-05-30" description= | |
"This is a patch release (Java 6), replacing a defective binary jar in version 2.4. Other | |
than the build configuration, the source distribution for version 2.4.1 is identical | |
to version 2.4."> | |
<action dev="psteitz" issue="POOL-297" type="fix"> | |
Reverted cobertura plugin update that caused binary jar corruption. | |
</action> | |
</release> | |
<release version="2.4" date="2015-05-27" description= | |
"This is a maintenance release that includes bug fixes and minor enhancements (Java 6)."> | |
<action dev="psteitz" type="fix" issue="POOL-287" due-to="Caleb Spare and Thomas Neidhart"> | |
Fixed capacity leak when an object is offered from a GenericKeyedObjectPool while it is | |
being validated by the evictor. | |
</action> | |
<action dev="psteitz" type="fix" issue="POOL-283"> | |
Eliminated the requirement that objects managed by GenericObjectPool or | |
GenericKeyedObjectPool be discernible by equals. Prior to this fix, | |
equal but distinct object instances could not be stored in the same pool. | |
</action> | |
<action dev="psteitz" type="fix" issue="POOL-284"> | |
Eliminated the requirement that object equality and hashcodes do not change | |
while objects are under management by GenericObjectPool or GenericKeyedObjectPool. | |
</action> | |
<action dev="markt" type="fix" issue="POOL-289" due-to="Luke Winkenbach"> | |
Fixed class loading for custom EvictionPolicy implementations that may not | |
be present in the class loader hierarchy of the Pool classes by falling | |
back to the class loader of the current class. | |
</action> | |
<action dev="psteitz" type="fix" issue="POOL-285"> | |
Ensured that when an instance that has already been returned to a pool is | |
returned again, the expected IllegalStateException is generated before the | |
returning object is re-validated or re-passivated. | |
</action> | |
<action dev="psteitz" type="add" issue="POOL-286"> | |
Added preparePool method to GenericObjectPool. | |
</action> | |
<action dev="ggregory" type="update" issue="POOL-296"> | |
Update asm-util from 5.0.3 to 5.0.4. | |
</action> | |
<action dev="psteitz" type="update" issue="POOL-293"> | |
Exposed getEvictionPolicy as protected in BaseGenericObjectPool. | |
</action> | |
</release> | |
<release version="2.3" date="2014-12-30" description= | |
"This is a maintenance release that includes bug fixes and minor enhancements (Java 6)."> | |
<action dev="psteitz" type="fix" issue="POOL-279" due-to="Jacopo Cappellato"> | |
Eliminated possibility that DefaultPoolObject#getIdleTimeMillis() could | |
return a negative value. Use by pool implementations would not hit this | |
bug. | |
</action> | |
<action dev="psteitz" type="fix" issue="POOL-275"> | |
Made wrapped BaseProxyHandler.pooledObject volatile. | |
</action> | |
<action dev="ecki" type="fix" issue="POOL-277" due-to="Lucas Pouzac"> | |
Replace synchronisation with lock-free maxBorrowWaitTimeMillis to | |
increase scalability. | |
</action> | |
<action dev="markt" type="fix" issue="POOL-276"> | |
Ensure that objects are not validated on borrow when testOnBorrow is set | |
to false, testOnCreate is set to true and the pool is exhausted at the | |
point borrowObject() is called. | |
</action> | |
<action dev="psteitz" type="fix" issue="POOL-270" due-to="Michael Berman"> | |
Fixed error in GenericKeyedObjectPool constructor causing minEvictableIdleTimeMillis | |
to be used in place of timeBetweenEvictionRunsMillis in eviction timer setup | |
when a GenericKeyedObjectPoolConfig instance is supplied to the constructor. | |
</action> | |
<action dev="markt" type="fix" issue="POOL-263"> | |
Fix a threading issue that meant that concurrent calls to close() and | |
returnObject() could result in some returned objects not being destroyed. | |
</action> | |
<action dev="psteitz" type="add" issue="POOL-262"> | |
Made fairness configurable for GenericObjectPool, GenericKeyedObjectPool. | |
</action> | |
<action dev="markt" type="fix" issue="POOL-261"> | |
Correctly mark cglib as an optional dependency and ensure that the OSGi | |
manifest information reflects that. | |
</action> | |
<action dev="markt" type="fix"> | |
Improve performance of statistics collection for pools that extend | |
BaseGenericObjectPool. | |
</action> | |
<action dev="psteitz" type="fix" issue="POOL-259"> | |
Made client wait time statistics accurate when pools are configured to | |
block indefinitely. Also modified computation to include latency clients | |
experience due to waiting on factory methods. | |
</action> | |
<action dev="ggregory" type="update" issue="POOL-273"> | |
Update cglib to 3.1 from 3.0. | |
</action> | |
<action dev="ggregory" type="update" issue="POOL-274"> | |
Update asm-util to 5.0.3 from 4.0. | |
</action> | |
<action dev="markt" type="fix"> | |
Prevent potential memory leaks when the Pool is dereferenced without being | |
closed. | |
</action> | |
<action dev="markt" type="fix"> | |
Prevent potential memory leaks with using an Evictor in a container | |
environment. | |
</action> | |
<action dev="markt" type="fix"> | |
Protect against a user provided eviction policy throwing an exception and | |
stopping the Evictor thread. | |
</action> | |
<action dev="markt" type="fix"> | |
Use the thread context class loader to load custom eviction policies. This | |
allows application provided eviction policies to be used in a container | |
environment when the pooling implementation is provided by the container. | |
</action> | |
<action dev="markt" type="fix" issue="POOL-281"> | |
Fix a potential infinite loop in the underlying Deque implementation. | |
</action> | |
</release> | |
<release version="2.2" date="2014-02-24" description= | |
"This is a maintenance release (Java 6) that adds a new testOnCreate configuration option | |
and fixes a small number of bugs."> | |
<action issue="POOL-248" dev="markt" type="fix" due-to="Warren Chen"> | |
Ensure that if an attempt is made to return an object multiple times that | |
the current active and idle object counts are not corrupted. | |
</action> | |
<action issue="POOL-249" dev="markt" type="fix" due-to="Ville Skyttä"> | |
Fix Javadoc issues when building docs with Java 8. | |
</action> | |
<action dev="markt" type="fix"> | |
Fix the remaining Javadoc warnings. | |
</action> | |
<action dev="markt" type="add"> | |
Add a new validation configuration option testOnCreate that tests an | |
object immediately after it is created. | |
</action> | |
</release> | |
<release version="2.1" date="2013-12-30" description= | |
"This is a maintenance release (Java 6) that includes a small number of new features as well as | |
including bugfixes and test case improvements."> | |
<action issue="POOL-243" dev="psteitz" type="fix" due-to="Michal Sabo"> | |
Added missing create counter decrement in GenericKeyedObjectPool create method on factory | |
exception path. Prior to this fix, exceptions thrown by factory makeObject calls could leak | |
per key capacity. | |
</action> | |
<action issue="POOL-240" dev="psteitz" type="fix" due-to="Dan McNulty"> | |
Ensured that blocked threads waiting on a depleted pool get served when | |
objects are destroyed due to validation or passivation failures in | |
returnObject or when a checked out instance is invalidated. | |
</action> | |
<action issue="POOL-241" dev="markt" type="add" due-to="Bruno P. Kinoshita"> | |
Expand the coverage of the unit tests. | |
</action> | |
<action dev="markt" type="add"> | |
Provide more control over the names under which Pools are registered in | |
JMX so components using the pools can register the pools they use under a | |
related name. | |
</action> | |
<action dev="markt" type="add"> | |
Include the number of times an object has been borrowed from the Pool when | |
the DefaultPooledObject wrapper is used and expose this property via JMX. | |
</action> | |
<action issue="POOL-245" dev="markt" type="fix" due-to="Bruno P. Kinoshita"> | |
Remove a duplicate null check and fix some typos in PoolUtils. | |
</action> | |
<action issue="POOL-246" dev="markt" type="fix" due-to="Bruno P. Kinoshita"> | |
Make the toString() method of ErodingKeyedObjectPool consistent with the | |
other pools. | |
</action> | |
<action issue="POOL-245" dev="markt" type="add" due-to="Bruno P. Kinoshita"> | |
Further expansion of the coverage of the unit tests. | |
</action> | |
</release> | |
<release version="2.0" date="2013-11-11" description= | |
"This is a major new release (Java 6) that provides significant performance improvements | |
in high concurrency environments. Pools now provide a mechanism for tracking | |
objects that have been borrowed from the pool but not returned. There have been | |
numerous API changes to support these and other new features as well as to | |
clarify behaviour and improve consistency across the API. This release requires | |
JDK level 1.6 or above."> | |
<action issue="POOL-211" dev="markt" type="add" due-to="Brad Koehn"> | |
Add support for proxy wrappers to ObjectPool and KeyedObjectPool. The | |
primary advantage of these wrappers is that use of pooled objects is | |
prevented after they have been returned to the pool. | |
</action> | |
<action issue="POOL-229" dev="psteitz" type="update"> | |
Added abandoned object removal (moved from DBCP) to GenericObjectPool. | |
</action> | |
<action issue="POOL-221" dev="markt" type="fix" > | |
PooledObject.state does not need to be volatile | |
</action> | |
<action issue="POOL-220" dev="markt" type="fix"> | |
Suppress a FindBugs warning | |
</action> | |
<action issue="POOL-217" dev="markt" type="update" due-to="sebb"> | |
Use an IODH for PoolUtils.MIN_IDLE_TIMER | |
</action> | |
<action issue="POOL-216" dev="markt" type="update" > | |
GenericKeyedObjectPool.ensureMinIdle(K) does not need to check getMinIdlePerKey(). | |
</action> | |
<action issue="POOL-215" dev="markt" type="fix" > | |
GenericKeyedObjectPool - multiple mutable fields not published safely. | |
</action> | |
<action issue="POOL-214" dev="markt" type="fix" > | |
GenericObjectPool.evictionPolicy not thread-safe | |
</action> | |
<action issue="POOL-212" dev="markt" type="fix" > | |
GenericObjectPool allows maxIdle < 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 (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> |