# Class SharedPoolDataSource

java.lang.Object
org.apache.tomcat.dbcp.dbcp2.datasources.InstanceKeyDataSource
org.apache.tomcat.dbcp.dbcp2.datasources.SharedPoolDataSource

All Implemented Interfaces:
  `Serializable, AutoCloseable, Wrapper, Referenceable, CommonDataSource, DataSource`

public class SharedPoolDataSource extends InstanceKeyDataSource

A pooling `DataSource` appropriate for deployment within J2EE environment. There are many configuration options, most of which are defined in the parent class. All users (based on user name) share a single maximum number of Connections in this data source.

User passwords can be changed without re-initializing the data source. When a `getConnection(user name, password)` request is processed with a password that is different from those used to create connections in the pool associated with `user name`, an attempt is made to create a new connection using the supplied password and if this succeeds, idle connections created using the old password are destroyed and new connections are created using the new password.

Since:
  2.0
See Also:
  - Serialized Form

- ## Field Summary

  ### Fields inherited from class InstanceKeyDataSource

  `UNKNOWN_TRANSACTIONISOLATION`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `SharedPoolDataSource()`
  Default no-argument constructor for Serialization

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `close()`
  Closes pool being maintained by this data source.
  `protected org.apache.tomcat.dbcp.dbcp2.datasources.PooledConnectionManager`
  `getConnectionManager(org.apache.tomcat.dbcp.dbcp2.datasources.UserPassKey userPassKey)`
  `int`
  `getMaxTotal()`
  Gets `BaseGenericObjectPool.getMaxTotal()` for this pool.
  `int`
  `getNumActive()`
  Gets the number of active connections in the pool.
  `int`
  `getNumIdle()`
  Gets the number of idle connections in the pool.
  `protected org.apache.tomcat.dbcp.dbcp2.datasources.PooledConnectionAndInfo`
  `getPooledConnectionAndInfo(String userName, String userPassword)`
  This method is protected but can only be implemented in this package because PooledConnectionAndInfo is a package private type.
  `Reference`
  `getReference()`
  Creates a new `Reference` to a `SharedPoolDataSource`.
  `void`
  `setMaxTotal(int maxTotal)`
  Sets `BaseGenericObjectPool.getMaxTotal()` for this pool.
  `protected void`
  `setupDefaults(Connection connection, String userName)`
  `protected void`
  `toStringFields(StringBuilder builder)`

  ### Methods inherited from class InstanceKeyDataSource

  `assertInitializationAllowed, getConnection, getConnection, getConnectionPoolDataSource, getDataSourceName, getDefaultBlockWhenExhausted, getDefaultDurationBetweenEvictionRuns, getDefaultEvictionPolicyClassName, getDefaultLifo, getDefaultMaxIdle, getDefaultMaxTotal, getDefaultMaxWait, getDefaultMaxWaitMillis, getDefaultMinEvictableIdleDuration, getDefaultMinEvictableIdleTimeMillis, getDefaultMinIdle, getDefaultNumTestsPerEvictionRun, getDefaultSoftMinEvictableIdleDuration, getDefaultSoftMinEvictableIdleTimeMillis, getDefaultTestOnBorrow, getDefaultTestOnCreate, getDefaultTestOnReturn, getDefaultTestWhileIdle, getDefaultTimeBetweenEvictionRunsMillis, getDefaultTransactionIsolation, getDescription, getInstanceKey, getJndiEnvironment, getLoginTimeout, getLoginTimeoutDuration, getLogWriter, getMaxConnDuration, getMaxConnLifetime, getMaxConnLifetimeMillis, getParentLogger, getValidationQuery, getValidationQueryTimeout, getValidationQueryTimeoutDuration, isDefaultAutoCommit, isDefaultReadOnly, isRollbackAfterValidation, isWrapperFor, setConnectionPoolDataSource, setDataSourceName, setDefaultAutoCommit, setDefaultBlockWhenExhausted, setDefaultDurationBetweenEvictionRuns, setDefaultEvictionPolicyClassName, setDefaultLifo, setDefaultMaxIdle, setDefaultMaxTotal, setDefaultMaxWait, setDefaultMaxWaitMillis, setDefaultMinEvictableIdle, setDefaultMinEvictableIdleTimeMillis, setDefaultMinIdle, setDefaultNumTestsPerEvictionRun, setDefaultReadOnly, setDefaultSoftMinEvictableIdle, setDefaultSoftMinEvictableIdleTimeMillis, setDefaultTestOnBorrow, setDefaultTestOnCreate, setDefaultTestOnReturn, setDefaultTestWhileIdle, setDefaultTimeBetweenEvictionRunsMillis, setDefaultTransactionIsolation, setDescription, setJndiEnvironment, setLoginTimeout, setLoginTimeout, setLogWriter, setMaxConnLifetime, setMaxConnLifetimeMillis, setRollbackAfterValidation, setValidationQuery, setValidationQueryTimeout, setValidationQueryTimeout, testCPDS, toString, unwrap`

  ### Methods inherited from class Object

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

  ### Methods inherited from interface CommonDataSource

  `createShardingKeyBuilder`

  ### Methods inherited from interface DataSource

  `createConnectionBuilder`

