org.apache.tomcat.dbcp.pool2

## Class BaseObjectPool<T>

- java.lang.Object
- - org.apache.tomcat.dbcp.pool2.BaseObject
  - - org.apache.tomcat.dbcp.pool2.BaseObjectPool<T>

- Type Parameters:
    `T` - Type of element pooled in this pool.
  All Implemented Interfaces:
    Closeable, AutoCloseable, ObjectPool<T>
  Direct Known Subclasses:
    SoftReferenceObjectPool

      public abstract class BaseObjectPool<T>
      extends BaseObject
      implements ObjectPool<T>

  A simple base implementation of `ObjectPool`. Optional operations are implemented to either do nothing, return a value indicating it is unsupported or throw `UnsupportedOperationException`.

  This class is intended to be thread-safe.

  Since:
    2.0

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `BaseObjectPool()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addObject()` Not supported in this base implementation.
    `void` | `addObjects(int count)` Calls `ObjectPool.addObject()` `count` number of times.
    `protected void` | `assertOpen()` Throws an `IllegalStateException` when this pool has been closed.
    `abstract T` | `borrowObject()` Obtains an instance from this pool.
    `void` | `clear()` Not supported in this base implementation.
    `void` | `close()` Closes this pool, and free any resources associated with it.
    `int` | `getNumActive()` Not supported in this base implementation.
    `int` | `getNumIdle()` Not supported in this base implementation.
    `abstract void` | `invalidateObject(T obj)` Invalidates an object from the pool.
    `boolean` | `isClosed()` Has this pool instance been closed.
    `abstract void` | `returnObject(T obj)` Returns an instance to the pool.
    `protected void` | `toStringAppendFields(StringBuilder builder)` Used by sub-classes to include the fields defined by the sub-class in the `BaseObject.toString()` output.

    - ### Methods inherited from class org.apache.tomcat.dbcp.pool2.BaseObject

      `toString`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface org.apache.tomcat.dbcp.pool2.ObjectPool

      `invalidateObject`

- - ### Constructor Detail

    - #### BaseObjectPool

          public BaseObjectPool()

  - ### Method Detail

    - #### borrowObject

          public abstract T borrowObject()
                                  throws Exception

      Description copied from interface: `ObjectPool`
      Obtains an instance from this pool.

      Instances returned from this method will have been either newly created with `PooledObjectFactory.makeObject()` or will be a previously idle object and have been activated with `PooledObjectFactory.activateObject(org.apache.tomcat.dbcp.pool2.PooledObject<T>)` and then validated with `PooledObjectFactory.validateObject(org.apache.tomcat.dbcp.pool2.PooledObject<T>)`.

      By contract, clients must return the borrowed instance using `ObjectPool.returnObject(T)`, `ObjectPool.invalidateObject(T)`, or a related method as defined in an implementation or sub-interface.

      The behavior of this method when the pool has been exhausted is not strictly specified (although it may be specified by implementations).

      Specified by:
        `borrowObject` in interface `ObjectPool<T>`
      Returns:
        an instance from this pool.
      Throws:
        `IllegalStateException` - after `close` has been called on this pool.
        `Exception` - when `PooledObjectFactory.makeObject()` throws an exception.
        `NoSuchElementException` - when the pool is exhausted and cannot or will not return another instance.

    - #### returnObject

          public abstract void returnObject(T obj)
                                     throws Exception

      Description copied from interface: `ObjectPool`
      Returns an instance to the pool. By contract, `obj` must have been obtained using `ObjectPool.borrowObject()` or a related method as defined in an implementation or sub-interface.
      Specified by:
        `returnObject` in interface `ObjectPool<T>`
      Parameters:
        `obj` - a `borrowed` instance to be returned.
      Throws:
        `IllegalStateException` - if an attempt is made to return an object to the pool that is in any state other than allocated (i.e. borrowed). Attempting to return an object more than once or attempting to return an object that was never borrowed from the pool will trigger this exception.
        `Exception` - if an instance cannot be returned to the pool

    - #### invalidateObject

          public abstract void invalidateObject(T obj)
                                         throws Exception

      Description copied from interface: `ObjectPool`
      Invalidates an object from the pool.

      By contract, `obj` must have been obtained using `ObjectPool.borrowObject()` or a related method as defined in an implementation or sub-interface.

      This method should be used when an object that has been borrowed is determined (due to an exception or other problem) to be invalid.

      Specified by:
        `invalidateObject` in interface `ObjectPool<T>`
      Parameters:
        `obj` - a `borrowed` instance to be disposed.
      Throws:
        `Exception` - if the instance cannot be invalidated

    - #### getNumIdle

          public int getNumIdle()

      Not supported in this base implementation.
      Specified by:
        `getNumIdle` in interface `ObjectPool<T>`
      Returns:
        a negative value.

    - #### getNumActive

          public int getNumActive()

      Not supported in this base implementation.
      Specified by:
        `getNumActive` in interface `ObjectPool<T>`
      Returns:
        a negative value.

    - #### clear

          public void clear()
                     throws Exception,
                            UnsupportedOperationException

      Not supported in this base implementation.
      Specified by:
        `clear` in interface `ObjectPool<T>`
      Throws:
        `UnsupportedOperationException` - if the pool does not implement this method
        `Exception` - if the pool cannot be cleared

    - #### addObject

          public void addObject()
                         throws Exception,
                                UnsupportedOperationException

      Not supported in this base implementation. Subclasses should override this behavior.
      Specified by:
        `addObject` in interface `ObjectPool<T>`
      Throws:
        `UnsupportedOperationException` - if the pool does not implement this method
        `Exception` - when `PooledObjectFactory.makeObject()` fails.
        `IllegalStateException` - after `ObjectPool.close()` has been called on this pool.

    - #### addObjects

          public void addObjects(int count)
                          throws Exception

      Calls `ObjectPool.addObject()` `count` number of times.
      Specified by:
        `addObjects` in interface `ObjectPool<T>`
      Parameters:
        `count` - the number of idle objects to add.
      Throws:
        `Exception` - when `ObjectPool.addObject()` fails.
      Since:
        2.8.0

    - #### close

          public void close()

      Closes this pool, and free any resources associated with it.

      Calling `ObjectPool.addObject()` or `ObjectPool.borrowObject()` after invoking this method on a pool will cause them to throw an `IllegalStateException`.

      Implementations should silently fail if not all resources can be freed.

      This affects the behavior of `isClosed` and `assertOpen`.

      Specified by:
        `close` in interface `Closeable`
      Specified by:
        `close` in interface `AutoCloseable`
      Specified by:
        `close` in interface `ObjectPool<T>`

    - #### isClosed

          public final boolean isClosed()

      Has this pool instance been closed.
      Returns:
        `true` when this pool has been closed.

    - #### assertOpen

          protected final void assertOpen()
                                   throws IllegalStateException

      Throws an `IllegalStateException` when this pool has been closed.
      Throws:
        `IllegalStateException` - when this pool has been closed.
      See Also:
        `isClosed()`

    - #### toStringAppendFields

          protected void toStringAppendFields(StringBuilder builder)

      Description copied from class: `BaseObject`
      Used by sub-classes to include the fields defined by the sub-class in the `BaseObject.toString()` output.
      Overrides:
        `toStringAppendFields` in class `BaseObject`
      Parameters:
        `builder` - Field names and values are appended to this object

Copyright © 2000-2022 Apache Software Foundation. All Rights Reserved.