org.apache.catalina.session

## Class JDBCStore

- java.lang.Object
- - org.apache.catalina.util.LifecycleBase
  - - org.apache.catalina.session.StoreBase
    - - org.apache.catalina.session.JDBCStore

- All Implemented Interfaces:
    Lifecycle, Store

      public class JDBCStore
      extends StoreBase

  Implementation of the `Store` interface that stores serialized session objects in a database. Sessions that are saved are still subject to being expired based on inactivity.
  Author:
    Bip Thelin

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface org.apache.catalina.Lifecycle

      `Lifecycle.SingleUse`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected String` | `connectionName` The connection username to use when trying to connect to the database.
    `protected String` | `connectionPassword` The connection URL to use when trying to connect to the database.
    `protected String` | `connectionURL` Connection string to use when connecting to the DB.
    `protected DataSource` | `dataSource` DataSource to use
    `protected String` | `dataSourceName` name of the JNDI resource
    `protected Driver` | `driver` Instance of the JDBC Driver class we use as a connection factory.
    `protected String` | `driverName` Driver to use.
    `protected PreparedStatement` | `preparedClearSql` Variable to hold the `clear()` prepared statement.
    `protected PreparedStatement` | `preparedLoadSql` Variable to hold the `load()` prepared statement.
    `protected PreparedStatement` | `preparedRemoveSql` Variable to hold the `remove()` prepared statement.
    `protected PreparedStatement` | `preparedSaveSql` Variable to hold the `save()` prepared statement.
    `protected PreparedStatement` | `preparedSizeSql` Variable to hold the `getSize()` prepared statement.
    `protected String` | `sessionAppCol` Column to use for /Engine/Host/Context name
    `protected String` | `sessionDataCol` Data column to use.
    `protected String` | `sessionIdCol` Id column to use.
    `protected String` | `sessionLastAccessedCol` Last Accessed column to use.
    `protected String` | `sessionMaxInactiveCol` Max Inactive column to use.
    `protected String` | `sessionTable` Table to use.
    `protected String` | `sessionValidCol` `Is Valid` column to use.
    `protected static String` | `storeName` Name to register for this Store, used for logging.
    `protected static String` | `threadName` Name to register for the background thread.

    - ### Fields inherited from class org.apache.catalina.session.StoreBase

      `manager, sm, support`

    - ### Fields inherited from interface org.apache.catalina.Lifecycle

      `AFTER_DESTROY_EVENT, AFTER_INIT_EVENT, AFTER_START_EVENT, AFTER_STOP_EVENT, BEFORE_DESTROY_EVENT, BEFORE_INIT_EVENT, BEFORE_START_EVENT, BEFORE_STOP_EVENT, CONFIGURE_START_EVENT, CONFIGURE_STOP_EVENT, PERIODIC_EVENT, START_EVENT, STOP_EVENT`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `JDBCStore()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `clear()` Remove all of the Sessions in this Store.
    `protected void` | `close(Connection dbConnection)` Close the specified database connection.
    `String[]` | `expiredKeys()` Get only those keys of sessions, that are saved in the Store and are to be expired.
    `protected Connection` | `getConnection()` Check the connection associated with this store, if it's `null` or closed try to reopen it.
    `String` | `getConnectionName()`
    `String` | `getConnectionPassword()`
    `String` | `getConnectionURL()`
    `String` | `getDataSourceName()`
    `String` | `getDriverName()`
    `boolean` | `getLocalDataSource()`
    `String` | `getName()`
    `String` | `getSessionAppCol()`
    `String` | `getSessionDataCol()`
    `String` | `getSessionIdCol()`
    `String` | `getSessionLastAccessedCol()`
    `String` | `getSessionMaxInactiveCol()`
    `String` | `getSessionTable()`
    `String` | `getSessionValidCol()`
    `int` | `getSize()` Return an integer containing a count of all Sessions currently saved in this Store.
    `String` | `getStoreName()`
    `String` | `getThreadName()`
    `String[]` | `keys()`
    `Session` | `load(String id)` Load the Session associated with the id `id`.
    `protected Connection` | `open()` Open (if necessary) and return a database connection for use by this Store.
    `protected void` | `release(Connection conn)` Release the connection, if it is associated with a connection pool.
    `void` | `remove(String id)` Remove the Session with the specified session identifier from this Store, if present.
    `void` | `save(Session session)` Save a session to the Store.
    `void` | `setConnectionName(String connectionName)` Set the username to use to connect to the database.
    `void` | `setConnectionPassword(String connectionPassword)` Set the password to use to connect to the database.
    `void` | `setConnectionURL(String connectionURL)` Set the Connection URL for this Store.
    `void` | `setDataSourceName(String dataSourceName)` Set the JNDI name of a DataSource-factory to use for db access
    `void` | `setDriverName(String driverName)` Set the driver for this Store.
    `void` | `setLocalDataSource(boolean localDataSource)` Set to `true` to cause the datasource to be looked up in the webapp JNDI Context.
    `void` | `setSessionAppCol(String sessionAppCol)` Set the App column for the table.
    `void` | `setSessionDataCol(String sessionDataCol)` Set the Data column for the table
    `void` | `setSessionIdCol(String sessionIdCol)` Set the Id column for the table.
    `void` | `setSessionLastAccessedCol(String sessionLastAccessedCol)` Set the `Last Accessed` column for the table
    `void` | `setSessionMaxInactiveCol(String sessionMaxInactiveCol)` Set the `Max Inactive` column for the table
    `void` | `setSessionTable(String sessionTable)` Set the table for this Store.
    `void` | `setSessionValidCol(String sessionValidCol)` Set the `Is Valid` column for the table
    `protected void` | `startInternal()` Start this component and implement the requirements of `LifecycleBase.startInternal()`.
    `protected void` | `stopInternal()` Stop this component and implement the requirements of `LifecycleBase.stopInternal()`.

    - ### Methods inherited from class org.apache.catalina.session.StoreBase

      `addPropertyChangeListener, destroyInternal, getManager, getObjectInputStream, initInternal, processExpires, removePropertyChangeListener, setManager, toString`

    - ### Methods inherited from class org.apache.catalina.util.LifecycleBase

      `addLifecycleListener, destroy, findLifecycleListeners, fireLifecycleEvent, getState, getStateName, init, removeLifecycleListener, setState, setState, start, stop`

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

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

