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

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 Details

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

### DataSourceStore

public DataSourceStore()

## Method Details

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