An interface defining life-cycle methods for instances to be served by an {@link ObjectPool}.
By contract, when an {@link ObjectPool}delegates to a {@link PoolableObjectFactory},
- {@link #makeObject makeObject}is called whenever a new instance is needed.
- {@link #activateObject activateObject}is invoked on every instance that has been {@link #passivateObject passivated} before it is{@link ObjectPool#borrowObject borrowed} from the pool.
- {@link #validateObject validateObject}is invoked on {@link #activateObject activated} instances to make surethey can be {@link ObjectPool#borrowObject borrowed} from the pool.
validateObject
may also be used to test an instance being {@link ObjectPool#returnObject returned} to the poolbefore it is {@link #passivateObject passivated}. It will only be invoked on an activated instance. - {@link #passivateObject passivateObject}is invoked on every instance when it is returned to the pool.
- {@link #destroyObject destroyObject}is invoked on every instance when it is being "dropped" from the pool (whether due to the response from
validateObject
, or for reasons specific to the pool implementation.) There is no guarantee that the instance being destroyed will be considered active, passive or in a generally consistent state.
{@link PoolableObjectFactory} must be thread-safe. The only promisean {@link ObjectPool} makes is that the same instance of an object will notbe passed to more than one method of a PoolableObjectFactory
at a time.
@see ObjectPool
@author Rodney Waldhoff
@author Sandy McArthur
@version $Revision: 777748 $ $Date: 2009-05-22 20:00:44 -0400 (Fri, 22 May 2009) $
@since Pool 1.0