org.springframework.aop.target

Class CommonsPool2TargetSource

  • All Implemented Interfaces:
    java.io.Serializable, org.apache.commons.pool2.PooledObjectFactory<java.lang.Object>, PoolingConfig, TargetClassAware, TargetSource, Aware, BeanFactoryAware, DisposableBean


    public class CommonsPool2TargetSource
    extends AbstractPoolingTargetSource
    implements org.apache.commons.pool2.PooledObjectFactory<java.lang.Object>
    TargetSource implementation that holds objects in a configurable Apache Commons2 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 explicitly 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.

    Compatible with Apache Commons Pool 2.4, as of Spring 4.2.

    Since:
    4.2
    Author:
    Rod Johnson, Rob Harrop, Juergen Hoeller, Stephane Nicoll, Kazuki Shimizu
    See Also:
    GenericObjectPool, createObjectPool(), AbstractPoolingTargetSource.setMaxSize(int), setMaxIdle(int), setMinIdle(int), setMaxWait(long), setTimeBetweenEvictionRunsMillis(long), setMinEvictableIdleTimeMillis(long), Serialized Form
    • Constructor Detail

      • CommonsPool2TargetSource

        public CommonsPool2TargetSource()
        Create a CommonsPoolTargetSource with default settings. Default maximum size of the pool is 8.
        See Also:
        AbstractPoolingTargetSource.setMaxSize(int), GenericObjectPoolConfig.setMaxTotal(int)
    • 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(int)
      • 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(int)
      • 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:
        BaseGenericObjectPool.setMaxWaitMillis(long)
      • 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:
        BaseGenericObjectPool.setTimeBetweenEvictionRunsMillis(long)
      • 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), BaseGenericObjectPool.setMinEvictableIdleTimeMillis(long)
      • getMinEvictableIdleTimeMillis

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

        public void setBlockWhenExhausted(boolean blockWhenExhausted)
        Set whether the call should bock when the pool is exhausted.
      • isBlockWhenExhausted

        public boolean isBlockWhenExhausted()
        Specify if the call should block when the pool is exhausted.
      • createObjectPool

        protected org.apache.commons.pool2.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:
        GenericObjectPool, AbstractPoolingTargetSource.setMaxSize(int)
      • getTarget

        public java.lang.Object getTarget()
                                   throws java.lang.Exception
        Borrows 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
      • getActiveCount

        public int getActiveCount()
                           throws java.lang.UnsupportedOperationException
        Description copied from interface: PoolingConfig
        Return the number of active objects in the pool.
        Specified by:
        getActiveCount in interface PoolingConfig
        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.
        Specified by:
        getIdleCount in interface PoolingConfig
        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.
        Specified by:
        destroy in interface DisposableBean
        Throws:
        java.lang.Exception - in case of shutdown errors. Exceptions will get logged but not rethrown to allow other beans to release their resources as well.
      • makeObject

        public org.apache.commons.pool2.PooledObject<java.lang.Object> makeObject()
                                                                           throws java.lang.Exception
        Specified by:
        makeObject in interface org.apache.commons.pool2.PooledObjectFactory<java.lang.Object>
        Throws:
        java.lang.Exception
      • destroyObject

        public void destroyObject(org.apache.commons.pool2.PooledObject<java.lang.Object> p)
                           throws java.lang.Exception
        Specified by:
        destroyObject in interface org.apache.commons.pool2.PooledObjectFactory<java.lang.Object>
        Throws:
        java.lang.Exception
      • validateObject

        public boolean validateObject(org.apache.commons.pool2.PooledObject<java.lang.Object> p)
        Specified by:
        validateObject in interface org.apache.commons.pool2.PooledObjectFactory<java.lang.Object>
      • activateObject

        public void activateObject(org.apache.commons.pool2.PooledObject<java.lang.Object> p)
                            throws java.lang.Exception
        Specified by:
        activateObject in interface org.apache.commons.pool2.PooledObjectFactory<java.lang.Object>
        Throws:
        java.lang.Exception
      • passivateObject

        public void passivateObject(org.apache.commons.pool2.PooledObject<java.lang.Object> p)
                             throws java.lang.Exception
        Specified by:
        passivateObject in interface org.apache.commons.pool2.PooledObjectFactory<java.lang.Object>
        Throws:
        java.lang.Exception