Package org.apache.catalina.session

## Class DataSourceStore

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

- All Implemented Interfaces:
    `Lifecycle`, `Store`

      public class DataSourceStore
      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 | Description
    --- | --- | ---
    `protected DataSource` | `dataSource` | DataSource to use
    `protected String` | `dataSourceName` | name of the JNDI resource
    `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.

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

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | 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` | `getDataSourceName()` |
    `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[]` | `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` | `setDataSourceName​(String dataSourceName)` | Set the JNDI name of a DataSource-factory to use for db access
    `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

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

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

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

      `addLifecycleListener, destroy, findLifecycleListeners, fireLifecycleEvent, getState, getStateName, getThrowOnFailure, init, removeLifecycleListener, setState, setState, setThrowOnFailure, 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

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

  - ### Constructor Detail

    - #### DataSourceStore

          public DataSourceStore()

  - ### Method Detail

    - #### getName

          public String getName()

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

    - #### getStoreName

          public String getStoreName()

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

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