| <?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. |
| --> |
| <document> |
| <properties> |
| <title>Commons Pool Changes</title> |
| <author email="sandymac@apache.org">Sandy McArthur</author> |
| </properties> |
| <body> |
| |
| <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> |