Class AbstractSessionDataStore

java.lang.Object
org.eclipse.jetty.util.component.AbstractLifeCycle
org.eclipse.jetty.util.component.ContainerLifeCycle
org.eclipse.jetty.session.AbstractSessionDataStore
All Implemented Interfaces:
SessionDataMap, SessionDataStore, org.eclipse.jetty.util.component.Container, org.eclipse.jetty.util.component.Destroyable, org.eclipse.jetty.util.component.Dumpable, org.eclipse.jetty.util.component.Dumpable.DumpableContainer, org.eclipse.jetty.util.component.LifeCycle
Direct Known Subclasses:
NullSessionDataStore, ObjectStreamSessionDataStore

@ManagedObject public abstract class AbstractSessionDataStore extends org.eclipse.jetty.util.component.ContainerLifeCycle implements SessionDataStore
AbstractSessionDataStore
  • Nested Class Summary

    Nested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

    org.eclipse.jetty.util.component.AbstractLifeCycle.AbstractLifeCycleListener, org.eclipse.jetty.util.component.AbstractLifeCycle.StopException

    Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Container

    org.eclipse.jetty.util.component.Container.InheritedListener, org.eclipse.jetty.util.component.Container.Listener

    Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Dumpable

    org.eclipse.jetty.util.component.Dumpable.DumpableContainer

    Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle

    org.eclipse.jetty.util.component.LifeCycle.Listener
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected SessionContext
     
    protected int
     
    protected long
     
    protected long
     
    protected int
     
    static final int
     
    static final int
     

    Fields inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

    FAILED, STARTED, STARTING, STOPPED, STOPPING

    Fields inherited from interface org.eclipse.jetty.util.component.Dumpable

    KEY
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected void
     
    void
    cleanOrphans(long timeLimit)
    Remove all sessions for any context that expired at or before the given time.
    abstract Set<String>
    doCheckExpired(Set<String> candidates, long time)
    Implemented by subclasses to resolve which sessions in this context that are being managed by this node that should be expired.
    abstract void
    doCleanOrphans(long time)
    Implemented by subclasses to delete sessions for other contexts that expired at or before the timeLimit.
    abstract boolean
    Check if a session for the given id exists.
    abstract Set<String>
    doGetExpired(long before)
    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.
    abstract SessionData
    Load the session from persistent store.
    protected void
     
    abstract void
    doStore(String id, SessionData data, long lastSaveTime)
    Store the session data persistently.
    boolean
    Test if data exists for a given session id.
    getExpired(Set<String> candidates)
    Called periodically, this method should search the data store for sessions that have been expired for a 'reasonable' amount of time.
    int
     
    int
     
    void
    Initialize this data map for the given context.
    Read in session data.
    newSessionData(String id, long created, long accessed, long lastAccessed, long maxInactiveMs)
    Create a new SessionData
    void
     
    void
    setSavePeriodSec(int savePeriodSec)
    The minimum time in seconds between save operations.
    void
    Store the session data.
     

    Methods inherited from class org.eclipse.jetty.util.component.ContainerLifeCycle

    addBean, addBean, addEventListener, addManaged, contains, destroy, doStop, dump, dump, dump, dumpObjects, dumpStdErr, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, installBean, installBean, isAuto, isManaged, isUnmanaged, manage, removeBean, removeBeans, removeEventListener, setBeans, start, stop, unmanage, updateBean, updateBean, updateBeans, updateBeans

    Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

    getEventListeners, getState, getState, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, setEventListeners, start, stop

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

    Methods inherited from interface org.eclipse.jetty.util.component.Container

    getCachedBeans, getEventListeners

    Methods inherited from interface org.eclipse.jetty.util.component.Dumpable

    dumpSelf

    Methods inherited from interface org.eclipse.jetty.util.component.Dumpable.DumpableContainer

    isDumpable

    Methods inherited from interface org.eclipse.jetty.util.component.LifeCycle

    addEventListener, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeEventListener, start, stop

    Methods inherited from interface org.eclipse.jetty.session.SessionDataMap

    delete

    Methods inherited from interface org.eclipse.jetty.session.SessionDataStore

    isPassivating
  • Field Details

    • DEFAULT_GRACE_PERIOD_SEC

      public static final int DEFAULT_GRACE_PERIOD_SEC
      See Also:
    • DEFAULT_SAVE_PERIOD_SEC

      public static final int DEFAULT_SAVE_PERIOD_SEC
      See Also:
    • _context

      protected SessionContext _context
    • _gracePeriodSec

      protected int _gracePeriodSec
    • _lastExpiryCheckTime

      protected long _lastExpiryCheckTime
    • _lastOrphanSweepTime

      protected long _lastOrphanSweepTime
    • _savePeriodSec

      protected int _savePeriodSec
  • Constructor Details

    • AbstractSessionDataStore

      public AbstractSessionDataStore()
  • Method Details

    • doExists

      public abstract boolean doExists(String id) throws Exception
      Check if a session for the given id exists.
      Parameters:
      id - the session id to check
      Returns:
      true if the session exists in the persistent store, false otherwise
      Throws:
      Exception
    • doStore

      public abstract void doStore(String id, SessionData data, long lastSaveTime) throws Exception
      Store the session data persistently.
      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
    • doLoad

      public abstract SessionData doLoad(String id) throws Exception
      Load the session from persistent store.
      Parameters:
      id - the id of the session to load
      Returns:
      the re-inflated session
      Throws:
      Exception - if unable to load the session
    • doCheckExpired

      public abstract Set<String> doCheckExpired(Set<String> candidates, long time)
      Implemented by subclasses to resolve which sessions in this context that are being managed by this node that should be expired.
      Parameters:
      candidates - the ids of sessions the SessionCache thinks has expired
      time - the time at which to check for expiry
      Returns:
      the reconciled set of session ids that have been checked in the store
    • doGetExpired

      public abstract Set<String> doGetExpired(long before)
      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.
      Parameters:
      before - 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 abstract void doCleanOrphans(long time)
      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.
      Parameters:
      time - the upper limit of the expiry time to check in msec
    • 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
      Parameters:
      context - context associated
      Throws:
      Exception - if unable to initialize the
    • cleanOrphans

      public void cleanOrphans(long timeLimit)
      Remove all sessions for any context that expired at or before the given time.
      Parameters:
      timeLimit - the time before which the sessions must have expired.
    • load

      public SessionData load(String id) throws Exception
      Description copied from interface: SessionDataMap
      Read in session data.
      Specified by:
      load in interface SessionDataMap
      Parameters:
      id - identity of session to load
      Returns:
      the SessionData matching the id
      Throws:
      Exception - if unable to load session data
    • store

      public void store(String id, SessionData data) throws Exception
      Description copied from interface: SessionDataMap
      Store the session data.
      Specified by:
      store in interface SessionDataMap
      Parameters:
      id - identity of session to store
      data - info of session to store
      Throws:
      Exception - if unable to write session data
    • exists

      public boolean exists(String id) throws Exception
      Description copied from interface: SessionDataStore
      Test if data exists for a given session id.
      Specified by:
      exists in interface SessionDataStore
      Parameters:
      id - Identity of session whose existence should be checked
      Returns:
      true if valid, non-expired session exists
      Throws:
      Exception - if problem checking existence with persistence layer
    • getExpired

      public Set<String> getExpired(Set<String> candidates)
      Description copied from interface: SessionDataStore
      Called periodically, this method should search the data store for sessions that have been expired for a 'reasonable' amount of time.
      Specified by:
      getExpired in interface SessionDataStore
      Parameters:
      candidates - if provided, these are keys of sessions that the SessionDataStore thinks has expired and should be verified by the SessionDataStore
      Returns:
      set of session ids
    • newSessionData

      public SessionData newSessionData(String id, long created, long accessed, long lastAccessed, long maxInactiveMs)
      Description copied from interface: SessionDataStore
      Create a new SessionData
      Specified by:
      newSessionData in interface SessionDataStore
      Parameters:
      id - the id
      created - the timestamp when created
      accessed - the timestamp when accessed
      lastAccessed - the timestamp when last accessed
      maxInactiveMs - the max inactive time in milliseconds
      Returns:
      a new SessionData object
    • checkStarted

      protected void checkStarted() throws IllegalStateException
      Throws:
      IllegalStateException
    • doStart

      protected void doStart() throws Exception
      Overrides:
      doStart in class org.eclipse.jetty.util.component.ContainerLifeCycle
      Throws:
      Exception
    • getGracePeriodSec

      @ManagedAttribute(value="interval in secs to prevent too eager session scavenging", readonly=true) public int getGracePeriodSec()
    • setGracePeriodSec

      public void setGracePeriodSec(int sec)
    • getSavePeriodSec

      @ManagedAttribute(value="min secs between saves", readonly=true) public int getSavePeriodSec()
      Returns:
      the savePeriodSec
    • setSavePeriodSec

      public void setSavePeriodSec(int savePeriodSec)
      The minimum time in seconds between save operations. Saves normally occur every time the last request exits as session. If nothing changes on the session except for the access time and the persistence technology is slow, this can cause delays.

      By default the value is 0, which means we save after the last request exists. A non zero value means that we will skip doing the save if the session isn't dirty if the elapsed time since the session was last saved does not exceed this value.

      Parameters:
      savePeriodSec - the savePeriodSec to set
    • toString

      public String toString()
      Overrides:
      toString in class org.eclipse.jetty.util.component.AbstractLifeCycle