Class FileSessionDataStore

All Implemented Interfaces:
SessionDataMap, SessionDataStore, Container, Destroyable, Dumpable, Dumpable.DumpableContainer, LifeCycle

@ManagedObject public class FileSessionDataStore extends AbstractSessionDataStore
FileSessionDataStore A file-based store of session data.
  • Field Details

    • _storeDir

      protected File _storeDir
    • _deleteUnrestorableFiles

      protected boolean _deleteUnrestorableFiles
    • _sessionFileMap

      protected Map<String,String> _sessionFileMap
    • _contextString

      protected String _contextString
    • _lastSweepTime

      protected long _lastSweepTime
  • Constructor Details

    • FileSessionDataStore

      public FileSessionDataStore()
  • Method Details

    • initialize

      public void initialize(SessionContext context) throws Exception
      Description copied from interface: SessionDataMap
      Initialize this data map for the given context. A SessionDataMap can only be used by one context(/session manager).
      Specified by:
      initialize in interface SessionDataMap
      Overrides:
      initialize in class AbstractSessionDataStore
      Parameters:
      context - context associated
      Throws:
      Exception - if unable to initialize the
    • doStart

      protected void doStart() throws Exception
      Description copied from class: ContainerLifeCycle
      Starts the managed lifecycle beans in the order they were added.
      Overrides:
      doStart in class AbstractSessionDataStore
      Throws:
      AbstractLifeCycle.StopException - If thrown, the lifecycle will immediately be stopped.
      Exception - If there was a problem starting. Will cause a transition to FAILED state
    • doStop

      protected void doStop() throws Exception
      Description copied from class: ContainerLifeCycle
      Stops the managed lifecycle beans in the reverse order they were added.
      Overrides:
      doStop in class ContainerLifeCycle
      Throws:
      Exception - If there was a problem stopping. Will cause a transition to FAILED state
    • getStoreDir

      @ManagedAttribute(value="dir where sessions are stored", readonly=true) public File getStoreDir()
    • setStoreDir

      public void setStoreDir(File storeDir)
    • isDeleteUnrestorableFiles

      public boolean isDeleteUnrestorableFiles()
    • setDeleteUnrestorableFiles

      public void setDeleteUnrestorableFiles(boolean deleteUnrestorableFiles)
    • delete

      public boolean delete(String id) throws Exception
      Delete a session
      Parameters:
      id - session id
      Returns:
      true if the session was deleted
      Throws:
      Exception - if unable to delete session data
    • deleteFile

      public boolean deleteFile(String filename) throws Exception
      Delete the file associated with a session
      Parameters:
      filename - name of the file containing the session's information
      Returns:
      true if file was deleted, false otherwise
      Throws:
      Exception - indicating delete failure
    • doCheckExpired

      public Set<String> doCheckExpired(Set<String> candidates, long time)
      Check to see which sessions have expired.
      Specified by:
      doCheckExpired in class AbstractSessionDataStore
      Parameters:
      candidates - the set of session ids that the SessionCache believes have expired
      time - the time at which to check for expiry
      Returns:
      the complete set of sessions that have expired, including those that are not currently loaded into the SessionCache
    • doGetExpired

      public Set<String> doGetExpired(long timeLimit)
      Description copied from class: AbstractSessionDataStore
      Implemented by subclasses to find sessions for this context in the store that expired at or before the time limit and thus not being actively managed by any node. This method is only called periodically (the period is configurable) to avoid putting too much load on the store.
      Specified by:
      doGetExpired in class AbstractSessionDataStore
      Parameters:
      timeLimit - the upper limit of expiry times to check. Sessions expired at or before this timestamp will match.
      Returns:
      the empty set if there are no sessions expired as at the time, or otherwise a set of session ids.
    • doCleanOrphans

      public void doCleanOrphans(long time)
      Description copied from class: AbstractSessionDataStore
      Implemented by subclasses to delete sessions for other contexts that expired at or before the timeLimit. These are 'orphaned' sessions that are no longer being actively managed by any node. These are explicitly sessions that do NOT belong to this context (other mechanisms such as doGetExpired take care of those). As they don't belong to this context, they cannot be loaded by us. This is called only periodically to avoid placing excessive load on the store.
      Specified by:
      doCleanOrphans in class AbstractSessionDataStore
      Parameters:
      time - the upper limit of the expiry time to check in msec
    • sweepDisk

      protected void sweepDisk(long time)
      Check all session files for any context and remove any that expired at or before the time limit.
    • sweepFile

      protected void sweepFile(long time, Path p)
      Delete file (from any context) that expired at or before the given time
      Parameters:
      time - the time in msec
      p - the file to check
    • doLoad

      public SessionData doLoad(String id) throws Exception
      Description copied from class: AbstractSessionDataStore
      Load the session from persistent store.
      Specified by:
      doLoad in class AbstractSessionDataStore
      Parameters:
      id - the id of the session to load
      Returns:
      the re-inflated session
      Throws:
      Exception - if unable to load the session
    • doStore

      public void doStore(String id, SessionData data, long lastSaveTime) throws Exception
      Description copied from class: AbstractSessionDataStore
      Store the session data persistently.
      Specified by:
      doStore in class AbstractSessionDataStore
      Parameters:
      id - identity of session to store
      data - info of the session
      lastSaveTime - time of previous save or 0 if never saved
      Throws:
      Exception - if unable to store data
    • initializeStore

      public void initializeStore() throws Exception
      Read the names of the existing session files and build a map of fully qualified session ids (ie with context) to filename. If there is more than one file for the same session, only the most recently modified will be kept and the rest deleted. At the same time, any files - for any context - that expired a long time ago will be cleaned up.
      Throws:
      Exception - if storeDir doesn't exist, isn't readable/writeable or contains 2 files with the same lastmodify time for the same session. Throws IOException if the lastmodifytimes can't be read.
    • isPassivating

      @ManagedAttribute(value="are sessions serialized by this store", readonly=true) public boolean isPassivating()
      Description copied from interface: SessionDataStore
      True if this type of datastore will passivate session objects
      Returns:
      true if this store can passivate sessions, false otherwise
    • doExists

      public boolean doExists(String id) throws Exception
      Description copied from class: AbstractSessionDataStore
      Check if a session for the given id exists.
      Specified by:
      doExists in class AbstractSessionDataStore
      Parameters:
      id - the session id to check
      Returns:
      true if the session exists in the persistent store, false otherwise
      Throws:
      Exception
    • save

      protected void save(OutputStream os, String id, SessionData data) throws IOException
      Save the session data.
      Parameters:
      os - the output stream to save to
      id - identity of the session
      data - the info of the session
      Throws:
      IOException
    • getIdWithContext

      protected String getIdWithContext(String id)
      Get the session id with its context.
      Parameters:
      id - identity of session
      Returns:
      the session id plus context
    • getIdWithContextAndExpiry

      protected String getIdWithContextAndExpiry(SessionData data)
      Get the session id with its context and its expiry time
      Parameters:
      data - the session data
      Returns:
      the session id plus context and expiry
    • getIdFromFilename

      protected String getIdFromFilename(String filename)
    • getExpiryFromFilename

      protected long getExpiryFromFilename(String filename)
    • getContextFromFilename

      protected String getContextFromFilename(String filename)
    • getIdWithContextFromFilename

      protected String getIdWithContextFromFilename(String filename)
      Extract the session id and context from the filename
      Parameters:
      filename - the name of the file to use
      Returns:
      the session id plus context
    • isSessionFilename

      protected boolean isSessionFilename(String filename)
      Check if the filename is a session filename.
      Parameters:
      filename - the filename to check
      Returns:
      true if the filename has the correct filename format
    • isOurContextSessionFilename

      protected boolean isOurContextSessionFilename(String filename)
      Check if the filename matches our session pattern and is a session for our context.
      Parameters:
      filename - the filename to check
      Returns:
      true if the filename has the correct filename format and is for this context
    • load

      protected SessionData load(InputStream is, String expectedId) throws Exception
      Load the session data from a file.
      Parameters:
      is - file input stream containing session data
      expectedId - the id we've been told to load
      Returns:
      the session data
      Throws:
      Exception
    • toString

      public String toString()
      Overrides:
      toString in class AbstractSessionDataStore