|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.apache.commons.pool.BaseKeyedObjectPool org.apache.commons.pool.impl.GenericKeyedObjectPool
public class GenericKeyedObjectPool
A configurable KeyedObjectPool
implementation.
When coupled with the appropriate KeyedPoolableObjectFactory
,
GenericKeyedObjectPool
provides robust pooling functionality for
keyed objects. A GenericKeyedObjectPool
can be viewed as a map
of pools, keyed on the (unique) key values provided to the
preparePool
, addObject
or
borrowObject
methods. Each time a new key value is
provided to one of these methods, a new pool is created under the given key
to be managed by the containing GenericKeyedObjectPool.
A GenericKeyedObjectPool
provides a number of configurable
parameters:
maxActive
controls the maximum number of objects
(per key) that can allocated by the pool (checked out to client threads,
or idle in the pool) at one time. When non-positive, there is no limit
to the number of objects per key. When maxActive
is
reached, the keyed pool is said to be exhausted. The default setting for
this parameter is 8.
maxTotal
sets a global limit on the number of objects
that can be in circulation (active or idle) within the combined set of
pools. When non-positive, there is no limit to the total number of
objects in circulation. When maxTotal
is exceeded,
all keyed pools are exhausted. When maxTotal
is set to a
positive value and borrowObject
is invoked
when at the limit with no idle instances available, an attempt is made to
create room by clearing the oldest 15% of the elements from the keyed
pools. The default setting for this parameter is -1 (no limit).
maxIdle
controls the maximum number of objects that can
sit idle in the pool (per key) at any time. When negative, there
is no limit to the number of objects that may be idle per key. The
default setting for this parameter is 8.
whenExhaustedAction
specifies the
behavior of the borrowObject
method when a keyed
pool is exhausted:
whenExhaustedAction
is
WHEN_EXHAUSTED_FAIL
, borrowObject
will throw
a NoSuchElementException
whenExhaustedAction
is
WHEN_EXHAUSTED_GROW
, borrowObject
will create a new
object and return it (essentially making maxActive
meaningless.)
whenExhaustedAction
is WHEN_EXHAUSTED_BLOCK
, borrowObject
will block
(invoke wait
until a new or idle object is available.
If a positive maxWait
value is supplied, the borrowObject
will block for at
most that many milliseconds, after which a NoSuchElementException
will be thrown. If maxWait
is non-positive,
the borrowObject
method will block indefinitely.
whenExhaustedAction
setting is
WHEN_EXHAUSTED_BLOCK
.
testOnBorrow
is set, the pool will
attempt to validate each object before it is returned from the
borrowObject
method. (Using the provided factory's
validateObject
method.)
Objects that fail to validate will be dropped from the pool, and a
different object will be borrowed. The default setting for this parameter
is false.
testOnReturn
is set, the pool will
attempt to validate each object before it is returned to the pool in the
returnObject
method. (Using the provided factory's
validateObject
method.) Objects that fail to validate will be dropped from the pool.
The default setting for this parameter is false.
Optionally, one may configure the pool to examine and possibly evict objects as they sit idle in the pool and to ensure that a minimum number of idle objects is maintained for each key. This is performed by an "idle object eviction" thread, which runs asynchronously. Caution should be used when configuring this optional feature. Eviction runs require an exclusive synchronization lock on the pool, so if they run too frequently and / or incur excessive latency when creating, destroying or validating object instances, performance issues may result. The idle object eviction thread may be configured using the following attributes:
timeBetweenEvictionRunsMillis
indicates how long the eviction thread should sleep before "runs" of examining
idle objects. When non-positive, no eviction thread will be launched. The
default setting for this parameter is -1 (i.e., by default, idle object
eviction is disabled).
minEvictableIdleTimeMillis
specifies the minimum amount of time that an object may sit idle in the
pool before it is eligible for eviction due to idle time. When
non-positive, no object will be dropped from the pool due to idle time
alone. This setting has no effect unless
timeBetweenEvictionRunsMillis > 0.
The default setting
for this parameter is 30 minutes.
testWhileIdle
indicates whether or not idle
objects should be validated using the factory's
validateObject
method
during idle object eviction runs. Objects that fail to validate will be
dropped from the pool. This setting has no effect unless
timeBetweenEvictionRunsMillis > 0.
The default setting
for this parameter is false.
minIdle
sets a target value for the minimum number of
idle objects (per key) that should always be available. If this parameter
is set to a positive number and
timeBetweenEvictionRunsMillis > 0,
each time the idle object
eviction thread runs, it will try to create enough idle instances so that
there will be minIdle
idle instances available under each
key. This parameter is also used by preparePool
if true
is provided as that method's
populateImmediately
parameter. The default setting for this
parameter is 0.
The pools can be configured to behave as LIFO queues with respect to idle objects - always returning the most recently used object from the pool, or as FIFO queues, where borrowObject always returns the oldest object in the idle object pool.
Lifo
determines whether or not the pools return idle objects in
last-in-first-out order. The default setting for this parameter is
true.
GenericKeyedObjectPool is not usable without a KeyedPoolableObjectFactory
. A
non-null
factory must be provided either as a constructor argument
or via a call to setFactory
before the pool is used.
Implementation note: To prevent possible deadlocks, care has been taken to ensure that no call to a factory method will occur within a synchronization block. See POOL-125 and DBCP-44 for more information.
GenericObjectPool
Nested Class Summary | |
---|---|
static class |
GenericKeyedObjectPool.Config
A simple "struct" encapsulating the configuration information for a GenericKeyedObjectPool . |
Field Summary | |
---|---|
static boolean |
DEFAULT_LIFO
The default LIFO status. |
static int |
DEFAULT_MAX_ACTIVE
The default cap on the total number of active instances (per key) from the pool. |
static int |
DEFAULT_MAX_IDLE
The default cap on the number of idle instances (per key) in the pool. |
static int |
DEFAULT_MAX_TOTAL
The default cap on the the overall maximum number of objects that can exist at one time. |
static long |
DEFAULT_MAX_WAIT
The default maximum amount of time (in milliseconds) the borrowObject(java.lang.Object) method should block before throwing
an exception when the pool is exhausted and the
"when exhausted" action is
WHEN_EXHAUSTED_BLOCK . |
static long |
DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS
The default value for getMinEvictableIdleTimeMillis() . |
static int |
DEFAULT_MIN_IDLE
The default minimum level of idle objects in the pool. |
static int |
DEFAULT_NUM_TESTS_PER_EVICTION_RUN
The default number of objects to examine per run in the idle object evictor. |
static boolean |
DEFAULT_TEST_ON_BORROW
The default "test on borrow" value. |
static boolean |
DEFAULT_TEST_ON_RETURN
The default "test on return" value. |
static boolean |
DEFAULT_TEST_WHILE_IDLE
The default "test while idle" value. |
static long |
DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS
The default "time between eviction runs" value. |
static byte |
DEFAULT_WHEN_EXHAUSTED_ACTION
The default "when exhausted action" for the pool. |
static byte |
WHEN_EXHAUSTED_BLOCK
A "when exhausted action" type indicating that when the pool is exhausted (i.e., the maximum number of active objects has been reached), the borrowObject(java.lang.Object)
method should block until a new object is available, or the
maximum wait time has been reached. |
static byte |
WHEN_EXHAUSTED_FAIL
A "when exhausted action" type indicating that when the pool is exhausted (i.e., the maximum number of active objects has been reached), the borrowObject(java.lang.Object)
method should fail, throwing a NoSuchElementException . |
static byte |
WHEN_EXHAUSTED_GROW
A "when exhausted action" type indicating that when the pool is exhausted (i.e., the maximum number of active objects has been reached), the borrowObject(java.lang.Object)
method should simply create a new object anyway. |
Constructor Summary | |
---|---|
GenericKeyedObjectPool()
Create a new GenericKeyedObjectPool with no factory. |
|
GenericKeyedObjectPool(KeyedPoolableObjectFactory factory)
Create a new GenericKeyedObjectPool using the specified values. |
|
GenericKeyedObjectPool(KeyedPoolableObjectFactory factory,
GenericKeyedObjectPool.Config config)
Create a new GenericKeyedObjectPool using the specified values. |
|
GenericKeyedObjectPool(KeyedPoolableObjectFactory factory,
int maxActive)
Create a new GenericKeyedObjectPool using the specified values. |
|
GenericKeyedObjectPool(KeyedPoolableObjectFactory factory,
int maxActive,
byte whenExhaustedAction,
long maxWait)
Create a new GenericKeyedObjectPool using the specified values. |
|
GenericKeyedObjectPool(KeyedPoolableObjectFactory factory,
int maxActive,
byte whenExhaustedAction,
long maxWait,
boolean testOnBorrow,
boolean testOnReturn)
Create a new GenericKeyedObjectPool using the specified values. |
|
GenericKeyedObjectPool(KeyedPoolableObjectFactory factory,
int maxActive,
byte whenExhaustedAction,
long maxWait,
int maxIdle)
Create a new GenericKeyedObjectPool using the specified values. |
|
GenericKeyedObjectPool(KeyedPoolableObjectFactory factory,
int maxActive,
byte whenExhaustedAction,
long maxWait,
int maxIdle,
boolean testOnBorrow,
boolean testOnReturn)
Create a new GenericKeyedObjectPool using the specified values. |
|
GenericKeyedObjectPool(KeyedPoolableObjectFactory factory,
int maxActive,
byte whenExhaustedAction,
long maxWait,
int maxIdle,
boolean testOnBorrow,
boolean testOnReturn,
long timeBetweenEvictionRunsMillis,
int numTestsPerEvictionRun,
long minEvictableIdleTimeMillis,
boolean testWhileIdle)
Create a new GenericKeyedObjectPool using the specified values. |
|
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)
Create a new GenericKeyedObjectPool using the specified values. |
|
GenericKeyedObjectPool(KeyedPoolableObjectFactory factory,
int maxActive,
byte whenExhaustedAction,
long maxWait,
int maxIdle,
int maxTotal,
int minIdle,
boolean testOnBorrow,
boolean testOnReturn,
long timeBetweenEvictionRunsMillis,
int numTestsPerEvictionRun,
long minEvictableIdleTimeMillis,
boolean testWhileIdle)
Create a new GenericKeyedObjectPool using the specified values. |
|
GenericKeyedObjectPool(KeyedPoolableObjectFactory factory,
int maxActive,
byte whenExhaustedAction,
long maxWait,
int maxIdle,
int maxTotal,
int minIdle,
boolean testOnBorrow,
boolean testOnReturn,
long timeBetweenEvictionRunsMillis,
int numTestsPerEvictionRun,
long minEvictableIdleTimeMillis,
boolean testWhileIdle,
boolean lifo)
Create a new GenericKeyedObjectPool using the specified values. |
Method Summary | |
---|---|
void |
addObject(Object key)
Create an object using the factory ,
passivate it, and then place it in the idle object pool. |
Object |
borrowObject(Object key)
Borrows an object from the keyed pool associated with the given key. |
void |
clear()
Clears any objects sitting idle in the pool by removing them from the idle instance pool and then invoking the configured KeyedPoolableObjectFactory.destroyObject(Object, Object) method on
each idle instance. |
void |
clear(Object key)
Clears the specified pool, removing all pooled instances corresponding to the given key . |
void |
clearOldest()
Clears oldest 15% of objects in pool. |
void |
close()
Closes the keyed object pool. |
void |
evict()
Perform numTests idle object eviction tests, evicting
examined objects that meet the criteria for eviction. |
boolean |
getLifo()
Whether or not the idle object pools act as LIFO queues. |
int |
getMaxActive()
Returns the cap on the number of object instances allocated by the pool (checked out or idle), per key. |
int |
getMaxIdle()
Returns the cap on the number of "idle" instances per key. |
int |
getMaxTotal()
Returns the overall maximum number of objects (across pools) that can exist at one time. |
long |
getMaxWait()
Returns the maximum amount of time (in milliseconds) the borrowObject(java.lang.Object) method should block before throwing
an exception when the pool is exhausted and the
"when exhausted" action is
WHEN_EXHAUSTED_BLOCK . |
long |
getMinEvictableIdleTimeMillis()
Returns the minimum amount of time an object may sit idle in the pool before it is eligible for eviction by the idle object evictor (if any). |
int |
getMinIdle()
Returns the minimum number of idle objects to maintain in each of the keyed pools. |
int |
getNumActive()
Returns the total number of instances current borrowed from this pool but not yet returned. |
int |
getNumActive(Object key)
Returns the number of instances currently borrowed from but not yet returned to the pool corresponding to the given key . |
int |
getNumIdle()
Returns the total number of instances currently idle in this pool. |
int |
getNumIdle(Object key)
Returns the number of instances corresponding to the given key currently idle in this pool. |
int |
getNumTestsPerEvictionRun()
Returns the max number of objects to examine during each run of the idle object evictor thread (if any). |
boolean |
getTestOnBorrow()
When true , objects will be
validated
before being returned by the borrowObject(java.lang.Object)
method. |
boolean |
getTestOnReturn()
When true , objects will be
validated
before being returned to the pool within the
returnObject(java.lang.Object, java.lang.Object) . |
boolean |
getTestWhileIdle()
When true , objects will be
validated
by the idle object evictor (if any). |
long |
getTimeBetweenEvictionRunsMillis()
Returns the number of milliseconds to sleep between runs of the idle object evictor thread. |
byte |
getWhenExhaustedAction()
Returns the action to take when the borrowObject(java.lang.Object) method
is invoked when the pool is exhausted (the maximum number
of "active" objects has been reached). |
void |
invalidateObject(Object key,
Object obj)
Invalidates the object instance associated with the given key. |
void |
preparePool(Object key,
boolean populateImmediately)
Registers a key for pool control. |
void |
returnObject(Object key,
Object obj)
Returns an object to a keyed pool. |
void |
setConfig(GenericKeyedObjectPool.Config conf)
Sets the configuration. |
void |
setFactory(KeyedPoolableObjectFactory factory)
Sets the keyed poolable object factory associated with this pool. |
void |
setLifo(boolean lifo)
Sets the LIFO property of the pools. |
void |
setMaxActive(int maxActive)
Sets the cap on the number of object instances managed by the pool per key. |
void |
setMaxIdle(int maxIdle)
Sets the cap on the number of "idle" instances in the pool. |
void |
setMaxTotal(int maxTotal)
Sets the cap on the total number of instances from all pools combined. |
void |
setMaxWait(long maxWait)
Sets the maximum amount of time (in milliseconds) the borrowObject(java.lang.Object) method should block before throwing
an exception when the pool is exhausted and the
"when exhausted" action is
WHEN_EXHAUSTED_BLOCK . |
void |
setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis)
Sets the minimum amount of time an object may sit idle in the pool before it is eligible for eviction by the idle object evictor (if any). |
void |
setMinIdle(int poolSize)
Sets the minimum number of idle objects to maintain in each of the keyed pools. |
void |
setNumTestsPerEvictionRun(int numTestsPerEvictionRun)
Sets the max number of objects to examine during each run of the idle object evictor thread (if any). |
void |
setTestOnBorrow(boolean testOnBorrow)
When true , objects will be
validated
before being returned by the borrowObject(java.lang.Object)
method. |
void |
setTestOnReturn(boolean testOnReturn)
When true , objects will be
validated
before being returned to the pool within the
returnObject(java.lang.Object, java.lang.Object) . |
void |
setTestWhileIdle(boolean testWhileIdle)
When true , objects will be
validated
by the idle object evictor (if any). |
void |
setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis)
Sets the number of milliseconds to sleep between runs of the idle object evictor thread. |
void |
setWhenExhaustedAction(byte whenExhaustedAction)
Sets the action to take when the borrowObject(java.lang.Object) method
is invoked when the pool is exhausted (the maximum number
of "active" objects has been reached). |
protected void |
startEvictor(long delay)
Start the eviction thread or service, or when delay is non-positive, stop it
if it is already running. |
Methods inherited from class org.apache.commons.pool.BaseKeyedObjectPool |
---|
assertOpen, isClosed |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static final byte WHEN_EXHAUSTED_FAIL
borrowObject(java.lang.Object)
method should fail, throwing a NoSuchElementException
.
WHEN_EXHAUSTED_BLOCK
,
WHEN_EXHAUSTED_GROW
,
setWhenExhaustedAction(byte)
,
Constant Field Valuespublic static final byte WHEN_EXHAUSTED_BLOCK
borrowObject(java.lang.Object)
method should block until a new object is available, or the
maximum wait time
has been reached.
WHEN_EXHAUSTED_FAIL
,
WHEN_EXHAUSTED_GROW
,
setMaxWait(long)
,
getMaxWait()
,
setWhenExhaustedAction(byte)
,
Constant Field Valuespublic static final byte WHEN_EXHAUSTED_GROW
borrowObject(java.lang.Object)
method should simply create a new object anyway.
WHEN_EXHAUSTED_FAIL
,
WHEN_EXHAUSTED_GROW
,
setWhenExhaustedAction(byte)
,
Constant Field Valuespublic static final int DEFAULT_MAX_IDLE
getMaxIdle()
,
setMaxIdle(int)
,
Constant Field Valuespublic static final int DEFAULT_MAX_ACTIVE
getMaxActive()
,
setMaxActive(int)
,
Constant Field Valuespublic static final int DEFAULT_MAX_TOTAL
getMaxTotal()
,
setMaxTotal(int)
,
Constant Field Valuespublic static final byte DEFAULT_WHEN_EXHAUSTED_ACTION
WHEN_EXHAUSTED_BLOCK
,
WHEN_EXHAUSTED_FAIL
,
WHEN_EXHAUSTED_GROW
,
setWhenExhaustedAction(byte)
,
Constant Field Valuespublic static final long DEFAULT_MAX_WAIT
borrowObject(java.lang.Object)
method should block before throwing
an exception when the pool is exhausted and the
"when exhausted" action
is
WHEN_EXHAUSTED_BLOCK
.
getMaxWait()
,
setMaxWait(long)
,
Constant Field Valuespublic static final boolean DEFAULT_TEST_ON_BORROW
getTestOnBorrow()
,
setTestOnBorrow(boolean)
,
Constant Field Valuespublic static final boolean DEFAULT_TEST_ON_RETURN
getTestOnReturn()
,
setTestOnReturn(boolean)
,
Constant Field Valuespublic static final boolean DEFAULT_TEST_WHILE_IDLE
getTestWhileIdle()
,
setTestWhileIdle(boolean)
,
getTimeBetweenEvictionRunsMillis()
,
setTimeBetweenEvictionRunsMillis(long)
,
Constant Field Valuespublic static final long DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS
getTimeBetweenEvictionRunsMillis()
,
setTimeBetweenEvictionRunsMillis(long)
,
Constant Field Valuespublic static final int DEFAULT_NUM_TESTS_PER_EVICTION_RUN
getNumTestsPerEvictionRun()
,
setNumTestsPerEvictionRun(int)
,
getTimeBetweenEvictionRunsMillis()
,
setTimeBetweenEvictionRunsMillis(long)
,
Constant Field Valuespublic static final long DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS
getMinEvictableIdleTimeMillis()
.
getMinEvictableIdleTimeMillis()
,
setMinEvictableIdleTimeMillis(long)
,
Constant Field Valuespublic static final int DEFAULT_MIN_IDLE
setMinIdle(int)
,
getMinIdle()
,
Constant Field Valuespublic static final boolean DEFAULT_LIFO
setLifo(boolean)
,
Constant Field ValuesConstructor Detail |
---|
public GenericKeyedObjectPool()
GenericKeyedObjectPool
with no factory.
GenericKeyedObjectPool(KeyedPoolableObjectFactory)
,
setFactory(KeyedPoolableObjectFactory)
public GenericKeyedObjectPool(KeyedPoolableObjectFactory factory)
GenericKeyedObjectPool
using the specified values.
factory
- the KeyedPoolableObjectFactory
to use to create, validate, and destroy
objects if not null
public GenericKeyedObjectPool(KeyedPoolableObjectFactory factory, GenericKeyedObjectPool.Config config)
GenericKeyedObjectPool
using the specified values.
factory
- the KeyedPoolableObjectFactory
to use to create, validate, and destroy objects
if not null
config
- a non-null
GenericKeyedObjectPool.Config
describing the configurationpublic GenericKeyedObjectPool(KeyedPoolableObjectFactory factory, int maxActive)
GenericKeyedObjectPool
using the specified values.
factory
- the KeyedPoolableObjectFactory
to use to create, validate, and destroy objects
if not null
maxActive
- the maximum number of objects that can be borrowed from me at one time (see setMaxActive(int)
)public GenericKeyedObjectPool(KeyedPoolableObjectFactory factory, int maxActive, byte whenExhaustedAction, long maxWait)
GenericKeyedObjectPool
using the specified values.
factory
- the KeyedPoolableObjectFactory
to use to create, validate, and destroy objects
if not null
maxActive
- the maximum number of objects that can be borrowed from me at one time (see setMaxActive(int)
)whenExhaustedAction
- the action to take when the pool is exhausted (see setWhenExhaustedAction(byte)
)maxWait
- the maximum amount of time to wait for an idle object when the pool is exhausted and
whenExhaustedAction
is WHEN_EXHAUSTED_BLOCK
(otherwise ignored) (see setMaxWait(long)
)public GenericKeyedObjectPool(KeyedPoolableObjectFactory factory, int maxActive, byte whenExhaustedAction, long maxWait, boolean testOnBorrow, boolean testOnReturn)
GenericKeyedObjectPool
using the specified values.
factory
- the KeyedPoolableObjectFactory
to use to create, validate, and destroy objects
if not null
maxActive
- the maximum number of objects that can be borrowed from me at one time (see setMaxActive(int)
)maxWait
- the maximum amount of time to wait for an idle object when the pool is exhausted and
whenExhaustedAction
is WHEN_EXHAUSTED_BLOCK
(otherwise ignored) (see setMaxWait(long)
)whenExhaustedAction
- the action to take when the pool is exhausted (see setWhenExhaustedAction(byte)
)testOnBorrow
- whether or not to validate objects before they are returned by the borrowObject(java.lang.Object)
method (see setTestOnBorrow(boolean)
)testOnReturn
- whether or not to validate objects after they are returned to the returnObject(java.lang.Object, java.lang.Object)
method (see setTestOnReturn(boolean)
)public GenericKeyedObjectPool(KeyedPoolableObjectFactory factory, int maxActive, byte whenExhaustedAction, long maxWait, int maxIdle)
GenericKeyedObjectPool
using the specified values.
factory
- the KeyedPoolableObjectFactory
to use to create, validate, and destroy objects
if not null
maxActive
- the maximum number of objects that can be borrowed from me at one time
(see setMaxActive(int)
)whenExhaustedAction
- the action to take when the pool is exhausted (see setWhenExhaustedAction(byte)
)maxWait
- the maximum amount of time to wait for an idle object when the pool is exhausted and
whenExhaustedAction
is WHEN_EXHAUSTED_BLOCK
(otherwise ignored) (see setMaxWait(long)
)maxIdle
- the maximum number of idle objects in my pool (see setMaxIdle(int)
)public GenericKeyedObjectPool(KeyedPoolableObjectFactory factory, int maxActive, byte whenExhaustedAction, long maxWait, int maxIdle, boolean testOnBorrow, boolean testOnReturn)
GenericKeyedObjectPool
using the specified values.
factory
- the KeyedPoolableObjectFactory
to use to create, validate, and destroy objects
if not null
maxActive
- the maximum number of objects that can be borrowed from me at one time
(see setMaxActive(int)
)whenExhaustedAction
- the action to take when the pool is exhausted (see setWhenExhaustedAction(byte)
)maxWait
- the maximum amount of time to wait for an idle object when the pool is exhausted and
whenExhaustedAction
is WHEN_EXHAUSTED_BLOCK
(otherwise ignored) (see getMaxWait()
)maxIdle
- the maximum number of idle objects in my pool (see setMaxIdle(int)
)testOnBorrow
- whether or not to validate objects before they are returned by the borrowObject(java.lang.Object)
method (see setTestOnBorrow(boolean)
)testOnReturn
- whether or not to validate objects after they are returned to the returnObject(java.lang.Object, java.lang.Object)
method (see setTestOnReturn(boolean)
)public GenericKeyedObjectPool(KeyedPoolableObjectFactory factory, int maxActive, byte whenExhaustedAction, long maxWait, int maxIdle, boolean testOnBorrow, boolean testOnReturn, long timeBetweenEvictionRunsMillis, int numTestsPerEvictionRun, long minEvictableIdleTimeMillis, boolean testWhileIdle)
GenericKeyedObjectPool
using the specified values.
factory
- the KeyedPoolableObjectFactory
to use to create, validate, and destroy objects
if not null
maxActive
- the maximum number of objects that can be borrowed from me at one time
(see setMaxActive(int)
)whenExhaustedAction
- the action to take when the pool is exhausted
(see setWhenExhaustedAction(byte)
)maxWait
- the maximum amount of time to wait for an idle object when the pool is exhausted and
whenExhaustedAction
is WHEN_EXHAUSTED_BLOCK
(otherwise ignored) (see setMaxWait(long)
)maxIdle
- the maximum number of idle objects in my pool (see setMaxIdle(int)
)testOnBorrow
- whether or not to validate objects before they are returned by the borrowObject(java.lang.Object)
method (see setTestOnBorrow(boolean)
)testOnReturn
- whether or not to validate objects after they are returned to the returnObject(java.lang.Object, java.lang.Object)
method (see setTestOnReturn(boolean)
)timeBetweenEvictionRunsMillis
- the amount of time (in milliseconds) to sleep between examining idle
objects for eviction (see setTimeBetweenEvictionRunsMillis(long)
)numTestsPerEvictionRun
- the number of idle objects to examine per run within the idle object eviction
thread (if any) (see setNumTestsPerEvictionRun(int)
)minEvictableIdleTimeMillis
- the minimum number of milliseconds an object can sit idle in the pool before
it is eligible for eviction (see setMinEvictableIdleTimeMillis(long)
)testWhileIdle
- whether or not to validate objects in the idle object eviction thread, if any
(see setTestWhileIdle(boolean)
)public 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)
GenericKeyedObjectPool
using the specified values.
factory
- the KeyedPoolableObjectFactory
to use to create, validate, and destroy objects
if not null
maxActive
- the maximum number of objects that can be borrowed from me at one time
(see setMaxActive(int)
)whenExhaustedAction
- the action to take when the pool is exhausted (see setWhenExhaustedAction(byte)
)maxWait
- the maximum amount of time to wait for an idle object when the pool is exhausted and
whenExhaustedAction
is WHEN_EXHAUSTED_BLOCK
(otherwise ignored) (see setMaxWait(long)
)maxIdle
- the maximum number of idle objects in my pool (see setMaxIdle(int)
)maxTotal
- the maximum number of objects that can exists at one time (see setMaxTotal(int)
)testOnBorrow
- whether or not to validate objects before they are returned by the borrowObject(java.lang.Object)
method (see setTestOnBorrow(boolean)
)testOnReturn
- whether or not to validate objects after they are returned to the returnObject(java.lang.Object, java.lang.Object)
method (see setTestOnReturn(boolean)
)timeBetweenEvictionRunsMillis
- the amount of time (in milliseconds) to sleep between examining idle
objects for eviction (see setTimeBetweenEvictionRunsMillis(long)
)numTestsPerEvictionRun
- the number of idle objects to examine per run within the idle object eviction
thread (if any) (see setNumTestsPerEvictionRun(int)
)minEvictableIdleTimeMillis
- the minimum number of milliseconds an object can sit idle in the pool
before it is eligible for eviction (see setMinEvictableIdleTimeMillis(long)
)testWhileIdle
- whether or not to validate objects in the idle object eviction thread, if any
(see setTestWhileIdle(boolean)
)public GenericKeyedObjectPool(KeyedPoolableObjectFactory factory, int maxActive, byte whenExhaustedAction, long maxWait, int maxIdle, int maxTotal, int minIdle, boolean testOnBorrow, boolean testOnReturn, long timeBetweenEvictionRunsMillis, int numTestsPerEvictionRun, long minEvictableIdleTimeMillis, boolean testWhileIdle)
GenericKeyedObjectPool
using the specified values.
factory
- the KeyedPoolableObjectFactory
to use to create, validate, and destroy objects
if not null
maxActive
- the maximum number of objects that can be borrowed at one time (see setMaxActive(int)
)whenExhaustedAction
- the action to take when the pool is exhausted (see setWhenExhaustedAction(byte)
)maxWait
- the maximum amount of time to wait for an idle object when the pool is exhausted and
whenExhaustedAction
is WHEN_EXHAUSTED_BLOCK
(otherwise ignored) (see setMaxWait(long)
)maxIdle
- the maximum number of idle objects in my pool (see setMaxIdle(int)
)maxTotal
- the maximum number of objects that can exists at one time (see setMaxTotal(int)
)minIdle
- the minimum number of idle objects to have in the pool at any one time (see setMinIdle(int)
)testOnBorrow
- whether or not to validate objects before they are returned by the borrowObject(java.lang.Object)
method (see setTestOnBorrow(boolean)
)testOnReturn
- whether or not to validate objects after they are returned to the returnObject(java.lang.Object, java.lang.Object)
method (see setTestOnReturn(boolean)
)timeBetweenEvictionRunsMillis
- the amount of time (in milliseconds) to sleep between examining idle
objects
for eviction (see setTimeBetweenEvictionRunsMillis(long)
)numTestsPerEvictionRun
- the number of idle objects to examine per run within the idle object eviction
thread (if any) (see setNumTestsPerEvictionRun(int)
)minEvictableIdleTimeMillis
- the minimum number of milliseconds an object can sit idle in the pool before
it is eligible for eviction (see setMinEvictableIdleTimeMillis(long)
)testWhileIdle
- whether or not to validate objects in the idle object eviction thread, if any
(see setTestWhileIdle(boolean)
)public GenericKeyedObjectPool(KeyedPoolableObjectFactory factory, int maxActive, byte whenExhaustedAction, long maxWait, int maxIdle, int maxTotal, int minIdle, boolean testOnBorrow, boolean testOnReturn, long timeBetweenEvictionRunsMillis, int numTestsPerEvictionRun, long minEvictableIdleTimeMillis, boolean testWhileIdle, boolean lifo)
GenericKeyedObjectPool
using the specified values.
factory
- the KeyedPoolableObjectFactory
to use to create, validate, and destroy objects
if not null
maxActive
- the maximum number of objects that can be borrowed at one time
(see setMaxActive(int)
)whenExhaustedAction
- the action to take when the pool is exhausted (see setWhenExhaustedAction(byte)
)maxWait
- the maximum amount of time to wait for an idle object when the pool is exhausted and
whenExhaustedAction
is WHEN_EXHAUSTED_BLOCK
(otherwise ignored) (see setMaxWait(long)
)maxIdle
- the maximum number of idle objects in my pool (see setMaxIdle(int)
)maxTotal
- the maximum number of objects that can exists at one time (see setMaxTotal(int)
)minIdle
- the minimum number of idle objects to have in the pool at any one time (see setMinIdle(int)
)testOnBorrow
- whether or not to validate objects before they are returned by the borrowObject(java.lang.Object)
method (see setTestOnBorrow(boolean)
)testOnReturn
- whether or not to validate objects after they are returned to the returnObject(java.lang.Object, java.lang.Object)
method (see setTestOnReturn(boolean)
)timeBetweenEvictionRunsMillis
- the amount of time (in milliseconds) to sleep between examining idle
objects for eviction (see setTimeBetweenEvictionRunsMillis(long)
)numTestsPerEvictionRun
- the number of idle objects to examine per run within the idle object eviction
thread (if any) (see setNumTestsPerEvictionRun(int)
)minEvictableIdleTimeMillis
- the minimum number of milliseconds an object can sit idle in the pool before
it is eligible for eviction (see setMinEvictableIdleTimeMillis(long)
)testWhileIdle
- whether or not to validate objects in the idle object eviction thread, if any
(see setTestWhileIdle(boolean)
)lifo
- whether or not the pools behave as LIFO (last in first out) queues (see setLifo(boolean)
)Method Detail |
---|
public int getMaxActive()
setMaxActive(int)
public void setMaxActive(int maxActive)
maxActive
- The cap on the number of object instances per key.
Use a negative value for no limit.getMaxActive()
public int getMaxTotal()
setMaxTotal(int)
public void setMaxTotal(int maxTotal)
maxTotal
is set to a
positive value and borrowObject
is invoked
when at the limit with no idle instances available, an attempt is made to
create room by clearing the oldest 15% of the elements from the keyed
pools.
maxTotal
- The cap on the total number of instances across pools.
Use a negative value for no limit.getMaxTotal()
public byte getWhenExhaustedAction()
borrowObject(java.lang.Object)
method
is invoked when the pool is exhausted (the maximum number
of "active" objects has been reached).
WHEN_EXHAUSTED_BLOCK
,
WHEN_EXHAUSTED_FAIL
or WHEN_EXHAUSTED_GROW
setWhenExhaustedAction(byte)
public void setWhenExhaustedAction(byte whenExhaustedAction)
borrowObject(java.lang.Object)
method
is invoked when the pool is exhausted (the maximum number
of "active" objects has been reached).
whenExhaustedAction
- the action code, which must be one of
WHEN_EXHAUSTED_BLOCK
, WHEN_EXHAUSTED_FAIL
,
or WHEN_EXHAUSTED_GROW
getWhenExhaustedAction()
public long getMaxWait()
borrowObject(java.lang.Object)
method should block before throwing
an exception when the pool is exhausted and the
"when exhausted" action
is
WHEN_EXHAUSTED_BLOCK
.
When less than or equal to 0, the borrowObject(java.lang.Object)
method
may block indefinitely.
setMaxWait(long)
,
setWhenExhaustedAction(byte)
,
WHEN_EXHAUSTED_BLOCK
public void setMaxWait(long maxWait)
borrowObject(java.lang.Object)
method should block before throwing
an exception when the pool is exhausted and the
"when exhausted" action
is
WHEN_EXHAUSTED_BLOCK
.
When less than or equal to 0, the borrowObject(java.lang.Object)
method
may block indefinitely.
maxWait
- the maximum number of milliseconds borrowObject will block or negative for indefinitely.getMaxWait()
,
setWhenExhaustedAction(byte)
,
WHEN_EXHAUSTED_BLOCK
public int getMaxIdle()
setMaxIdle(int)
public void setMaxIdle(int maxIdle)
maxIdle
- the maximum number of "idle" instances that can be held
in a given keyed pool. Use a negative value for no limit.getMaxIdle()
,
DEFAULT_MAX_IDLE
public void setMinIdle(int poolSize)
timeBetweenEvictionRunsMillis > 0
and attempts to ensure
that each pool has the required minimum number of instances are only
made during idle object eviction runs.
poolSize
- - The minimum size of the each keyed poolgetMinIdle()
,
setTimeBetweenEvictionRunsMillis(long)
public int getMinIdle()
timeBetweenEvictionRunsMillis > 0
and attempts to ensure
that each pool has the required minimum number of instances are only
made during idle object eviction runs.
setTimeBetweenEvictionRunsMillis(long)
public boolean getTestOnBorrow()
true
, objects will be
validated
before being returned by the borrowObject(java.lang.Object)
method. If the object fails to validate,
it will be dropped from the pool, and we will attempt
to borrow another.
true
if objects are validated before being borrowed.setTestOnBorrow(boolean)
public void setTestOnBorrow(boolean testOnBorrow)
true
, objects will be
validated
before being returned by the borrowObject(java.lang.Object)
method. If the object fails to validate,
it will be dropped from the pool, and we will attempt
to borrow another.
testOnBorrow
- whether object should be validated before being returned by borrowObject.getTestOnBorrow()
public boolean getTestOnReturn()
true
, objects will be
validated
before being returned to the pool within the
returnObject(java.lang.Object, java.lang.Object)
.
true
when objects will be validated before being returned.setTestOnReturn(boolean)
public void setTestOnReturn(boolean testOnReturn)
true
, objects will be
validated
before being returned to the pool within the
returnObject(java.lang.Object, java.lang.Object)
.
testOnReturn
- true
so objects will be validated before being returned.getTestOnReturn()
public long getTimeBetweenEvictionRunsMillis()
setTimeBetweenEvictionRunsMillis(long)
public void setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis)
timeBetweenEvictionRunsMillis
- milliseconds to sleep between evictor runs.getTimeBetweenEvictionRunsMillis()
public int getNumTestsPerEvictionRun()
setNumTestsPerEvictionRun(int)
,
setTimeBetweenEvictionRunsMillis(long)
public void setNumTestsPerEvictionRun(int numTestsPerEvictionRun)
When a negative value is supplied,
ceil(
tests will be run. I.e., when the value is getNumIdle()
)/abs(getNumTestsPerEvictionRun()
)-n
, roughly one n
th of the
idle objects will be tested per run. When the value is positive, the number of tests
actually performed in each run will be the minimum of this value and the number of instances
idle in the pools.
numTestsPerEvictionRun
- number of objects to examine each eviction run.setNumTestsPerEvictionRun(int)
,
setTimeBetweenEvictionRunsMillis(long)
public long getMinEvictableIdleTimeMillis()
setMinEvictableIdleTimeMillis(long)
,
setTimeBetweenEvictionRunsMillis(long)
public void setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis)
minEvictableIdleTimeMillis
- minimum amount of time an object may sit idle in the pool before
it is eligible for eviction.getMinEvictableIdleTimeMillis()
,
setTimeBetweenEvictionRunsMillis(long)
public boolean getTestWhileIdle()
true
, objects will be
validated
by the idle object evictor (if any). If an object
fails to validate, it will be dropped from the pool.
true
when objects are validated when borrowed.setTestWhileIdle(boolean)
,
setTimeBetweenEvictionRunsMillis(long)
public void setTestWhileIdle(boolean testWhileIdle)
true
, objects will be
validated
by the idle object evictor (if any). If an object
fails to validate, it will be dropped from the pool.
testWhileIdle
- true
so objects are validated when borrowed.getTestWhileIdle()
,
setTimeBetweenEvictionRunsMillis(long)
public void setConfig(GenericKeyedObjectPool.Config conf)
conf
- the new configuration to use.GenericKeyedObjectPool.Config
public boolean getLifo()
true
if the pools are configured to act as LIFO queuespublic void setLifo(boolean lifo)
lifo
- the new value for the lifo propertypublic Object borrowObject(Object key) throws Exception
Borrows an object from the keyed pool associated with the given key.
If there is an idle instance available in the pool associated with the given key, then
either the most-recently returned (if lifo
== true) or "oldest" (lifo == false)
instance sitting idle in the pool will be activated and returned. If activation fails, or
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.
If there are no idle instances available in the pool associated with the given key, behavior
depends on the maxActive
, maxTotal
, and (if applicable)
whenExhaustedAction
and maxWait
properties. If the
number of instances checked out from the pool under the given key is less than maxActive
and
the total number of instances in circulation (under all keys) is less than maxTotal
, a new instance
is created, activated and (if applicable) validated and returned to the caller.
If the associated keyed pool is exhausted (no available idle instances and no capacity to create new ones),
this method will either block (WHEN_EXHAUSTED_BLOCK
), throw a NoSuchElementException
(WHEN_EXHAUSTED_FAIL
), or grow (WHEN_EXHAUSTED_GROW
- ignoring maxActive, maxTotal properties).
The length of time that this method will block when whenExhaustedAction == WHEN_EXHAUSTED_BLOCK
is determined by the maxWait
property.
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.
borrowObject
in interface KeyedObjectPool
borrowObject
in class BaseKeyedObjectPool
key
- pool key
NoSuchElementException
- if a keyed object instance cannot be returned.
IllegalStateException
- after close
has been called on this pool
Exception
- when makeObject
throws an exceptionpublic void clear()
KeyedPoolableObjectFactory.destroyObject(Object, Object)
method on
each idle instance.
Implementation notes:
clear
in interface KeyedObjectPool
clear
in class BaseKeyedObjectPool
public void clearOldest()
public void clear(Object key)
key
.
clear
in interface KeyedObjectPool
clear
in class BaseKeyedObjectPool
key
- the key to clearpublic int getNumActive()
getNumActive
in interface KeyedObjectPool
getNumActive
in class BaseKeyedObjectPool
public int getNumIdle()
getNumIdle
in interface KeyedObjectPool
getNumIdle
in class BaseKeyedObjectPool
public int getNumActive(Object key)
key
.
getNumActive
in interface KeyedObjectPool
getNumActive
in class BaseKeyedObjectPool
key
- the key to query
key
currently borrowed in this poolpublic int getNumIdle(Object key)
key
currently idle in this pool.
getNumIdle
in interface KeyedObjectPool
getNumIdle
in class BaseKeyedObjectPool
key
- the key to query
key
currently idle in this poolpublic void returnObject(Object key, Object obj) throws Exception
Returns an object to a keyed pool.
For the pool to function correctly, the object instance must have been borrowed
from the pool (under the same key) and not yet returned. Repeated returnObject
calls on
the same object/key pair (with no borrowObject
calls in between) will result in multiple
references to the object in the idle instance pool.
If maxIdle
is set to a positive value and the number of idle instances under the given
key has reached this value, the returning instance is destroyed.
If testOnReturn
== true, the returning instance is validated before being returned
to the idle instance pool under the given key. In this case, if validation fails, the instance is destroyed.
returnObject
in interface KeyedObjectPool
returnObject
in class BaseKeyedObjectPool
key
- pool keyobj
- instance to return to the keyed pool
Exception
public void invalidateObject(Object key, Object obj) throws Exception
Invalidates the object instance associated with the given key. Decrements the active count associated with the given keyed pool and destroys the instance.
invalidateObject
in interface KeyedObjectPool
invalidateObject
in class BaseKeyedObjectPool
key
- pool keyobj
- instance to invalidate
Exception
- if an exception occurs destroying the objectpublic void addObject(Object key) throws Exception
factory
,
passivate it, and then place it in the idle object pool.
addObject
is useful for "pre-loading" a pool with idle objects.
addObject
in interface KeyedObjectPool
addObject
in class BaseKeyedObjectPool
key
- the key a new instance should be added to
Exception
- when KeyedPoolableObjectFactory.makeObject(java.lang.Object)
fails.
IllegalStateException
- when no factory
has been set or after close()
has been
called on this pool.public void preparePool(Object key, boolean populateImmediately)
populateImmediately
is true
and
minIdle > 0,
the pool under the given key will be
populated immediately with minIdle
idle instances.
key
- - The key to register for pool control.populateImmediately
- - If this is true
, the pool
will be populated immediately.public void close() throws Exception
borrowObject(Object)
will fail with IllegalStateException, but returnObject(Object, Object)
and
invalidateObject(Object, Object)
will continue to work. This method does not
clear()
the pool. The method is idempotent - that is, it is OK to call it on a closed
pool.
close
in interface KeyedObjectPool
close
in class BaseKeyedObjectPool
Exception
public void setFactory(KeyedPoolableObjectFactory factory) throws IllegalStateException
Sets the keyed poolable object factory associated with this pool.
If this method is called when objects are checked out of any of the keyed pools, an IllegalStateException is thrown. Calling this method also has the side effect of destroying any idle instances in existing keyed pools.
setFactory
in interface KeyedObjectPool
setFactory
in class BaseKeyedObjectPool
factory
- KeyedPoolableObjectFactory to use when creating keyed object pool instances
IllegalStateException
- if there are active (checked out) instances associated with this keyed object poolpublic void evict() throws Exception
Perform numTests
idle object eviction tests, evicting
examined objects that meet the criteria for eviction. If
testWhileIdle
is true, examined objects are validated
when visited (and removed if invalid); otherwise only objects that
have been idle for more than minEvicableIdletimeMillis
are removed.
Successive activations of this method examine objects in keyed pools in sequence, cycling through the keys and examining objects in oldest-to-youngest order within the keyed pools.
Exception
- when there is a problem evicting idle objects.protected void startEvictor(long delay)
delay
is non-positive, stop it
if it is already running.
delay
- milliseconds between evictor runs.
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |