org.springframework.aop.target
Class CommonsPoolTargetSource

java.lang.Object
  extended by org.springframework.aop.target.AbstractBeanFactoryBasedTargetSource
      extended by org.springframework.aop.target.AbstractPrototypeBasedTargetSource
          extended by org.springframework.aop.target.AbstractPoolingTargetSource
              extended by org.springframework.aop.target.CommonsPoolTargetSource
All Implemented Interfaces:
java.io.Serializable, PoolingConfig, TargetClassAware, TargetSource, Aware, BeanFactoryAware, DisposableBean

public class CommonsPoolTargetSource
extends AbstractPoolingTargetSource

TargetSource implementation that holds objects in a configurable Jakarta Commons Pool.

By default, an instance of GenericObjectPool is created. Subclasses may change the type of ObjectPool used by overriding the createObjectPool() method.

Provides many configuration properties mirroring those of the Commons Pool GenericObjectPool class; these properties are passed to the GenericObjectPool during construction. If creating a subclass of this class to change the ObjectPool implementation type, pass in the values of configuration properties that are relevant to your chosen implementation.

The testOnBorrow, testOnReturn and testWhileIdle properties are explictly not mirrored because the implementation of PoolableObjectFactory used by this class does not implement meaningful validation. All exposed Commons Pool properties use the corresponding Commons Pool defaults: for example,

Author:
Rod Johnson, Rob Harrop, Juergen Hoeller
See Also:
GenericObjectPool, createObjectPool(), AbstractPoolingTargetSource.setMaxSize(int), setMaxIdle(int), setMinIdle(int), setMaxWait(long), setTimeBetweenEvictionRunsMillis(long), setMinEvictableIdleTimeMillis(long), Serialized Form

Field Summary
private static Constants constants
           
private  int maxIdle
           
private  long maxWait
           
private  long minEvictableIdleTimeMillis
           
private  int minIdle
           
private  ObjectPool pool
          The Jakarta Commons ObjectPool used to pool target objects
private  long timeBetweenEvictionRunsMillis
           
private  byte whenExhaustedAction
           
 
Fields inherited from class org.springframework.aop.target.AbstractBeanFactoryBasedTargetSource
logger
 
Constructor Summary
CommonsPoolTargetSource()
          Create a CommonsPoolTargetSource with default settings.
 
Method Summary
 void activateObject(java.lang.Object obj)
           
protected  ObjectPool createObjectPool()
          Subclasses can override this if they want to return a specific Commons pool.
protected  void createPool()
          Creates and holds an ObjectPool instance.
 void destroy()
          Closes the underlying ObjectPool when destroying this object.
 void destroyObject(java.lang.Object obj)
           
 int getActiveCount()
          Return the number of active objects in the pool.
 int getIdleCount()
          Return the number of idle objects in the pool.
 int getMaxIdle()
          Return the maximum number of idle objects in the pool.
 long getMaxWait()
          Return the maximum waiting time for fetching an object from the pool.
 long getMinEvictableIdleTimeMillis()
          Return the minimum time that an idle object can sit in the pool.
 int getMinIdle()
          Return the minimum number of idle objects in the pool.
 java.lang.Object getTarget()
          Borrow an object from the ObjectPool.
 long getTimeBetweenEvictionRunsMillis()
          Return the time between eviction runs that check idle objects.
 byte getWhenExhaustedAction()
          Return the action to take when the pool is exhausted.
 java.lang.Object makeObject()
           
 void passivateObject(java.lang.Object obj)
           
 void releaseTarget(java.lang.Object target)
          Returns the specified object to the underlying ObjectPool.
 void setMaxIdle(int maxIdle)
          Set the maximum number of idle objects in the pool.
 void setMaxWait(long maxWait)
          Set the maximum waiting time for fetching an object from the pool.
 void setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis)
          Set the minimum time that an idle object can sit in the pool before it becomes subject to eviction.
 void setMinIdle(int minIdle)
          Set the minimum number of idle objects in the pool.
 void setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis)
          Set the time between eviction runs that check idle objects whether they have been idle for too long or have become invalid.
 void setWhenExhaustedAction(byte whenExhaustedAction)
          Set the action to take when the pool is exhausted.
 void setWhenExhaustedActionName(java.lang.String whenExhaustedActionName)
          Set the action to take when the pool is exhausted.
 boolean validateObject(java.lang.Object obj)
           
 
Methods inherited from class org.springframework.aop.target.AbstractPoolingTargetSource
getMaxSize, getPoolingConfigMixin, setBeanFactory, setMaxSize
 
Methods inherited from class org.springframework.aop.target.AbstractPrototypeBasedTargetSource
destroyPrototypeInstance, newPrototypeInstance, writeReplace
 
Methods inherited from class org.springframework.aop.target.AbstractBeanFactoryBasedTargetSource
copyFrom, equals, getBeanFactory, getTargetBeanName, getTargetClass, hashCode, isStatic, setTargetBeanName, setTargetClass, toString
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

constants

private static final Constants constants

maxIdle

private int maxIdle

minIdle

private int minIdle

maxWait

private long maxWait

timeBetweenEvictionRunsMillis

private long timeBetweenEvictionRunsMillis

minEvictableIdleTimeMillis

private long minEvictableIdleTimeMillis

whenExhaustedAction

private byte whenExhaustedAction

pool

private ObjectPool pool
The Jakarta Commons ObjectPool used to pool target objects

Constructor Detail

CommonsPoolTargetSource

public CommonsPoolTargetSource()
Create a CommonsPoolTargetSource with default settings. Default maximum size of the pool is 8.

See Also:
AbstractPoolingTargetSource.setMaxSize(int), GenericObjectPool#setMaxActive
Method Detail

setMaxIdle

public void setMaxIdle(int maxIdle)
Set the maximum number of idle objects in the pool. Default is 8.

See Also:
GenericObjectPool#setMaxIdle

getMaxIdle

public int getMaxIdle()
Return the maximum number of idle objects in the pool.


setMinIdle

public void setMinIdle(int minIdle)
Set the minimum number of idle objects in the pool. Default is 0.

See Also:
GenericObjectPool#setMinIdle

getMinIdle

public int getMinIdle()
Return the minimum number of idle objects in the pool.


setMaxWait

public void setMaxWait(long maxWait)
Set the maximum waiting time for fetching an object from the pool. Default is -1, waiting forever.

See Also:
GenericObjectPool#setMaxWait

getMaxWait

public long getMaxWait()
Return the maximum waiting time for fetching an object from the pool.


setTimeBetweenEvictionRunsMillis

public void setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis)
Set the time between eviction runs that check idle objects whether they have been idle for too long or have become invalid. Default is -1, not performing any eviction.

See Also:
GenericObjectPool#setTimeBetweenEvictionRunsMillis

getTimeBetweenEvictionRunsMillis

public long getTimeBetweenEvictionRunsMillis()
Return the time between eviction runs that check idle objects.


setMinEvictableIdleTimeMillis

public void setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis)
Set the minimum time that an idle object can sit in the pool before it becomes subject to eviction. Default is 1800000 (30 minutes).

Note that eviction runs need to be performed to take this setting into effect.

See Also:
setTimeBetweenEvictionRunsMillis(long), GenericObjectPool#setMinEvictableIdleTimeMillis

getMinEvictableIdleTimeMillis

public long getMinEvictableIdleTimeMillis()
Return the minimum time that an idle object can sit in the pool.


setWhenExhaustedActionName

public void setWhenExhaustedActionName(java.lang.String whenExhaustedActionName)
Set the action to take when the pool is exhausted. Uses the constant names defined in Commons Pool's GenericObjectPool class: "WHEN_EXHAUSTED_BLOCK", "WHEN_EXHAUSTED_FAIL", "WHEN_EXHAUSTED_GROW".

See Also:
setWhenExhaustedAction(byte)

setWhenExhaustedAction

public void setWhenExhaustedAction(byte whenExhaustedAction)
Set the action to take when the pool is exhausted. Uses the constant values defined in Commons Pool's GenericObjectPool class.

See Also:
GenericObjectPool#setWhenExhaustedAction(byte), GenericObjectPool#WHEN_EXHAUSTED_BLOCK, GenericObjectPool#WHEN_EXHAUSTED_FAIL, GenericObjectPool#WHEN_EXHAUSTED_GROW

getWhenExhaustedAction

public byte getWhenExhaustedAction()
Return the action to take when the pool is exhausted.


createPool

protected final void createPool()
Creates and holds an ObjectPool instance.

Specified by:
createPool in class AbstractPoolingTargetSource
See Also:
createObjectPool()

createObjectPool

protected ObjectPool createObjectPool()
Subclasses can override this if they want to return a specific Commons pool. They should apply any configuration properties to the pool here.

Default is a GenericObjectPool instance with the given pool size.

Returns:
an empty Commons ObjectPool.
See Also:
org.apache.commons.pool.impl.GenericObjectPool, AbstractPoolingTargetSource.setMaxSize(int)

getTarget

public java.lang.Object getTarget()
                           throws java.lang.Exception
Borrow an object from the ObjectPool.

Specified by:
getTarget in interface TargetSource
Specified by:
getTarget in class AbstractPoolingTargetSource
Returns:
an object from the pool
Throws:
java.lang.Exception - we may need to deal with checked exceptions from pool APIs, so we're forgiving with our exception signature

releaseTarget

public void releaseTarget(java.lang.Object target)
                   throws java.lang.Exception
Returns the specified object to the underlying ObjectPool.

Specified by:
releaseTarget in interface TargetSource
Specified by:
releaseTarget in class AbstractPoolingTargetSource
Parameters:
target - object that must have been acquired from the pool via a call to getTarget()
Throws:
java.lang.Exception - to allow pooling APIs to throw exception
See Also:
AbstractPoolingTargetSource.getTarget()

getActiveCount

public int getActiveCount()
                   throws java.lang.UnsupportedOperationException
Description copied from interface: PoolingConfig
Return the number of active objects in the pool.

Throws:
java.lang.UnsupportedOperationException - if not supported by the pool

getIdleCount

public int getIdleCount()
                 throws java.lang.UnsupportedOperationException
Description copied from interface: PoolingConfig
Return the number of idle objects in the pool.

Throws:
java.lang.UnsupportedOperationException - if not supported by the pool

destroy

public void destroy()
             throws java.lang.Exception
Closes the underlying ObjectPool when destroying this object.

Throws:
java.lang.Exception - in case of shutdown errors. Exceptions will get logged but not rethrown to allow other beans to release their resources too.

makeObject

public java.lang.Object makeObject()
                            throws BeansException
Throws:
BeansException

destroyObject

public void destroyObject(java.lang.Object obj)
                   throws java.lang.Exception
Throws:
java.lang.Exception

validateObject

public boolean validateObject(java.lang.Object obj)

activateObject

public void activateObject(java.lang.Object obj)

passivateObject

public void passivateObject(java.lang.Object obj)