Author: psteitz
Date: Mon May 25 14:34:21 2009
New Revision: 778428
URL: http://svn.apache.org/viewvc?rev=778428&view=rev
Log:
Javadoc improvements and source formatting (broke unreadably long lines). No
functional code change.
Modified:
commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericObjectPool.java
Modified:
commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericObjectPool.java
URL:
http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericObjectPool.java?rev=778428&r1=778427&r2=778428&view=diff
==============================================================================
---
commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericObjectPool.java
(original)
+++
commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericObjectPool.java
Mon May 25 14:34:21 2009
@@ -336,18 +336,22 @@
//--- constructors -----------------------------------------------
/**
- * Create a new <tt>GenericObjectPool</tt>.
+ * Create a new <tt>GenericObjectPool</tt> with default properties.
*/
public GenericObjectPool() {
-
this(null,DEFAULT_MAX_ACTIVE,DEFAULT_WHEN_EXHAUSTED_ACTION,DEFAULT_MAX_WAIT,DEFAULT_MAX_IDLE,DEFAULT_MIN_IDLE,DEFAULT_TEST_ON_BORROW,DEFAULT_TEST_ON_RETURN,DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS,DEFAULT_NUM_TESTS_PER_EVICTION_RUN,DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS,DEFAULT_TEST_WHILE_IDLE);
+ this(null, DEFAULT_MAX_ACTIVE, DEFAULT_WHEN_EXHAUSTED_ACTION,
DEFAULT_MAX_WAIT, DEFAULT_MAX_IDLE,
+ DEFAULT_MIN_IDLE, DEFAULT_TEST_ON_BORROW,
DEFAULT_TEST_ON_RETURN, DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS,
+ DEFAULT_NUM_TESTS_PER_EVICTION_RUN,
DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS, DEFAULT_TEST_WHILE_IDLE);
}
/**
- * Create a new <tt>GenericObjectPool</tt> using the specified values.
+ * Create a new <tt>GenericObjectPool</tt> using the specified factory.
* @param factory the (possibly <tt>null</tt>)PoolableObjectFactory to use
to create, validate and destroy objects
*/
public GenericObjectPool(PoolableObjectFactory factory) {
-
this(factory,DEFAULT_MAX_ACTIVE,DEFAULT_WHEN_EXHAUSTED_ACTION,DEFAULT_MAX_WAIT,DEFAULT_MAX_IDLE,DEFAULT_MIN_IDLE,DEFAULT_TEST_ON_BORROW,DEFAULT_TEST_ON_RETURN,DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS,DEFAULT_NUM_TESTS_PER_EVICTION_RUN,DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS,DEFAULT_TEST_WHILE_IDLE);
+ this(factory, DEFAULT_MAX_ACTIVE, DEFAULT_WHEN_EXHAUSTED_ACTION,
DEFAULT_MAX_WAIT, DEFAULT_MAX_IDLE,
+ DEFAULT_MIN_IDLE, DEFAULT_TEST_ON_BORROW,
DEFAULT_TEST_ON_RETURN, DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS,
+ DEFAULT_NUM_TESTS_PER_EVICTION_RUN,
DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS, DEFAULT_TEST_WHILE_IDLE);
}
/**
@@ -356,7 +360,10 @@
* @param config a non-<tt>null</tt> {...@link GenericObjectPool.Config}
describing my configuration
*/
public GenericObjectPool(PoolableObjectFactory factory,
GenericObjectPool.Config config) {
-
this(factory,config.maxActive,config.whenExhaustedAction,config.maxWait,config.maxIdle,config.minIdle,config.testOnBorrow,config.testOnReturn,config.timeBetweenEvictionRunsMillis,config.numTestsPerEvictionRun,config.minEvictableIdleTimeMillis,config.testWhileIdle,config.softMinEvictableIdleTimeMillis,
config.lifo);
+ this(factory, config.maxActive, config.whenExhaustedAction,
config.maxWait, config.maxIdle, config.minIdle,
+ config.testOnBorrow, config.testOnReturn,
config.timeBetweenEvictionRunsMillis,
+ config.numTestsPerEvictionRun,
config.minEvictableIdleTimeMillis, config.testWhileIdle,
+ config.softMinEvictableIdleTimeMillis, config.lifo);
}
/**
@@ -365,7 +372,9 @@
* @param maxActive the maximum number of objects that can be borrowed
from me at one time (see {...@link #setMaxActive})
*/
public GenericObjectPool(PoolableObjectFactory factory, int maxActive) {
-
this(factory,maxActive,DEFAULT_WHEN_EXHAUSTED_ACTION,DEFAULT_MAX_WAIT,DEFAULT_MAX_IDLE,DEFAULT_MIN_IDLE,DEFAULT_TEST_ON_BORROW,DEFAULT_TEST_ON_RETURN,DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS,DEFAULT_NUM_TESTS_PER_EVICTION_RUN,DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS,DEFAULT_TEST_WHILE_IDLE);
+ this(factory, maxActive, DEFAULT_WHEN_EXHAUSTED_ACTION,
DEFAULT_MAX_WAIT, DEFAULT_MAX_IDLE, DEFAULT_MIN_IDLE,
+ DEFAULT_TEST_ON_BORROW, DEFAULT_TEST_ON_RETURN,
DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS,
+ DEFAULT_NUM_TESTS_PER_EVICTION_RUN,
DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS, DEFAULT_TEST_WHILE_IDLE);
}
/**
@@ -373,128 +382,194 @@
* @param factory the (possibly <tt>null</tt>)PoolableObjectFactory to use
to create, validate and destroy objects
* @param maxActive the maximum number of objects that can be borrowed
from me at one time (see {...@link #setMaxActive})
* @param whenExhaustedAction the action to take when the pool is
exhausted (see {...@link #getWhenExhaustedAction})
- * @param maxWait the maximum amount of time to wait for an idle object
when the pool is exhausted an and <i>whenExhaustedAction</i> is {...@link
#WHEN_EXHAUSTED_BLOCK} (otherwise ignored) (see {...@link #getMaxWait})
+ * @param maxWait the maximum amount of time to wait for an idle object
when the pool is exhausted an and
+ * <i>whenExhaustedAction</i> is {...@link #WHEN_EXHAUSTED_BLOCK}
(otherwise ignored) (see {...@link #getMaxWait})
*/
public GenericObjectPool(PoolableObjectFactory factory, int maxActive,
byte whenExhaustedAction, long maxWait) {
-
this(factory,maxActive,whenExhaustedAction,maxWait,DEFAULT_MAX_IDLE,DEFAULT_MIN_IDLE,DEFAULT_TEST_ON_BORROW,DEFAULT_TEST_ON_RETURN,DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS,DEFAULT_NUM_TESTS_PER_EVICTION_RUN,DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS,DEFAULT_TEST_WHILE_IDLE);
+ this(factory, maxActive, whenExhaustedAction, maxWait,
DEFAULT_MAX_IDLE, DEFAULT_MIN_IDLE, DEFAULT_TEST_ON_BORROW,
+ DEFAULT_TEST_ON_RETURN,
DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS, DEFAULT_NUM_TESTS_PER_EVICTION_RUN,
+ DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS,
DEFAULT_TEST_WHILE_IDLE);
}
/**
* Create a new <tt>GenericObjectPool</tt> using the specified values.
* @param factory the (possibly <tt>null</tt>)PoolableObjectFactory to use
to create, validate and destroy objects
- * @param maxActive the maximum number of objects that can be borrowed
from me at one time (see {...@link #setMaxActive})
+ * @param maxActive the maximum number of objects that can be borrowed at
one time (see {...@link #setMaxActive})
* @param whenExhaustedAction the action to take when the pool is
exhausted (see {...@link #getWhenExhaustedAction})
- * @param maxWait the maximum amount of time to wait for an idle object
when the pool is exhausted an and <i>whenExhaustedAction</i> is {...@link
#WHEN_EXHAUSTED_BLOCK} (otherwise ignored) (see {...@link #getMaxWait})
- * @param testOnBorrow whether or not to validate objects before they are
returned by the {...@link #borrowObject} method (see {...@link
#getTestOnBorrow})
- * @param testOnReturn whether or not to validate objects after they are
returned to the {...@link #returnObject} method (see {...@link
#getTestOnReturn})
- */
- public GenericObjectPool(PoolableObjectFactory factory, int maxActive,
byte whenExhaustedAction, long maxWait, boolean testOnBorrow, boolean
testOnReturn) {
-
this(factory,maxActive,whenExhaustedAction,maxWait,DEFAULT_MAX_IDLE,DEFAULT_MIN_IDLE,testOnBorrow,testOnReturn,DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS,DEFAULT_NUM_TESTS_PER_EVICTION_RUN,DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS,DEFAULT_TEST_WHILE_IDLE);
+ * @param maxWait the maximum amount of time to wait for an idle object
when the pool is exhausted an and
+ * <i>whenExhaustedAction</i> is {...@link #WHEN_EXHAUSTED_BLOCK}
(otherwise ignored) (see {...@link #getMaxWait})
+ * @param testOnBorrow whether or not to validate objects before they are
returned by the {...@link #borrowObject} method
+ * (see {...@link #getTestOnBorrow})
+ * @param testOnReturn whether or not to validate objects after they are
returned to the {...@link #returnObject} method
+ * (see {...@link #getTestOnReturn})
+ */
+ public GenericObjectPool(PoolableObjectFactory factory, int maxActive,
byte whenExhaustedAction, long maxWait,
+ boolean testOnBorrow, boolean testOnReturn) {
+ this(factory, maxActive, whenExhaustedAction, maxWait,
DEFAULT_MAX_IDLE, DEFAULT_MIN_IDLE, testOnBorrow,
+ testOnReturn, DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS,
DEFAULT_NUM_TESTS_PER_EVICTION_RUN,
+ DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS,
DEFAULT_TEST_WHILE_IDLE);
}
/**
* Create a new <tt>GenericObjectPool</tt> using the specified values.
* @param factory the (possibly <tt>null</tt>)PoolableObjectFactory to use
to create, validate and destroy objects
- * @param maxActive the maximum number of objects that can be borrowed
from me at one time (see {...@link #setMaxActive})
+ * @param maxActive the maximum number of objects that can be borrowed at
one time (see {...@link #setMaxActive})
* @param whenExhaustedAction the action to take when the pool is
exhausted (see {...@link #getWhenExhaustedAction})
- * @param maxWait the maximum amount of time to wait for an idle object
when the pool is exhausted an and <i>whenExhaustedAction</i> is {...@link
#WHEN_EXHAUSTED_BLOCK} (otherwise ignored) (see {...@link #getMaxWait})
+ * @param maxWait the maximum amount of time to wait for an idle object
when the pool is exhausted and
+ * <i>whenExhaustedAction</i> is {...@link #WHEN_EXHAUSTED_BLOCK}
(otherwise ignored) (see {...@link #getMaxWait})
* @param maxIdle the maximum number of idle objects in my pool (see
{...@link #getMaxIdle})
*/
public GenericObjectPool(PoolableObjectFactory factory, int maxActive,
byte whenExhaustedAction, long maxWait, int maxIdle) {
-
this(factory,maxActive,whenExhaustedAction,maxWait,maxIdle,DEFAULT_MIN_IDLE,DEFAULT_TEST_ON_BORROW,DEFAULT_TEST_ON_RETURN,DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS,DEFAULT_NUM_TESTS_PER_EVICTION_RUN,DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS,DEFAULT_TEST_WHILE_IDLE);
+ this(factory, maxActive, whenExhaustedAction, maxWait, maxIdle,
DEFAULT_MIN_IDLE, DEFAULT_TEST_ON_BORROW,
+ DEFAULT_TEST_ON_RETURN,
DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS, DEFAULT_NUM_TESTS_PER_EVICTION_RUN,
+ DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS,
DEFAULT_TEST_WHILE_IDLE);
}
/**
* Create a new <tt>GenericObjectPool</tt> using the specified values.
* @param factory the (possibly <tt>null</tt>)PoolableObjectFactory to use
to create, validate and destroy objects
- * @param maxActive the maximum number of objects that can be borrowed
from me at one time (see {...@link #setMaxActive})
+ * @param maxActive the maximum number of objects that can be borrowed at
one time (see {...@link #setMaxActive})
* @param whenExhaustedAction the action to take when the pool is
exhausted (see {...@link #getWhenExhaustedAction})
- * @param maxWait the maximum amount of time to wait for an idle object
when the pool is exhausted an and <i>whenExhaustedAction</i> is {...@link
#WHEN_EXHAUSTED_BLOCK} (otherwise ignored) (see {...@link #getMaxWait})
+ * @param maxWait the maximum amount of time to wait for an idle object
when the pool is exhausted and
+ * <i>whenExhaustedAction</i> is {...@link #WHEN_EXHAUSTED_BLOCK}
(otherwise ignored) (see {...@link #getMaxWait})
* @param maxIdle the maximum number of idle objects in my pool (see
{...@link #getMaxIdle})
- * @param testOnBorrow whether or not to validate objects before they are
returned by the {...@link #borrowObject} method (see {...@link
#getTestOnBorrow})
- * @param testOnReturn whether or not to validate objects after they are
returned to the {...@link #returnObject} method (see {...@link
#getTestOnReturn})
- */
- public GenericObjectPool(PoolableObjectFactory factory, int maxActive,
byte whenExhaustedAction, long maxWait, int maxIdle, boolean testOnBorrow,
boolean testOnReturn) {
-
this(factory,maxActive,whenExhaustedAction,maxWait,maxIdle,DEFAULT_MIN_IDLE,testOnBorrow,testOnReturn,DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS,DEFAULT_NUM_TESTS_PER_EVICTION_RUN,DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS,DEFAULT_TEST_WHILE_IDLE);
+ * @param testOnBorrow whether or not to validate objects before they are
returned by the {...@link #borrowObject} method
+ * (see {...@link #getTestOnBorrow})
+ * @param testOnReturn whether or not to validate objects after they are
returned to the {...@link #returnObject} method
+ * (see {...@link #getTestOnReturn})
+ */
+ public GenericObjectPool(PoolableObjectFactory factory, int maxActive,
byte whenExhaustedAction, long maxWait,
+ int maxIdle, boolean testOnBorrow, boolean testOnReturn) {
+ this(factory, maxActive, whenExhaustedAction, maxWait, maxIdle,
DEFAULT_MIN_IDLE, testOnBorrow, testOnReturn,
+ DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS,
DEFAULT_NUM_TESTS_PER_EVICTION_RUN,
+ DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS,
DEFAULT_TEST_WHILE_IDLE);
}
/**
* Create a new <tt>GenericObjectPool</tt> using the specified values.
* @param factory the (possibly <tt>null</tt>)PoolableObjectFactory to use
to create, validate and destroy objects
- * @param maxActive the maximum number of objects that can be borrowed
from me at one time (see {...@link #setMaxActive})
+ * @param maxActive the maximum number of objects that can be borrowed at
one time (see {...@link #setMaxActive})
* @param whenExhaustedAction the action to take when the pool is
exhausted (see {...@link #setWhenExhaustedAction})
- * @param maxWait the maximum amount of time to wait for an idle object
when the pool is exhausted an and <i>whenExhaustedAction</i> is {...@link
#WHEN_EXHAUSTED_BLOCK} (otherwise ignored) (see {...@link #setMaxWait})
+ * @param maxWait the maximum amount of time to wait for an idle object
when the pool is exhausted and
+ * <i>whenExhaustedAction</i> is {...@link #WHEN_EXHAUSTED_BLOCK}
(otherwise ignored) (see {...@link #setMaxWait})
* @param maxIdle the maximum number of idle objects in my pool (see
{...@link #setMaxIdle})
- * @param testOnBorrow whether or not to validate objects before they are
returned by the {...@link #borrowObject} method (see {...@link
#setTestOnBorrow})
- * @param testOnReturn whether or not to validate objects after they are
returned to the {...@link #returnObject} method (see {...@link
#setTestOnReturn})
- * @param timeBetweenEvictionRunsMillis the amount of time (in
milliseconds) to sleep between examining idle objects for eviction (see
{...@link #setTimeBetweenEvictionRunsMillis})
- * @param numTestsPerEvictionRun the number of idle objects to examine per
run within the idle object eviction thread (if any) (see {...@link
#setNumTestsPerEvictionRun})
- * @param minEvictableIdleTimeMillis the minimum number of milliseconds an
object can sit idle in the pool before it is eligible for eviction (see
{...@link #setMinEvictableIdleTimeMillis})
- * @param testWhileIdle whether or not to validate objects in the idle
object eviction thread, if any (see {...@link #setTestWhileIdle})
- */
- public GenericObjectPool(PoolableObjectFactory factory, int maxActive,
byte whenExhaustedAction, long maxWait, int maxIdle, boolean testOnBorrow,
boolean testOnReturn, long timeBetweenEvictionRunsMillis, int
numTestsPerEvictionRun, long minEvictableIdleTimeMillis, boolean testWhileIdle)
{
- this(factory, maxActive, whenExhaustedAction, maxWait, maxIdle,
DEFAULT_MIN_IDLE, testOnBorrow, testOnReturn, timeBetweenEvictionRunsMillis,
numTestsPerEvictionRun, minEvictableIdleTimeMillis, testWhileIdle);
+ * @param testOnBorrow whether or not to validate objects before they are
returned by the {...@link #borrowObject}
+ * method (see {...@link #setTestOnBorrow})
+ * @param testOnReturn whether or not to validate objects after they are
returned to the {...@link #returnObject} method
+ * (see {...@link #setTestOnReturn})
+ * @param timeBetweenEvictionRunsMillis the amount of time (in
milliseconds) to sleep between examining idle objects
+ * for eviction (see {...@link #setTimeBetweenEvictionRunsMillis})
+ * @param numTestsPerEvictionRun the number of idle objects to examine per
run within the idle object eviction thread
+ * (if any) (see {...@link #setNumTestsPerEvictionRun})
+ * @param minEvictableIdleTimeMillis the minimum number of milliseconds an
object can sit idle in the pool before it
+ * is eligible for eviction (see {...@link #setMinEvictableIdleTimeMillis})
+ * @param testWhileIdle whether or not to validate objects in the idle
object eviction thread, if any
+ * (see {...@link #setTestWhileIdle})
+ */
+ public GenericObjectPool(PoolableObjectFactory factory, int maxActive,
byte whenExhaustedAction, long maxWait,
+ int maxIdle, boolean testOnBorrow, boolean testOnReturn, long
timeBetweenEvictionRunsMillis,
+ int numTestsPerEvictionRun, long minEvictableIdleTimeMillis,
boolean testWhileIdle) {
+ this(factory, maxActive, whenExhaustedAction, maxWait, maxIdle,
DEFAULT_MIN_IDLE, testOnBorrow, testOnReturn,
+ timeBetweenEvictionRunsMillis, numTestsPerEvictionRun,
minEvictableIdleTimeMillis, testWhileIdle);
}
/**
* Create a new <tt>GenericObjectPool</tt> using the specified values.
* @param factory the (possibly <tt>null</tt>)PoolableObjectFactory to use
to create, validate and destroy objects
- * @param maxActive the maximum number of objects that can be borrowed
from me at one time (see {...@link #setMaxActive})
+ * @param maxActive the maximum number of objects that can be borrowed at
one time (see {...@link #setMaxActive})
* @param whenExhaustedAction the action to take when the pool is
exhausted (see {...@link #setWhenExhaustedAction})
- * @param maxWait the maximum amount of time to wait for an idle object
when the pool is exhausted an and <i>whenExhaustedAction</i> is {...@link
#WHEN_EXHAUSTED_BLOCK} (otherwise ignored) (see {...@link #setMaxWait})
+ * @param maxWait the maximum amount of time to wait for an idle object
when the pool is exhausted and
+ * <i>whenExhaustedAction</i> is {...@link #WHEN_EXHAUSTED_BLOCK}
(otherwise ignored) (see {...@link #setMaxWait})
* @param maxIdle the maximum number of idle objects in my pool (see
{...@link #setMaxIdle})
* @param minIdle the minimum number of idle objects in my pool (see
{...@link #setMinIdle})
- * @param testOnBorrow whether or not to validate objects before they are
returned by the {...@link #borrowObject} method (see {...@link
#setTestOnBorrow})
- * @param testOnReturn whether or not to validate objects after they are
returned to the {...@link #returnObject} method (see {...@link
#setTestOnReturn})
- * @param timeBetweenEvictionRunsMillis the amount of time (in
milliseconds) to sleep between examining idle objects for eviction (see
{...@link #setTimeBetweenEvictionRunsMillis})
- * @param numTestsPerEvictionRun the number of idle objects to examine per
run within the idle object eviction thread (if any) (see {...@link
#setNumTestsPerEvictionRun})
- * @param minEvictableIdleTimeMillis the minimum number of milliseconds an
object can sit idle in the pool before it is eligible for eviction (see
{...@link #setMinEvictableIdleTimeMillis})
- * @param testWhileIdle whether or not to validate objects in the idle
object eviction thread, if any (see {...@link #setTestWhileIdle})
- */
- public GenericObjectPool(PoolableObjectFactory factory, int maxActive,
byte whenExhaustedAction, long maxWait, int maxIdle, int minIdle, boolean
testOnBorrow, boolean testOnReturn, long timeBetweenEvictionRunsMillis, int
numTestsPerEvictionRun, long minEvictableIdleTimeMillis, boolean testWhileIdle)
{
- this(factory, maxActive, whenExhaustedAction, maxWait, maxIdle,
minIdle, testOnBorrow, testOnReturn, timeBetweenEvictionRunsMillis,
numTestsPerEvictionRun, minEvictableIdleTimeMillis, testWhileIdle,
DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME_MILLIS);
+ * @param testOnBorrow whether or not to validate objects before they are
returned by the {...@link #borrowObject} method
+ * (see {...@link #setTestOnBorrow})
+ * @param testOnReturn whether or not to validate objects after they are
returned to the {...@link #returnObject} method
+ * (see {...@link #setTestOnReturn})
+ * @param timeBetweenEvictionRunsMillis the amount of time (in
milliseconds) to sleep between examining idle objects
+ * for eviction (see {...@link #setTimeBetweenEvictionRunsMillis})
+ * @param numTestsPerEvictionRun the number of idle objects to examine per
run within the idle object eviction thread
+ * (if any) (see {...@link #setNumTestsPerEvictionRun})
+ * @param minEvictableIdleTimeMillis the minimum number of milliseconds an
object can sit idle in the pool before
+ * it is eligible for eviction (see {...@link
#setMinEvictableIdleTimeMillis})
+ * @param testWhileIdle whether or not to validate objects in the idle
object eviction thread, if any
+ * (see {...@link #setTestWhileIdle})
+ */
+ public GenericObjectPool(PoolableObjectFactory factory, int maxActive,
byte whenExhaustedAction, long maxWait,
+ int maxIdle, int minIdle, boolean testOnBorrow, boolean
testOnReturn, long timeBetweenEvictionRunsMillis,
+ int numTestsPerEvictionRun, long minEvictableIdleTimeMillis,
boolean testWhileIdle) {
+ this(factory, maxActive, whenExhaustedAction, maxWait, maxIdle,
minIdle, testOnBorrow, testOnReturn,
+ timeBetweenEvictionRunsMillis, numTestsPerEvictionRun,
minEvictableIdleTimeMillis, testWhileIdle,
+ DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME_MILLIS);
}
/**
* Create a new <tt>GenericObjectPool</tt> using the specified values.
* @param factory the (possibly <tt>null</tt>)PoolableObjectFactory to use
to create, validate and destroy objects
- * @param maxActive the maximum number of objects that can be borrowed
from me at one time (see {...@link #setMaxActive})
+ * @param maxActive the maximum number of objects that can be borrowed at
one time (see {...@link #setMaxActive})
* @param whenExhaustedAction the action to take when the pool is
exhausted (see {...@link #setWhenExhaustedAction})
- * @param maxWait the maximum amount of time to wait for an idle object
when the pool is exhausted an and <i>whenExhaustedAction</i> is {...@link
#WHEN_EXHAUSTED_BLOCK} (otherwise ignored) (see {...@link #setMaxWait})
+ * @param maxWait the maximum amount of time to wait for an idle object
when the pool is exhausted and
+ * <i>whenExhaustedAction</i> is {...@link #WHEN_EXHAUSTED_BLOCK}
(otherwise ignored) (see {...@link #setMaxWait})
* @param maxIdle the maximum number of idle objects in my pool (see
{...@link #setMaxIdle})
* @param minIdle the minimum number of idle objects in my pool (see
{...@link #setMinIdle})
- * @param testOnBorrow whether or not to validate objects before they are
returned by the {...@link #borrowObject} method (see {...@link
#setTestOnBorrow})
- * @param testOnReturn whether or not to validate objects after they are
returned to the {...@link #returnObject} method (see {...@link
#setTestOnReturn})
- * @param timeBetweenEvictionRunsMillis the amount of time (in
milliseconds) to sleep between examining idle objects for eviction (see
{...@link #setTimeBetweenEvictionRunsMillis})
- * @param numTestsPerEvictionRun the number of idle objects to examine per
run within the idle object eviction thread (if any) (see {...@link
#setNumTestsPerEvictionRun})
- * @param minEvictableIdleTimeMillis the minimum number of milliseconds an
object can sit idle in the pool before it is eligible for eviction (see
{...@link #setMinEvictableIdleTimeMillis})
- * @param testWhileIdle whether or not to validate objects in the idle
object eviction thread, if any (see {...@link #setTestWhileIdle})
- * @param softMinEvictableIdleTimeMillis the minimum number of
milliseconds an object can sit idle in the pool before it is eligible for
eviction with the extra condition that at least "minIdle" amount of object
remain in the pool. (see {...@link #setSoftMinEvictableIdleTimeMillis})
+ * @param testOnBorrow whether or not to validate objects before they are
returned by the {...@link #borrowObject}
+ * method (see {...@link #setTestOnBorrow})
+ * @param testOnReturn whether or not to validate objects after they are
returned to the {...@link #returnObject}
+ * method (see {...@link #setTestOnReturn})
+ * @param timeBetweenEvictionRunsMillis the amount of time (in
milliseconds) to sleep between examining idle objects
+ * for eviction (see {...@link #setTimeBetweenEvictionRunsMillis})
+ * @param numTestsPerEvictionRun the number of idle objects to examine per
run within the idle object eviction thread
+ * (if any) (see {...@link #setNumTestsPerEvictionRun})
+ * @param minEvictableIdleTimeMillis the minimum number of milliseconds an
object can sit idle in the pool before
+ * it is eligible for eviction (see {...@link
#setMinEvictableIdleTimeMillis})
+ * @param testWhileIdle whether or not to validate objects in the idle
object eviction thread, if any
+ * (see {...@link #setTestWhileIdle})
+ * @param softMinEvictableIdleTimeMillis the minimum number of
milliseconds an object can sit idle in the pool before it is
+ * eligible for eviction with the extra condition that at least "minIdle"
amount of object remain in the pool.
+ * (see {...@link #setSoftMinEvictableIdleTimeMillis})
* @since Pool 1.3
*/
- public GenericObjectPool(PoolableObjectFactory factory, int maxActive,
byte whenExhaustedAction, long maxWait, int maxIdle, int minIdle, boolean
testOnBorrow, boolean testOnReturn, long timeBetweenEvictionRunsMillis, int
numTestsPerEvictionRun, long minEvictableIdleTimeMillis, boolean testWhileIdle,
long softMinEvictableIdleTimeMillis) {
- this(factory, maxActive, whenExhaustedAction, maxWait, maxIdle,
minIdle, testOnBorrow, testOnReturn, timeBetweenEvictionRunsMillis,
numTestsPerEvictionRun, minEvictableIdleTimeMillis, testWhileIdle,
softMinEvictableIdleTimeMillis, DEFAULT_LIFO);
+ public GenericObjectPool(PoolableObjectFactory factory, int maxActive,
byte whenExhaustedAction, long maxWait,
+ int maxIdle, int minIdle, boolean testOnBorrow, boolean
testOnReturn, long timeBetweenEvictionRunsMillis,
+ int numTestsPerEvictionRun, long minEvictableIdleTimeMillis,
boolean testWhileIdle,
+ long softMinEvictableIdleTimeMillis) {
+ this(factory, maxActive, whenExhaustedAction, maxWait, maxIdle,
minIdle, testOnBorrow, testOnReturn,
+ timeBetweenEvictionRunsMillis, numTestsPerEvictionRun,
minEvictableIdleTimeMillis, testWhileIdle,
+ softMinEvictableIdleTimeMillis, DEFAULT_LIFO);
}
/**
* Create a new <tt>GenericObjectPool</tt> using the specified values.
* @param factory the (possibly <tt>null</tt>)PoolableObjectFactory to use
to create, validate and destroy objects
- * @param maxActive the maximum number of objects that can be borrowed
from me at one time (see {...@link #setMaxActive})
+ * @param maxActive the maximum number of objects that can be borrowed at
one time (see {...@link #setMaxActive})
* @param whenExhaustedAction the action to take when the pool is
exhausted (see {...@link #setWhenExhaustedAction})
- * @param maxWait the maximum amount of time to wait for an idle object
when the pool is exhausted an and <i>whenExhaustedAction</i> is {...@link
#WHEN_EXHAUSTED_BLOCK} (otherwise ignored) (see {...@link #setMaxWait})
+ * @param maxWait the maximum amount of time to wait for an idle object
when the pool is exhausted and
+ * <i>whenExhaustedAction</i> is {...@link #WHEN_EXHAUSTED_BLOCK}
(otherwise ignored) (see {...@link #setMaxWait})
* @param maxIdle the maximum number of idle objects in my pool (see
{...@link #setMaxIdle})
* @param minIdle the minimum number of idle objects in my pool (see
{...@link #setMinIdle})
- * @param testOnBorrow whether or not to validate objects before they are
returned by the {...@link #borrowObject} method (see {...@link
#setTestOnBorrow})
- * @param testOnReturn whether or not to validate objects after they are
returned to the {...@link #returnObject} method (see {...@link
#setTestOnReturn})
- * @param timeBetweenEvictionRunsMillis the amount of time (in
milliseconds) to sleep between examining idle objects for eviction (see
{...@link #setTimeBetweenEvictionRunsMillis})
- * @param numTestsPerEvictionRun the number of idle objects to examine per
run within the idle object eviction thread (if any) (see {...@link
#setNumTestsPerEvictionRun})
- * @param minEvictableIdleTimeMillis the minimum number of milliseconds an
object can sit idle in the pool before it is eligible for eviction (see
{...@link #setMinEvictableIdleTimeMillis})
- * @param testWhileIdle whether or not to validate objects in the idle
object eviction thread, if any (see {...@link #setTestWhileIdle})
- * @param softMinEvictableIdleTimeMillis the minimum number of
milliseconds an object can sit idle in the pool before it is eligible for
eviction with the extra condition that at least "minIdle" amount of object
remain in the pool. (see {...@link #setSoftMinEvictableIdleTimeMillis})
- * @param lifo whether or not objects are returned in last-in-first-out
order from the idle object pool (see {...@link #setLifo})
+ * @param testOnBorrow whether or not to validate objects before they are
returned by the {...@link #borrowObject}
+ * method (see {...@link #setTestOnBorrow})
+ * @param testOnReturn whether or not to validate objects after they are
returned to the {...@link #returnObject}
+ * method (see {...@link #setTestOnReturn})
+ * @param timeBetweenEvictionRunsMillis the amount of time (in
milliseconds) to sleep between examining idle
+ * objects for eviction (see {...@link #setTimeBetweenEvictionRunsMillis})
+ * @param numTestsPerEvictionRun the number of idle objects to examine per
run within the idle object eviction
+ * thread (if any) (see {...@link #setNumTestsPerEvictionRun})
+ * @param minEvictableIdleTimeMillis the minimum number of milliseconds an
object can sit idle in the pool before
+ * it is eligible for eviction (see {...@link
#setMinEvictableIdleTimeMillis})
+ * @param testWhileIdle whether or not to validate objects in the idle
object eviction thread, if any
+ * (see {...@link #setTestWhileIdle})
+ * @param softMinEvictableIdleTimeMillis the minimum number of
milliseconds an object can sit idle in the
+ * pool before it is eligible for eviction with the extra condition that
at least "minIdle" amount of object
+ * remain in the pool. (see {...@link #setSoftMinEvictableIdleTimeMillis})
+ * @param lifo whether or not objects are returned in last-in-first-out
order from the idle object pool
+ * (see {...@link #setLifo})
* @since Pool 1.4
*/
- public GenericObjectPool(PoolableObjectFactory factory, int maxActive,
byte whenExhaustedAction, long maxWait, int maxIdle, int minIdle, boolean
testOnBorrow, boolean testOnReturn, long timeBetweenEvictionRunsMillis, int
numTestsPerEvictionRun, long minEvictableIdleTimeMillis, boolean testWhileIdle,
long softMinEvictableIdleTimeMillis, boolean lifo) {
+ public GenericObjectPool(PoolableObjectFactory factory, int maxActive,
byte whenExhaustedAction, long maxWait,
+ int maxIdle, int minIdle, boolean testOnBorrow, boolean
testOnReturn, long timeBetweenEvictionRunsMillis,
+ int numTestsPerEvictionRun, long minEvictableIdleTimeMillis,
boolean testWhileIdle,
+ long softMinEvictableIdleTimeMillis, boolean lifo) {
_factory = factory;
_maxActive = maxActive;
_lifo = lifo;
@@ -785,7 +860,7 @@
* idle object evictor thread (if any).
* <p>
* When a negative value is supplied, <tt>ceil({...@link
#getNumIdle})/abs({...@link #getNumTestsPerEvictionRun})</tt>
- * tests will be run. I.e., when the value is <i>-n</i>, roughly one
<i>n</i>th of the
+ * tests will be run. That is, when the value is <i>-n</i>, roughly one
<i>n</i>th of the
* idle objects will be tested per run.
*
* @param numTestsPerEvictionRun max number of objects to examine during
each evictor run.
@@ -815,7 +890,8 @@
* (if any).
* When non-positive, no objects will be evicted from the pool
* due to idle time alone.
- * @param minEvictableIdleTimeMillis minimum amount of time an object may
sit idle in the pool before it is eligible for eviction.
+ * @param minEvictableIdleTimeMillis minimum amount of time an object may
sit idle in the pool before
+ * it is eligible for eviction.
* @see #getMinEvictableIdleTimeMillis
* @see #setTimeBetweenEvictionRunsMillis
*/
@@ -845,7 +921,8 @@
* When non-positive, no objects will be evicted from the pool
* due to idle time alone.
*
- * @param softMinEvictableIdleTimeMillis minimum amount of time an object
may sit idle in the pool before it is eligible for eviction.
+ * @param softMinEvictableIdleTimeMillis minimum amount of time an object
may sit idle in the pool before
+ * it is eligible for eviction.
* @since Pool 1.3
* @see #getSoftMinEvictableIdleTimeMillis
*/
@@ -934,6 +1011,33 @@
//-- ObjectPool methods ------------------------------------------
+ /**
+ * <p>Borrows an object from the pool.</p>
+ *
+ * <p>If there is an idle instance available in the pool, then either the
most-recently returned
+ * (if {...@link #getLifo() lifo} == true) or "oldest" (lifo == false)
instance sitting idle in the pool
+ * will be activated and returned. If activation fails, or {...@link
#getTestOnBorrow() testOnBorrow} is set
+ * to true and validation fails, the instance is destroyed and the next
available instance is examined.
+ * This continues until either a valid instance is returned or there are
no more idle instances available.</p>
+ *
+ * <p>If there are no idle instances available in the pool, behavior
depends on the {...@link #getMaxActive() maxActive}
+ * and (if applicable) {...@link #getWhenExhaustedAction()
whenExhaustedAction} and {...@link #getMaxWait() maxWait}
+ * properties. If the number of instances checked out from the pool is
less than <code>maxActive,</code> a new
+ * instance is created, activated and (if applicable) validated and
returned to the caller.</p>
+ *
+ * <p>If the pool is exhausted (no available idle instances and no
capacity to create new ones),
+ * this method will either block ({...@link #WHEN_EXHAUSTED_BLOCK}), throw
a <code>NoSuchElementException</code>
+ * ({...@link #WHEN_EXHAUSTED_FAIL}), or grow ({...@link
#WHEN_EXHAUSTED_GROW} - ignoring maxActive).
+ * The length of time that this method will block when
<code>whenExhaustedAction == WHEN_EXHAUSTED_BLOCK</code>
+ * is determined by the {...@link #getMaxWait() maxWait} property.</p>
+ *
+ * <p>When the pool is exhausted, multiple calling threads may be
simultaneously blocked waiting for instances
+ * to become available. As of pool 1.5, a "fairness" algorithm has been
implemented to ensure that threads receive
+ * available instances in request arrival order.</p>
+ *
+ * @return object instance
+ * @throws NoSuchElementException if an instance cannot be returned
+ */
public Object borrowObject() throws Exception {
long starttime = System.currentTimeMillis();
Latch latch = new Latch();
@@ -1005,7 +1109,8 @@
continue; // keep looping
}
default:
- throw new
IllegalArgumentException("WhenExhaustedAction property " + whenExhaustedAction
+ " not recognized.");
+ throw new
IllegalArgumentException("WhenExhaustedAction property " + whenExhaustedAction +
+ " not recognized.");
}
}
}
@@ -1100,6 +1205,13 @@
}
}
+ /**
+ * <p>Invalidates the given object instance. Decrements the active count
+ * and destroys the instance.</p>
+ *
+ * @param obj instance to invalidate
+ * @throws Exception if an exception occurs destroying the object
+ */
public void invalidateObject(Object obj) throws Exception {
try {
if (_factory != null) {
@@ -1127,9 +1239,11 @@
destroy(toDestroy);
}
- /*
+ /**
* Private method to destroy all the objects in a collection. Assumes
* objects in the collection are instances of ObjectTimestampPair
+ *
+ * @param c Collection of objects to destroy
*/
private void destroy(Collection c) {
for (Iterator it = c.iterator(); it.hasNext();) {
@@ -1165,7 +1279,14 @@
}
/**
- * {...@inheritdoc}
+ * <p>Returns an object instance to the pool.</p>
+ *
+ * <p>If {...@link #getMaxIdle() maxIdle} is set to a positive value and
the number of idle instances
+ * has reached this value, the returning instance is destroyed.</p>
+ *
+ * <p>If {...@link #getTestOnReturn() testOnReturn} == true, the returning
instance is validated before being returned
+ * to the idle instance pool. In this case, if validation fails, the
instance is destroyed.</p>
+ *
* <p><strong>Note: </strong> There is no guard to prevent an object
* being returned to the pool multiple times. Clients are expected to
* discard references to returned objects and ensure that an object is not
@@ -1173,6 +1294,8 @@
* borrowed again between returns). Violating this contract will result in
* the same object appearing multiple times in the pool and pool counters
* (numActive, numIdle) returning incorrect values.</p>
+ *
+ * @param obj instance to return to the pool
*/
public void returnObject(Object obj) throws Exception {
try {
@@ -1186,7 +1309,7 @@
}
// TODO: Correctness here depends on control in
addObjectToPool.
// These two methods should be refactored, removing the
- // "behavior flag",decrementNumActive, from addObjectToPool.
+ // "behavior flag", decrementNumActive, from addObjectToPool.
synchronized(this) {
_numActive--;
allocate();
@@ -1195,6 +1318,19 @@
}
}
+ /**
+ * <p>Adds an object to the pool.</p>
+ *
+ * <p>Validates the object if testOnReturn == true and passivates it
before returning it to the pool.
+ * if validation or passivation fails, or maxIdle is set and there is no
room in the pool, the instance
+ * is destroyed.</p>
+ *
+ * <p>Calls {...@link #allocate()} on successful completion</p>
+ *
+ * @param obj instance to add to the pool
+ * @param decrementNumActive whether or not to decrement the active count
+ * @throws Exception
+ */
private void addObjectToPool(Object obj, boolean decrementNumActive)
throws Exception {
boolean success = true;
if(_testOnReturn && !(_factory.validateObject(obj))) {
@@ -1247,6 +1383,15 @@
}
+ /**
+ * Closes the pool. Once the pool is closed, {...@link #borrowObject()}
+ * will fail with IllegalStateException, but {...@link
#returnObject(Object)} and
+ * {...@link #invalidateObject(Object)} will continue to work. This method
does not
+ * {...@link #clear()} the pool. The method is idempotent - that is, it is
OK to call it on a closed
+ * pool.
+ *
+ * @throws Exception
+ */
public void close() throws Exception {
super.close();
synchronized (this) {
@@ -1323,12 +1468,12 @@
boolean removeObject = false;
final long idleTimeMilis = System.currentTimeMillis() -
pair.tstamp;
- if ((getMinEvictableIdleTimeMillis() > 0)
- && (idleTimeMilis > getMinEvictableIdleTimeMillis())) {
+ if ((getMinEvictableIdleTimeMillis() > 0) &&
+ (idleTimeMilis > getMinEvictableIdleTimeMillis())) {
removeObject = true;
- } else if ((getSoftMinEvictableIdleTimeMillis() > 0)
- && (idleTimeMilis > getSoftMinEvictableIdleTimeMillis())
- && ((getNumIdle() + 1)> getMinIdle())) { // +1 accounts
for object we are processing
+ } else if ((getSoftMinEvictableIdleTimeMillis() > 0) &&
+ (idleTimeMilis > getSoftMinEvictableIdleTimeMillis()) &&
+ ((getNumIdle() + 1)> getMinIdle())) { // +1 accounts for
object we are processing
removeObject = true;
}
if(getTestWhileIdle() && !removeObject) {
@@ -1397,6 +1542,16 @@
}
}
+ /**
+ * This returns the number of objects to create during the pool
+ * sustain cycle. This will ensure that the minimum number of idle
+ * instances is maintained without going past the maxActive value.
+ *
+ * @param incrementInternal - Should the count of objects currently under
+ * some form of internal processing be
+ * incremented?
+ * @return The number of objects to be created
+ */
private synchronized int calculateDeficit(boolean incrementInternal) {
int objectDeficit = getMinIdle() - getNumIdle();
if (_maxActive > 0) {
@@ -1503,7 +1658,8 @@
/**
* A simple "struct" encapsulating the
* configuration information for a {...@link GenericObjectPool}.
- * @see
GenericObjectPool#GenericObjectPool(org.apache.commons.pool.PoolableObjectFactory,org.apache.commons.pool.impl.GenericObjectPool.Config)
+ * @see
GenericObjectPool#GenericObjectPool(org.apache.commons.pool.PoolableObjectFactory,
+ * org.apache.commons.pool.impl.GenericObjectPool.Config)
* @see GenericObjectPool#setConfig
*/
public static class Config {
@@ -1568,19 +1724,41 @@
* threads request objects.
*/
private static final class Latch {
+
+ /** object timestamp pair allocated to this latch */
private ObjectTimestampPair _pair;
+
+ /** Wheter or not this latch may create an object instance */
private boolean _mayCreate = false;
+ /**
+ * Returns ObjectTimestampPair allocated to this latch
+ * @return ObjectTimestampPair allocated to this latch
+ */
private synchronized ObjectTimestampPair getPair() {
return _pair;
}
+
+ /**
+ * Sets ObjectTimestampPair on this latch
+ * @param pair ObjectTimestampPair allocated to this latch
+ */
private synchronized void setPair(ObjectTimestampPair pair) {
_pair = pair;
}
+ /**
+ * Whether or not this latch may create an object instance
+ * @return true if this latch has an instance creation permit
+ */
private synchronized boolean mayCreate() {
return _mayCreate;
}
+
+ /**
+ * Sets the mayCreate property
+ * @param mayCreate new value for mayCreate
+ */
private synchronized void setMayCreate(boolean mayCreate) {
_mayCreate = mayCreate;
}