Package 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
`BaseObjectPool()`

### Method Summary

All Methods Instance Methods Abstract Methods Concrete Methods
`void` `addObject()` Not supported in this base implementation.
`protected void` `assertOpen()` Throws an `IllegalStateException` when this pool has been closed.
`abstract T` `borrowObject()` Borrows 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

`addObjects, invalidateObject`

### Constructor Detail

#### BaseObjectPool

    public BaseObjectPool()

### Method Detail

#### addObject

    public void addObject()
                   throws Exception

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.

#### 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()`

#### borrowObject

    public abstract T borrowObject()
                            throws Exception

Description copied from interface: `ObjectPool`
Borrows 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.

#### clear

    public void clear()
               throws Exception

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

#### 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 `AutoCloseable`
Specified by:
  `close` in interface `Closeable`
Specified by:
  `close` in interface `ObjectPool<T>`

#### getNumActive

    public int getNumActive()

Not supported in this base implementation.

Specified by:
  `getNumActive` in interface `ObjectPool<T>`
Returns:
  a negative value.

#### getNumIdle

    public int getNumIdle()

Not supported in this base implementation.

Specified by:
  `getNumIdle` in interface `ObjectPool<T>`
Returns:
  a negative value.

#### 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

#### isClosed

    public final boolean isClosed()

Has this pool instance been closed.

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

#### 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

#### 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