# 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 Sessions from 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()`
`String`
`getStoreName()`
`String[]`
`keys()`
`Session`
`load(String id)`
Load and return the Session associated with the specified session identifier from this Store, without removing it.
`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 the specified Session into this 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

Returns:
  the number of Sessions present in this Store.
Throws:
  `IOException` - if an input/output error occurs

### load

public Session load(String id) throws ClassNotFoundException, IOException
Description copied from interface: `Store`
Load and return the Session associated with the specified session identifier from this Store, without removing it. If there is no such stored Session, return `null`.

Parameters:
  `id` - Session identifier of the session to load
Returns:
  the loaded Session instance
Throws:
  `ClassNotFoundException` - if a deserialization error occurs
  `IOException` - if an input/output error occurs

### remove

public void remove(String id) throws IOException
Description copied from interface: `Store`
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
Description copied from interface: `Store`
Remove all Sessions from this Store.

Throws:
  `IOException` - if an input/output error occurs

### save

public void save(Session session) throws IOException
Description copied from interface: `Store`
Save the specified Session into this Store. Any previously saved information for the associated session identifier is replaced.

Parameters:
  `session` - Session to be saved
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