Class NonBlockingPool

  • All Implemented Interfaces:
    Pool
    Direct Known Subclasses:
    BlockingPool

    public class NonBlockingPool
    extends AbstractPool

    NonBlockingPool pool provides the basic implementation of an object pool. The implementation uses a linked list to maintain a list of (available) objects. If the pool is empty it simply creates one using the ObjectFactory instance. Subclasses can change this behaviour by overriding getObject(...) and returnObject(....) methods. This class provides basic support for synchronization, event notification, pool shutdown and pool object recycling. It also does some very basic bookkeeping like the number of objects created, number of threads waiting for object.

    Subclasses can make use of these book-keeping data to provide complex pooling mechanism like LRU / MRU / Random. Also, note that AbstractPool does not have a notion of pool limit. It is upto to the derived classes to implement these features.

    • Field Detail

      • addedResizeTask

        protected boolean addedResizeTask
      • addedIdleBeanWork

        protected volatile boolean addedIdleBeanWork
      • inResizing

        protected boolean inResizing
      • singletonBeanPool

        protected boolean singletonBeanPool
        If glassfish-ejb-jar.xml singleton-bean-pool is true, steadyPoolSize is 1, and maxPoolSize is 1, then this field is set to true, and only 1 bean instance is created. The pool size at any given time may be 0 or 1. Both PoolResizeTimerTask and ReSizeWork are skipped.
    • Constructor Detail

      • NonBlockingPool

        protected NonBlockingPool()
      • NonBlockingPool

        public NonBlockingPool​(long beanId,
                               String poolName,
                               ObjectFactory factory,
                               int steadyPoolSize,
                               int resizeQuantity,
                               int maxPoolSize,
                               int idleTimeoutInSeconds,
                               ClassLoader loader)
      • NonBlockingPool

        public NonBlockingPool​(long beanId,
                               String poolName,
                               ObjectFactory factory,
                               int steadyPoolSize,
                               int resizeQuantity,
                               int maxPoolSize,
                               int idleTimeoutInSeconds,
                               ClassLoader loader,
                               boolean singletonBeanPool)
    • Method Detail

      • getObject

        public Object getObject​(Object param)
        Description copied from interface: Pool
        Get an object from the pool within the specified time. The amount of time the calling thread agrees to wait. Some value that might be used while creating the object
        Returns:
        an Object or null if an object could not be returned in 'waitForMillis' millisecond.
      • returnObject

        public void returnObject​(Object object)
        Return an object back to the pool. An object that is obtained through getObject() must always be returned back to the pool using either returnObject(obj) or through destroyObject(obj).
        Parameters:
        object -
      • destroyObject

        public void destroyObject​(Object object)
        Destroys an Object. Note that applications should not ignore the reference to the object that they got from getObject(). An object that is obtained through getObject() must always be returned back to the pool using either returnObject(obj) or through destroyObject(obj). This method tells that the object should be destroyed and cannot be reused.
        Parameters:
        object - Object to be destroyed.
      • preload

        protected void preload​(int count)
        Preload the pool with objects.
        Parameters:
        count - the number of objects to be added.
      • prepopulate

        public void prepopulate​(int count)
        Prepopulate the pool with objects.
        Parameters:
        count - the number of objects to be added.
      • close

        public void close()
        Close the pool
        Specified by:
        close in class AbstractPool
      • remove

        protected void remove​(int count)
      • doResize

        protected void doResize()