- - ### Field Detail

    - #### storeName

          protected static final String storeName

      Name to register for this Store, used for logging.
      See Also:
        Constant Field Values

    - #### threadName

          protected static final String threadName

      Name to register for the background thread.
      See Also:
        Constant Field Values

    - #### connectionName

          protected String connectionName

      The connection username to use when trying to connect to the database.

    - #### connectionPassword

          protected String connectionPassword

      The connection URL to use when trying to connect to the database.

    - #### connectionURL

          protected String connectionURL

      Connection string to use when connecting to the DB.

    - #### driver

          protected Driver driver

      Instance of the JDBC Driver class we use as a connection factory.

    - #### driverName

          protected String driverName

      Driver to use.

    - #### dataSourceName

          protected String dataSourceName

      name of the JNDI resource

    - #### dataSource

          protected DataSource dataSource

      DataSource to use

    - #### sessionTable

          protected String sessionTable

      Table to use.

    - #### sessionAppCol

          protected String sessionAppCol

      Column to use for /Engine/Host/Context name

    - #### sessionIdCol

          protected String sessionIdCol

      Id column to use.

    - #### sessionDataCol

          protected String sessionDataCol

      Data column to use.

    - #### sessionValidCol

          protected String sessionValidCol

      `Is Valid` column to use.

    - #### sessionMaxInactiveCol

          protected String sessionMaxInactiveCol

      Max Inactive column to use.

    - #### sessionLastAccessedCol

          protected String sessionLastAccessedCol

      Last Accessed column to use.

    - #### preparedSizeSql

          protected PreparedStatement preparedSizeSql

      Variable to hold the `getSize()` prepared statement.

    - #### preparedSaveSql

          protected PreparedStatement preparedSaveSql

      Variable to hold the `save()` prepared statement.

    - #### preparedClearSql

          protected PreparedStatement preparedClearSql

      Variable to hold the `clear()` prepared statement.

    - #### preparedRemoveSql

          protected PreparedStatement preparedRemoveSql

      Variable to hold the `remove()` prepared statement.

    - #### preparedLoadSql

          protected PreparedStatement preparedLoadSql

      Variable to hold the `load()` prepared statement.

  - ### Constructor Detail

    - #### JDBCStore

          public JDBCStore()

  - ### Method Detail

    - #### getName

          public String getName()

      Returns:
        the name for this instance (built from container name)

    - #### getThreadName

          public String getThreadName()

      Returns:
        the thread name for this Store.

    - #### getStoreName

          public String getStoreName()

      Overrides:
        `getStoreName` in class `StoreBase`
      Returns:
        the name for this Store, used for logging.

    - #### setDriverName

          public void setDriverName(String driverName)

      Set the driver for this Store.
      Parameters:
        `driverName` - The new driver

    - #### getDriverName

          public String getDriverName()

      Returns:
        the driver for this Store.

    - #### getConnectionName

          public String getConnectionName()

      Returns:
        the username to use to connect to the database.

    - #### setConnectionName

          public void setConnectionName(String connectionName)

      Set the username to use to connect to the database.
      Parameters:
        `connectionName` - Username

    - #### getConnectionPassword

          public String getConnectionPassword()

      Returns:
        the password to use to connect to the database.

    - #### setConnectionPassword

          public void setConnectionPassword(String connectionPassword)

      Set the password to use to connect to the database.
      Parameters:
        `connectionPassword` - User password

    - #### setConnectionURL

          public void setConnectionURL(String connectionURL)

      Set the Connection URL for this Store.
      Parameters:
        `connectionURL` - The new Connection URL

    - #### getConnectionURL

          public String getConnectionURL()

      Returns:
        the Connection URL for this Store.

    - #### setSessionTable

          public void setSessionTable(String sessionTable)

      Set the table for this Store.
      Parameters:
        `sessionTable` - The new table

    - #### getSessionTable

          public String getSessionTable()

      Returns:
        the table for this Store.

    - #### setSessionAppCol

          public void setSessionAppCol(String sessionAppCol)

      Set the App column for the table.
      Parameters:
        `sessionAppCol` - the column name

    - #### getSessionAppCol

          public String getSessionAppCol()

      Returns:
        the web application name column for the table.

    - #### setSessionIdCol

          public void setSessionIdCol(String sessionIdCol)

      Set the Id column for the table.
      Parameters:
        `sessionIdCol` - the column name

    - #### getSessionIdCol

          public String getSessionIdCol()

      Returns:
        the Id column for the table.

    - #### setSessionDataCol

          public void setSessionDataCol(String sessionDataCol)

      Set the Data column for the table
      Parameters:
        `sessionDataCol` - the column name

    - #### getSessionDataCol

          public String getSessionDataCol()

      Returns:
        the data column for the table

    - #### setSessionValidCol

          public void setSessionValidCol(String sessionValidCol)

      Set the `Is Valid` column for the table
      Parameters:
        `sessionValidCol` - The column name

    - #### getSessionValidCol

          public String getSessionValidCol()

      Returns:
        the `Is Valid` column

    - #### setSessionMaxInactiveCol

          public void setSessionMaxInactiveCol(String sessionMaxInactiveCol)

      Set the `Max Inactive` column for the table
      Parameters:
        `sessionMaxInactiveCol` - The column name

    - #### getSessionMaxInactiveCol

          public String getSessionMaxInactiveCol()

      Returns:
        the `Max Inactive` column

    - #### setSessionLastAccessedCol

          public void setSessionLastAccessedCol(String sessionLastAccessedCol)

      Set the `Last Accessed` column for the table
      Parameters:
        `sessionLastAccessedCol` - The column name

    - #### getSessionLastAccessedCol

          public String getSessionLastAccessedCol()

      Returns:
        the `Last Accessed` column

    - #### setDataSourceName

          public void setDataSourceName(String dataSourceName)

      Set the JNDI name of a DataSource-factory to use for db access
      Parameters:
        `dataSourceName` - The JNDI name of the DataSource-factory

    - #### getDataSourceName

          public String getDataSourceName()

      Returns:
        the name of the JNDI DataSource-factory

    - #### getLocalDataSource

          public boolean getLocalDataSource()

      Returns:
        if the datasource will be looked up in the webapp JNDI Context.

    - #### setLocalDataSource

          public void setLocalDataSource(boolean localDataSource)

      Set to `true` to cause the datasource to be looked up in the webapp JNDI Context.
      Parameters:
        `localDataSource` - the new flag value

    - #### expiredKeys

          public String[] expiredKeys()
                               throws IOException

      Description copied from class: `StoreBase`
      Get only those keys of sessions, that are saved in the Store and are to be expired.
      Overrides:
        `expiredKeys` in class `StoreBase`
      Returns:
        list of session keys, that are to be expired
      Throws:
        `IOException` - if an input-/output error occurred

    - #### keys

          public String[] keys()
                        throws IOException

      Returns:
        an array containing the session identifiers of all Sessions currently saved in this Store. If there are no such Sessions, a zero-length array is returned.
      Throws:
        `IOException` - if an input/output error occurred

    - #### getSize

          public int getSize()
                      throws IOException

      Return an integer containing a count of all Sessions currently saved in this Store. If there are no Sessions, `0` is returned.
      Returns:
        the count of all sessions currently saved in this Store
      Throws:
        `IOException` - if an input/output error occurred

    - #### load

          public Session load(String id)
                       throws ClassNotFoundException,
                              IOException

      Load the Session associated with the id `id`. If no such session is found `null` is returned.
      Parameters:
        `id` - a value of type `String`
      Returns:
        the stored `Session`
      Throws:
        `ClassNotFoundException` - if an error occurs
        `IOException` - if an input/output error occurred

    - #### remove

          public void remove(String id)
                      throws IOException

      Remove the Session with the specified session identifier from this Store, if present. If no such Session is present, this method takes no action.
      Parameters:
        `id` - Session identifier of the Session to be removed
      Throws:
        `IOException` - if an input/output error occurs

    - #### clear

          public void clear()
                     throws IOException

      Remove all of the Sessions in this Store.
      Throws:
        `IOException` - if an input/output error occurs

    - #### save

          public void save(Session session)
                    throws IOException

      Save a session to the Store.
      Parameters:
        `session` - the session to be stored
      Throws:
        `IOException` - if an input/output error occurs

    - #### getConnection

          protected Connection getConnection()

      Check the connection associated with this store, if it's `null` or closed try to reopen it. Returns `null` if the connection could not be established.
      Returns:
        `Connection` if the connection succeeded

    - #### open

          protected Connection open()
                             throws SQLException

      Open (if necessary) and return a database connection for use by this Store.
      Returns:
        database connection ready to use
      Throws:
        `SQLException` - if a database error occurs

    - #### close

          protected void close(Connection dbConnection)

      Close the specified database connection.
      Parameters:
        `dbConnection` - The connection to be closed

    - #### release

          protected void release(Connection conn)

      Release the connection, if it is associated with a connection pool.
      Parameters:
        `conn` - The connection to be released

    - #### startInternal

          protected void startInternal()
                                throws LifecycleException

      Start this component and implement the requirements of `LifecycleBase.startInternal()`.
      Overrides:
        `startInternal` in class `StoreBase`
      Throws:
        `LifecycleException` - if this component detects a fatal error that prevents this component from being used

    - #### stopInternal

          protected void stopInternal()
                               throws LifecycleException

      Stop this component and implement the requirements of `LifecycleBase.stopInternal()`.
      Overrides:
        `stopInternal` in class `StoreBase`
      Throws:
        `LifecycleException` - if this component detects a fatal error that prevents this component from being used

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