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

      • storeName

        protected static final java.lang.String storeName
        Name to register for this Store, used for logging.
        See Also:
        Constant Field Values
      • 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.
    • Constructor Detail

      • DataSourceStore

        public DataSourceStore()
    • Method Detail

      • getName

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

        public java.lang.String getStoreName()
        Overrides:
        getStoreName in class StoreBase
        Returns:
        the name for this Store, used for logging.
      • 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:
        array 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
        Returns:
        the number of Sessions present in this Store.
        Throws:
        java.io.IOException - if an input/output error occurs
      • load

        public Session load​(java.lang.String id)
                     throws java.lang.ClassNotFoundException,
                            java.io.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.

        Implementations should expect, and correctly handle, concurrent calls to any method but in particular calls to #load(String), #save(Session) and #remove(String) for the same session.

        The session ID is user provided so stores must treat it as untrusted data.

        Parameters:
        id - Session identifier of the session to load
        Returns:
        the loaded Session instance
        Throws:
        java.lang.ClassNotFoundException - if a deserialization error occurs
        java.io.IOException - if an input/output error occurs
      • remove

        public void remove​(java.lang.String id)
                    throws java.io.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.

        Implementations should expect, and correctly handle, concurrent calls to any method but in particular calls to #load(String), #save(Session) and #remove(String) for the same session.

        The session ID is user provided so stores must treat it as untrusted data.

        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
        Description copied from interface: Store
        Remove all Sessions from this Store.
        Throws:
        java.io.IOException - if an input/output error occurs
      • save

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

        Implementations should expect, and correctly handle, concurrent calls to any method but in particular calls to #load(String), #save(Session) and #remove(String) for the same session.

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