Home » commons-pool-1.5.4-src » org.apache.commons » pool » impl » [javadoc | source]
org.apache.commons.pool.impl
public class: GenericKeyedObjectPool [javadoc | source]
java.lang.Object
   org.apache.commons.pool.BaseKeyedObjectPool
      org.apache.commons.pool.impl.GenericKeyedObjectPool

All Implemented Interfaces:
    KeyedObjectPool

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:

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:

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.

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.

Nested Class Summary:
static class  GenericKeyedObjectPool.ObjectTimestampPair  A simple "struct" encapsulating an object instance and a timestamp. Implements Comparable, objects are sorted from old to new. This is also used by {@link GenericObjectPool}. 
public static class  GenericKeyedObjectPool.Config  A simple "struct" encapsulating the configuration information for a GenericKeyedObjectPool
Field Summary
public static final  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 method should fail, throwing a NoSuchElementException . 
public static final  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 method should block until a new object is available, or the maximum wait time has been reached. 
public static final  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 method should simply create a new object anyway. 
public static final  int DEFAULT_MAX_IDLE    The default cap on the number of idle instances (per key) in the pool. 
public static final  int DEFAULT_MAX_ACTIVE    The default cap on the total number of active instances (per key) from the pool. 
public static final  int DEFAULT_MAX_TOTAL    The default cap on the the overall maximum number of objects that can exist at one time. 
public static final  byte DEFAULT_WHEN_EXHAUSTED_ACTION    The default "when exhausted action" for the pool. 
public static final  long DEFAULT_MAX_WAIT    The default maximum amount of time (in milliseconds) the #borrowObject method should block before throwing an exception when the pool is exhausted and the "when exhausted" action is #WHEN_EXHAUSTED_BLOCK . 
public static final  boolean DEFAULT_TEST_ON_BORROW    The default "test on borrow" value. 
public static final  boolean DEFAULT_TEST_ON_RETURN    The default "test on return" value. 
public static final  boolean DEFAULT_TEST_WHILE_IDLE    The default "test while idle" value. 
public static final  long DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS    The default "time between eviction runs" value. 
public static final  int DEFAULT_NUM_TESTS_PER_EVICTION_RUN    The default number of objects to examine per run in the idle object evictor. 
public static final  long DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS    The default value for #getMinEvictableIdleTimeMillis . 
public static final  int DEFAULT_MIN_IDLE    The default minimum level of idle objects in the pool. 
public static final  boolean DEFAULT_LIFO    The default LIFO status. True means that borrowObject returns the most recently used ("last in") idle object in a pool (if there are idle instances available). False means that pools behave as FIFO queues - objects are taken from idle object pools in the order that they are returned. 
Constructor:
 public GenericKeyedObjectPool() 
 public GenericKeyedObjectPool(KeyedPoolableObjectFactory factory) 
    Create a new GenericKeyedObjectPool using the specified values.
    Parameters:
    factory - the KeyedPoolableObjectFactory to use to create, validate, and destroy objects if not null
 public GenericKeyedObjectPool(KeyedPoolableObjectFactory factory,
    Config config) 
    Create a new GenericKeyedObjectPool using the specified values.
    Parameters:
    factory - the KeyedPoolableObjectFactory to use to create, validate, and destroy objects if not null
    config - a non-null GenericKeyedObjectPool.Config describing the configuration
 public GenericKeyedObjectPool(KeyedPoolableObjectFactory factory,
    int maxActive) 
    Create a new GenericKeyedObjectPool using the specified values.
    Parameters:
    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 )
 public GenericKeyedObjectPool(KeyedPoolableObjectFactory factory,
    int maxActive,
    byte whenExhaustedAction,
    long maxWait) 
    Create a new GenericKeyedObjectPool using the specified values.
    Parameters:
    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 )
    whenExhaustedAction - the action to take when the pool is exhausted (see #setWhenExhaustedAction )
    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 )
 public GenericKeyedObjectPool(KeyedPoolableObjectFactory factory,
    int maxActive,
    byte whenExhaustedAction,
    long maxWait,
    int maxIdle) 
    Create a new GenericKeyedObjectPool using the specified values.
    Parameters:
    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 )
    whenExhaustedAction - the action to take when the pool is exhausted (see #setWhenExhaustedAction )
    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 )
    maxIdle - the maximum number of idle objects in my pool (see #setMaxIdle )
 public GenericKeyedObjectPool(KeyedPoolableObjectFactory factory,
    int maxActive,
    byte whenExhaustedAction,
    long maxWait,
    boolean testOnBorrow,
    boolean testOnReturn) 
    Create a new GenericKeyedObjectPool using the specified values.
    Parameters:
    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 )
    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 )
    whenExhaustedAction - the action to take when the pool is exhausted (see #setWhenExhaustedAction )
    testOnBorrow - whether or not to validate objects before they are returned by the #borrowObject method (see #setTestOnBorrow )
    testOnReturn - whether or not to validate objects after they are returned to the #returnObject method (see #setTestOnReturn )
 public GenericKeyedObjectPool(KeyedPoolableObjectFactory factory,
    int maxActive,
    byte whenExhaustedAction,
    long maxWait,
    int maxIdle,
    boolean testOnBorrow,
    boolean testOnReturn) 
    Create a new GenericKeyedObjectPool using the specified values.
    Parameters:
    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 )
    whenExhaustedAction - the action to take when the pool is exhausted (see #setWhenExhaustedAction )
    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 )
    testOnBorrow - whether or not to validate objects before they are returned by the #borrowObject method (see #setTestOnBorrow )
    testOnReturn - whether or not to validate objects after they are returned to the #returnObject method (see #setTestOnReturn )
 public 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.
    Parameters:
    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 )
    whenExhaustedAction - the action to take when the pool is exhausted (see #setWhenExhaustedAction )
    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 )
    maxIdle - the maximum number of idle objects in my pool (see #setMaxIdle )
    testOnBorrow - whether or not to validate objects before they are returned by the #borrowObject method (see #setTestOnBorrow )
    testOnReturn - whether or not to validate objects after they are returned to the #returnObject method (see #setTestOnReturn )
    timeBetweenEvictionRunsMillis - the amount of time (in milliseconds) to sleep between examining idle objects for eviction (see #setTimeBetweenEvictionRunsMillis )
    numTestsPerEvictionRun - the number of idle objects to examine per run within the idle object eviction thread (if any) (see #setNumTestsPerEvictionRun )
    minEvictableIdleTimeMillis - the minimum number of milliseconds an object can sit idle in the pool before it is eligible for eviction (see #setMinEvictableIdleTimeMillis )
    testWhileIdle - whether or not to validate objects in the idle object eviction thread, if any (see #setTestWhileIdle )
 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) 
    Create a new GenericKeyedObjectPool using the specified values.
    Parameters:
    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 )
    whenExhaustedAction - the action to take when the pool is exhausted (see #setWhenExhaustedAction )
    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 )
    maxIdle - the maximum number of idle objects in my pool (see #setMaxIdle )
    maxTotal - the maximum number of objects that can exists at one time (see #setMaxTotal )
    testOnBorrow - whether or not to validate objects before they are returned by the #borrowObject method (see #setTestOnBorrow )
    testOnReturn - whether or not to validate objects after they are returned to the #returnObject method (see #setTestOnReturn )
    timeBetweenEvictionRunsMillis - the amount of time (in milliseconds) to sleep between examining idle objects for eviction (see #setTimeBetweenEvictionRunsMillis )
    numTestsPerEvictionRun - the number of idle objects to examine per run within the idle object eviction thread (if any) (see #setNumTestsPerEvictionRun )
    minEvictableIdleTimeMillis - the minimum number of milliseconds an object can sit idle in the pool before it is eligible for eviction (see #setMinEvictableIdleTimeMillis )
    testWhileIdle - whether or not to validate objects in the idle object eviction thread, if any (see #setTestWhileIdle )
 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) 
    Create a new GenericKeyedObjectPool using the specified values.
    Parameters:
    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 )
    whenExhaustedAction - the action to take when the pool is exhausted (see #setWhenExhaustedAction )
    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 )
    maxIdle - the maximum number of idle objects in my pool (see #setMaxIdle )
    maxTotal - the maximum number of objects that can exists at one time (see #setMaxTotal )
    minIdle - the minimum number of idle objects to have in the pool at any one time (see #setMinIdle )
    testOnBorrow - whether or not to validate objects before they are returned by the #borrowObject method (see #setTestOnBorrow )
    testOnReturn - whether or not to validate objects after they are returned to the #returnObject method (see #setTestOnReturn )
    timeBetweenEvictionRunsMillis - the amount of time (in milliseconds) to sleep between examining idle objects for eviction (see #setTimeBetweenEvictionRunsMillis )
    numTestsPerEvictionRun - the number of idle objects to examine per run within the idle object eviction thread (if any) (see #setNumTestsPerEvictionRun )
    minEvictableIdleTimeMillis - the minimum number of milliseconds an object can sit idle in the pool before it is eligible for eviction (see #setMinEvictableIdleTimeMillis )
    testWhileIdle - whether or not to validate objects in the idle object eviction thread, if any (see #setTestWhileIdle )
    since: Pool - 1.3
 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) 
    Create a new GenericKeyedObjectPool using the specified values.
    Parameters:
    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 )
    whenExhaustedAction - the action to take when the pool is exhausted (see #setWhenExhaustedAction )
    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 )
    maxIdle - the maximum number of idle objects in my pool (see #setMaxIdle )
    maxTotal - the maximum number of objects that can exists at one time (see #setMaxTotal )
    minIdle - the minimum number of idle objects to have in the pool at any one time (see #setMinIdle )
    testOnBorrow - whether or not to validate objects before they are returned by the #borrowObject method (see #setTestOnBorrow )
    testOnReturn - whether or not to validate objects after they are returned to the #returnObject method (see #setTestOnReturn )
    timeBetweenEvictionRunsMillis - the amount of time (in milliseconds) to sleep between examining idle objects for eviction (see #setTimeBetweenEvictionRunsMillis )
    numTestsPerEvictionRun - the number of idle objects to examine per run within the idle object eviction thread (if any) (see #setNumTestsPerEvictionRun )
    minEvictableIdleTimeMillis - the minimum number of milliseconds an object can sit idle in the pool before it is eligible for eviction (see #setMinEvictableIdleTimeMillis )
    testWhileIdle - whether or not to validate objects in the idle object eviction thread, if any (see #setTestWhileIdle )
    lifo - whether or not the pools behave as LIFO (last in first out) queues (see #setLifo )
    since: Pool - 1.4
Method from org.apache.commons.pool.impl.GenericKeyedObjectPool Summary:
addObject,   borrowObject,   clear,   clear,   clearOldest,   close,   debugInfo,   evict,   getLifo,   getMaxActive,   getMaxIdle,   getMaxTotal,   getMaxWait,   getMinEvictableIdleTimeMillis,   getMinIdle,   getNumActive,   getNumActive,   getNumIdle,   getNumIdle,   getNumTestsPerEvictionRun,   getTestOnBorrow,   getTestOnReturn,   getTestWhileIdle,   getTimeBetweenEvictionRunsMillis,   getWhenExhaustedAction,   invalidateObject,   preparePool,   returnObject,   setConfig,   setFactory,   setLifo,   setMaxActive,   setMaxIdle,   setMaxTotal,   setMaxWait,   setMinEvictableIdleTimeMillis,   setMinIdle,   setNumTestsPerEvictionRun,   setTestOnBorrow,   setTestOnReturn,   setTestWhileIdle,   setTimeBetweenEvictionRunsMillis,   setWhenExhaustedAction,   startEvictor
Methods from org.apache.commons.pool.BaseKeyedObjectPool:
addObject,   assertOpen,   borrowObject,   clear,   clear,   close,   getNumActive,   getNumActive,   getNumIdle,   getNumIdle,   invalidateObject,   isClosed,   returnObject,   setFactory
Methods from java.lang.Object:
clone,   equals,   finalize,   getClass,   hashCode,   notify,   notifyAll,   toString,   wait,   wait,   wait
Method from org.apache.commons.pool.impl.GenericKeyedObjectPool Detail:
 public  void addObject(Object key) throws Exception 
    Create an object using the factory , passivate it, and then place it in the idle object pool. addObject is useful for "pre-loading" a pool with idle objects.
 public 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.

 public  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.

    Implementation notes:

    • This method does not destroy or effect in any way instances that are checked out when it is invoked.
    • Invoking this method does not prevent objects being returned to the idle instance pool, even during its execution. It locks the pool only during instance removal. Additional instances may be returned while removed items are being destroyed.

 public  void clear(Object key) 
    Clears the specified pool, removing all pooled instances corresponding to the given key.
 public  void clearOldest() 
    Clears oldest 15% of objects in pool. The method sorts the objects into a TreeMap and then iterates the first 15% for removal.
 public  void close() throws Exception 
 synchronized String debugInfo() 
 public  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.

 public synchronized boolean getLifo() 
    Whether or not the idle object pools act as LIFO queues. True means that borrowObject returns the most recently used ("last in") idle object in a pool (if there are idle instances available). False means that the pools behave as FIFO queues - objects are taken from idle object pools in the order that they are returned.
 public synchronized int getMaxActive() 
    Returns the cap on the number of object instances allocated by the pool (checked out or idle), per key. A negative value indicates no limit.
 public synchronized int getMaxIdle() 
    Returns the cap on the number of "idle" instances per key.
 public synchronized int getMaxTotal() 
    Returns the overall maximum number of objects (across pools) that can exist at one time. A negative value indicates no limit.
 public synchronized long getMaxWait() 
 public synchronized 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).
 public synchronized int getMinIdle() 
    Returns the minimum number of idle objects to maintain in each of the keyed pools. This setting has no effect unless timeBetweenEvictionRunsMillis > 0 and attempts to ensure that each pool has the required minimum number of instances are only made during idle object eviction runs.
 public synchronized int getNumActive() 
    Returns the total number of instances current borrowed from this pool but not yet returned.
 public synchronized int getNumActive(Object key) 
    Returns the number of instances currently borrowed from but not yet returned to the pool corresponding to the given key.
 public synchronized int getNumIdle() 
    Returns the total number of instances currently idle in this pool.
 public synchronized int getNumIdle(Object key) 
    Returns the number of instances corresponding to the given key currently idle in this pool.
 public synchronized int getNumTestsPerEvictionRun() 
    Returns the max number of objects to examine during each run of the idle object evictor thread (if any).
 public boolean getTestOnBorrow() 
    When true, objects will be validated before being returned by the #borrowObject method. If the object fails to validate, it will be dropped from the pool, and we will attempt to borrow another.
 public boolean getTestOnReturn() 
 public synchronized boolean getTestWhileIdle() 
    When 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.
 public synchronized long getTimeBetweenEvictionRunsMillis() 
    Returns the number of milliseconds to sleep between runs of the idle object evictor thread. When non-positive, no idle object evictor thread will be run.
 public synchronized byte getWhenExhaustedAction() 
    Returns the action to take when the #borrowObject method is invoked when the pool is exhausted (the maximum number of "active" objects has been reached).
 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.

 public synchronized  void preparePool(Object key,
    boolean populateImmediately) 
    Registers a key for pool control. If populateImmediately is true and minIdle > 0, the pool under the given key will be populated immediately with minIdle idle instances.
 public  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.

 public synchronized  void setConfig(Config conf) 
    Sets the configuration.
 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.

 public synchronized  void setLifo(boolean lifo) 
    Sets the LIFO property of the pools. True means that borrowObject returns the most recently used ("last in") idle object in a pool (if there are idle instances available). False means that the pools behave as FIFO queues - objects are taken from idle object pools in the order that they are returned.
 public synchronized  void setMaxActive(int maxActive) 
    Sets the cap on the number of object instances managed by the pool per key.
 public synchronized  void setMaxIdle(int maxIdle) 
    Sets the cap on the number of "idle" instances in the pool. If maxIdle is set too low on heavily loaded systems it is possible you will see objects being destroyed and almost immediately new objects being created. This is a result of the active threads momentarily returning objects faster than they are requesting them them, causing the number of idle objects to rise above maxIdle. The best value for maxIdle for heavily loaded system will vary but the default is a good starting point.
 public synchronized  void setMaxTotal(int maxTotal) 
    Sets the cap on the total number of instances from all pools combined. 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.
 public synchronized  void setMaxWait(long maxWait) 
 public synchronized  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). When non-positive, no objects will be evicted from the pool due to idle time alone.
 public synchronized  void setMinIdle(int poolSize) 
    Sets the minimum number of idle objects to maintain in each of the keyed pools. This setting has no effect unless timeBetweenEvictionRunsMillis > 0 and attempts to ensure that each pool has the required minimum number of instances are only made during idle object eviction runs.
 public synchronized  void setNumTestsPerEvictionRun(int numTestsPerEvictionRun) 
    Sets the max number of objects to examine during each run of the idle object evictor thread (if any).

    When a negative value is supplied, ceil(#getNumIdle() )/abs(#getNumTestsPerEvictionRun ) tests will be run. I.e., when the value is -n, roughly one nth 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.

 public  void setTestOnBorrow(boolean testOnBorrow) 
    When true, objects will be validated before being returned by the #borrowObject method. If the object fails to validate, it will be dropped from the pool, and we will attempt to borrow another.
 public  void setTestOnReturn(boolean testOnReturn) 
 public synchronized  void setTestWhileIdle(boolean testWhileIdle) 
    When 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.
 public synchronized  void setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis) 
    Sets the number of milliseconds to sleep between runs of the idle object evictor thread. When non-positive, no idle object evictor thread will be run.
 public synchronized  void setWhenExhaustedAction(byte whenExhaustedAction) 
    Sets the action to take when the #borrowObject method is invoked when the pool is exhausted (the maximum number of "active" objects has been reached).
 protected synchronized  void startEvictor(long delay) 
    Start the eviction thread or service, or when delay is non-positive, stop it if it is already running.