- ## Constructor Details

  - ### SharedPoolDataSource

    public SharedPoolDataSource()
    Default no-argument constructor for Serialization

- ## Method Details

  - ### close

    public void close() throws SQLException
    Closes pool being maintained by this data source.
    Specified by:
      `close` in interface `AutoCloseable`
    Specified by:
      `close` in class `InstanceKeyDataSource`
    Throws:
      `SQLException`

  - ### getConnectionManager

    protected org.apache.tomcat.dbcp.dbcp2.datasources.PooledConnectionManager getConnectionManager(org.apache.tomcat.dbcp.dbcp2.datasources.UserPassKey userPassKey)
    Specified by:
      `getConnectionManager` in class `InstanceKeyDataSource`

  - ### getMaxTotal

    public int getMaxTotal()
    Gets `BaseGenericObjectPool.getMaxTotal()` for this pool.
    Returns:
      `BaseGenericObjectPool.getMaxTotal()` for this pool.

  - ### getNumActive

    public int getNumActive()
    Gets the number of active connections in the pool.
    Returns:
      The number of active connections in the pool.

  - ### getNumIdle

    public int getNumIdle()
    Gets the number of idle connections in the pool.
    Returns:
      The number of idle connections in the pool.

  - ### getPooledConnectionAndInfo

    protected org.apache.tomcat.dbcp.dbcp2.datasources.PooledConnectionAndInfo getPooledConnectionAndInfo(String userName, String userPassword) throws SQLException
    Description copied from class: `InstanceKeyDataSource`
    This method is protected but can only be implemented in this package because PooledConnectionAndInfo is a package private type.
    Specified by:
      `getPooledConnectionAndInfo` in class `InstanceKeyDataSource`
    Parameters:
      `userName` - The user name.
      `userPassword` - The user password.
    Returns:
      Matching PooledConnectionAndInfo.
    Throws:
      `SQLException` - Connection or registration failure.

  - ### getReference

    public Reference getReference() throws NamingException
    Creates a new `Reference` to a `SharedPoolDataSource`.
    Throws:
      `NamingException`

  - ### setMaxTotal

    public void setMaxTotal(int maxTotal)
    Sets `BaseGenericObjectPool.getMaxTotal()` for this pool.
    Parameters:
      `maxTotal` - `BaseGenericObjectPool.getMaxTotal()` for this pool.

  - ### setupDefaults

    protected void setupDefaults(Connection connection, String userName) throws SQLException
    Specified by:
      `setupDefaults` in class `InstanceKeyDataSource`
    Throws:
      `SQLException`

  - ### toStringFields

    protected void toStringFields(StringBuilder builder)
    Overrides:
      `toStringFields` in class `InstanceKeyDataSource`