Class 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
    • Field Detail

      • storeName

        protected static final java.lang.String storeName
        Name to register for this Store, used for logging.
        See Also:
        Constant Field Values
      • threadName

        protected static final java.lang.String threadName
        Name to register for the background thread.
        See Also:
        Constant Field Values
      • connectionName

        protected java.lang.String connectionName
        The connection username to use when trying to connect to the database.
      • connectionPassword

        protected java.lang.String connectionPassword
        The connection URL to use when trying to connect to the database.
      • connectionURL

        protected java.lang.String connectionURL
        Connection string to use when connecting to the DB.
      • driver

        protected java.sql.Driver driver
        Instance of the JDBC Driver class we use as a connection factory.
      • driverName

        protected java.lang.String driverName
        Driver to use.
      • dataSourceName

        protected java.lang.String dataSourceName
        name of the JNDI resource
      • dataSource

        protected javax.sql.DataSource dataSource
        DataSource to use
      • sessionTable

        protected java.lang.String sessionTable
        Table to use.
      • sessionAppCol

        protected java.lang.String sessionAppCol
        Column to use for /Engine/Host/Context name
      • sessionIdCol

        protected java.lang.String sessionIdCol
        Id column to use.
      • sessionDataCol

        protected java.lang.String sessionDataCol
        Data column to use.
      • sessionValidCol

        protected java.lang.String sessionValidCol
        Is Valid column to use.
      • sessionMaxInactiveCol

        protected java.lang.String sessionMaxInactiveCol
        Max Inactive column to use.
      • sessionLastAccessedCol

        protected java.lang.String sessionLastAccessedCol
        Last Accessed column to use.
      • preparedSizeSql

        protected java.sql.PreparedStatement preparedSizeSql
        Variable to hold the getSize() prepared statement.
      • preparedSaveSql

        protected java.sql.PreparedStatement preparedSaveSql
        Variable to hold the save() prepared statement.
      • preparedClearSql

        protected java.sql.PreparedStatement preparedClearSql
        Variable to hold the clear() prepared statement.
      • preparedRemoveSql

        protected java.sql.PreparedStatement preparedRemoveSql
        Variable to hold the remove() prepared statement.
      • preparedLoadSql

        protected java.sql.PreparedStatement preparedLoadSql
        Variable to hold the load() prepared statement.
    • Constructor Detail

      • JDBCStore

        public JDBCStore()
    • Method Detail

      • getName

        public java.lang.String getName()
        Returns:
        the name for this instance (built from container name)
      • getThreadName

        public java.lang.String getThreadName()
        Returns:
        the thread name for this Store.
      • getStoreName

        public java.lang.String getStoreName()
        Overrides:
        getStoreName in class StoreBase
        Returns:
        the name for this Store, used for logging.
      • setDriverName

        public void setDriverName​(java.lang.String driverName)
        Set the driver for this Store.
        Parameters:
        driverName - The new driver
      • getDriverName

        public java.lang.String getDriverName()
        Returns:
        the driver for this Store.
      • getConnectionName

        public java.lang.String getConnectionName()
        Returns:
        the username to use to connect to the database.
      • setConnectionName

        public void setConnectionName​(java.lang.String connectionName)
        Set the username to use to connect to the database.
        Parameters:
        connectionName - Username
      • getConnectionPassword

        public java.lang.String getConnectionPassword()
        Returns:
        the password to use to connect to the database.
      • setConnectionPassword

        public void setConnectionPassword​(java.lang.String connectionPassword)
        Set the password to use to connect to the database.
        Parameters:
        connectionPassword - User password
      • setConnectionURL

        public void setConnectionURL​(java.lang.String connectionURL)
        Set the Connection URL for this Store.
        Parameters:
        connectionURL - The new Connection URL
      • getConnectionURL

        public java.lang.String getConnectionURL()
        Returns:
        the Connection URL for this Store.
      • setSessionTable

        public void setSessionTable​(java.lang.String sessionTable)
        Set the table for this Store.
        Parameters:
        sessionTable - The new table
      • getSessionTable

        public java.lang.String getSessionTable()
        Returns:
        the table for this Store.
      • setSessionAppCol

        public void setSessionAppCol​(java.lang.String sessionAppCol)
        Set the App column for the table.
        Parameters:
        sessionAppCol - the column name
      • getSessionAppCol

        public java.lang.String getSessionAppCol()
        Returns:
        the web application name column for the table.
      • setSessionIdCol

        public void setSessionIdCol​(java.lang.String sessionIdCol)
        Set the Id column for the table.
        Parameters:
        sessionIdCol - the column name
      • getSessionIdCol

        public java.lang.String getSessionIdCol()
        Returns:
        the Id column for the table.
      • setSessionDataCol

        public void setSessionDataCol​(java.lang.String sessionDataCol)
        Set the Data column for the table
        Parameters:
        sessionDataCol - the column name
      • getSessionDataCol

        public java.lang.String getSessionDataCol()
        Returns:
        the data column for the table
      • setSessionValidCol

        public void setSessionValidCol​(java.lang.String sessionValidCol)
        Set the Is Valid column for the table
        Parameters:
        sessionValidCol - The column name
      • getSessionValidCol

        public java.lang.String getSessionValidCol()
        Returns:
        the Is Valid column
      • setSessionMaxInactiveCol

        public void setSessionMaxInactiveCol​(java.lang.String sessionMaxInactiveCol)
        Set the Max Inactive column for the table
        Parameters:
        sessionMaxInactiveCol - The column name
      • getSessionMaxInactiveCol

        public java.lang.String getSessionMaxInactiveCol()
        Returns:
        the Max Inactive column
      • setSessionLastAccessedCol

        public void setSessionLastAccessedCol​(java.lang.String sessionLastAccessedCol)
        Set the Last Accessed column for the table
        Parameters:
        sessionLastAccessedCol - The column name
      • getSessionLastAccessedCol

        public java.lang.String getSessionLastAccessedCol()
        Returns:
        the Last Accessed column
      • setDataSourceName

        public void setDataSourceName​(java.lang.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 java.lang.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 java.lang.String[] expiredKeys()
                                       throws java.io.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:
        java.io.IOException - if an input-/output error occurred
      • keys

        public java.lang.String[] keys()
                                throws java.io.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:
        java.io.IOException - if an input/output error occurred
      • getSize

        public int getSize()
                    throws java.io.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:
        java.io.IOException - if an input/output error occurred
      • load

        public Session load​(java.lang.String id)
                     throws java.lang.ClassNotFoundException,
                            java.io.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:
        java.lang.ClassNotFoundException - if an error occurs
        java.io.IOException - if an input/output error occurred
      • remove

        public void remove​(java.lang.String id)
                    throws java.io.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:
        java.io.IOException - if an input/output error occurs
      • clear

        public void clear()
                   throws java.io.IOException
        Remove all of the Sessions in this Store.
        Throws:
        java.io.IOException - if an input/output error occurs
      • save

        public void save​(Session session)
                  throws java.io.IOException
        Save a session to the Store.
        Parameters:
        session - the session to be stored
        Throws:
        java.io.IOException - if an input/output error occurs
      • getConnection

        protected java.sql.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 java.sql.Connection open()
                                    throws java.sql.SQLException
        Open (if necessary) and return a database connection for use by this Store.
        Returns:
        database connection ready to use
        Throws:
        java.sql.SQLException - if a database error occurs
      • close

        protected void close​(java.sql.Connection dbConnection)
        Close the specified database connection.
        Parameters:
        dbConnection - The connection to be closed
      • release

        protected void release​(java.sql.Connection conn)
        Release the connection, if it is associated with a connection pool.
        Parameters:
        conn - The connection to be released