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