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

### Method Summary

All Methods Instance Methods Concrete Methods
`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