- java.lang.Object
-
- org.eclipse.jetty.util.component.AbstractLifeCycle
-
- org.eclipse.jetty.util.component.ContainerLifeCycle
-
- org.eclipse.jetty.server.session.AbstractSessionDataStore
-
- org.eclipse.jetty.server.session.FileSessionDataStore
-
- 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
@ManagedObject public class FileSessionDataStore extends AbstractSessionDataStore
FileSessionDataStore A file-based store of session data.
-
-
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
-
-
Field Summary
Fields Modifier and Type Field Description protected java.lang.String_contextStringprotected boolean_deleteUnrestorableFilesprotected long_lastSweepTimeprotected java.util.Map<java.lang.String,java.lang.String>_sessionFileMapprotected java.io.File_storeDir-
Fields inherited from class org.eclipse.jetty.server.session.AbstractSessionDataStore
_context, _gracePeriodSec, _lastExpiryCheckTime, _lastOrphanSweepTime, _savePeriodSec, DEFAULT_GRACE_PERIOD_SEC, DEFAULT_SAVE_PERIOD_SEC
-
-
Constructor Summary
Constructors Constructor Description FileSessionDataStore()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleandelete(java.lang.String id)Delete a sessionbooleandeleteFile(java.lang.String filename)Delete the file associated with a sessionjava.util.Set<java.lang.String>doCheckExpired(java.util.Set<java.lang.String> candidates, long time)Check to see which sessions have expired.voiddoCleanOrphans(long time)Implemented by subclasses to delete sessions for other contexts that expired at or before the timeLimit.booleandoExists(java.lang.String id)Check if a session for the given id exists.java.util.Set<java.lang.String>doGetExpired(long timeLimit)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.SessionDatadoLoad(java.lang.String id)Load the session from persistent store.protected voiddoStart()protected voiddoStop()voiddoStore(java.lang.String id, SessionData data, long lastSaveTime)Store the session data persistently.protected java.lang.StringgetContextFromFilename(java.lang.String filename)protected longgetExpiryFromFilename(java.lang.String filename)protected java.lang.StringgetIdFromFilename(java.lang.String filename)protected java.lang.StringgetIdWithContext(java.lang.String id)Get the session id with its context.protected java.lang.StringgetIdWithContextAndExpiry(SessionData data)Get the session id with its context and its expiry timeprotected java.lang.StringgetIdWithContextFromFilename(java.lang.String filename)Extract the session id and context from the filenamejava.io.FilegetStoreDir()voidinitialize(SessionContext context)Initialize this data map for the given context.voidinitializeStore()Read the names of the existing session files and build a map of fully qualified session ids (ie with context) to filename.booleanisDeleteUnrestorableFiles()protected booleanisOurContextSessionFilename(java.lang.String filename)Check if the filename matches our session pattern and is a session for our context.booleanisPassivating()True if this type of datastore will passivate session objectsprotected booleanisSessionFilename(java.lang.String filename)Check if the filename is a session filename.protected SessionDataload(java.io.InputStream is, java.lang.String expectedId)Load the session data from a file.protected voidsave(java.io.OutputStream os, java.lang.String id, SessionData data)Save the session data.voidsetDeleteUnrestorableFiles(boolean deleteUnrestorableFiles)voidsetStoreDir(java.io.File storeDir)protected voidsweepDisk(long time)Check all session files for any context and remove any that expired at or before the time limit.protected voidsweepFile(long time, java.nio.file.Path p)Delete file (from any context) that expired at or before the given timejava.lang.StringtoString()-
Methods inherited from class org.eclipse.jetty.server.session.AbstractSessionDataStore
checkStarted, cleanOrphans, exists, getExpired, getGracePeriodSec, getSavePeriodSec, load, newSessionData, setGracePeriodSec, setSavePeriodSec, store
-
Methods inherited from class org.eclipse.jetty.util.component.ContainerLifeCycle
addBean, addBean, addEventListener, addManaged, contains, destroy, dump, dump, dump, dumpObjects, dumpStdErr, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, 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
-
-
-
-
Field Detail
-
_storeDir
protected java.io.File _storeDir
-
_deleteUnrestorableFiles
protected boolean _deleteUnrestorableFiles
-
_sessionFileMap
protected java.util.Map<java.lang.String,java.lang.String> _sessionFileMap
-
_contextString
protected java.lang.String _contextString
-
_lastSweepTime
protected long _lastSweepTime
-
-
Method Detail
-
initialize
public void initialize(SessionContext context) throws java.lang.Exception
Description copied from interface:SessionDataMapInitialize this data map for the given context. A SessionDataMap can only be used by one context(/session manager).- Specified by:
initializein interfaceSessionDataMap- Overrides:
initializein classAbstractSessionDataStore- Parameters:
context- context associated- Throws:
java.lang.Exception- if unable to initialize the
-
doStart
protected void doStart() throws java.lang.Exception- Overrides:
doStartin classAbstractSessionDataStore- Throws:
java.lang.Exception
-
doStop
protected void doStop() throws java.lang.Exception- Overrides:
doStopin classorg.eclipse.jetty.util.component.ContainerLifeCycle- Throws:
java.lang.Exception
-
getStoreDir
@ManagedAttribute(value="dir where sessions are stored", readonly=true) public java.io.File getStoreDir()
-
setStoreDir
public void setStoreDir(java.io.File storeDir)
-
isDeleteUnrestorableFiles
public boolean isDeleteUnrestorableFiles()
-
setDeleteUnrestorableFiles
public void setDeleteUnrestorableFiles(boolean deleteUnrestorableFiles)
-
delete
public boolean delete(java.lang.String id) throws java.lang.ExceptionDelete a session- Parameters:
id- session id- Returns:
- true if the session was deleted
- Throws:
java.lang.Exception- if unable to delete session data
-
deleteFile
public boolean deleteFile(java.lang.String filename) throws java.lang.ExceptionDelete 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:
java.lang.Exception- indicating delete failure
-
doCheckExpired
public java.util.Set<java.lang.String> doCheckExpired(java.util.Set<java.lang.String> candidates, long time)Check to see which sessions have expired.- Specified by:
doCheckExpiredin classAbstractSessionDataStore- Parameters:
candidates- the set of session ids that the SessionCache believes have expiredtime- 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 java.util.Set<java.lang.String> doGetExpired(long timeLimit)
Description copied from class:AbstractSessionDataStoreImplemented 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:
doGetExpiredin classAbstractSessionDataStore- 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:AbstractSessionDataStoreImplemented 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:
doCleanOrphansin classAbstractSessionDataStore- 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, java.nio.file.Path p)Delete file (from any context) that expired at or before the given time- Parameters:
time- the time in msecp- the file to check
-
doLoad
public SessionData doLoad(java.lang.String id) throws java.lang.Exception
Description copied from class:AbstractSessionDataStoreLoad the session from persistent store.- Specified by:
doLoadin classAbstractSessionDataStore- Parameters:
id- the id of the session to load- Returns:
- the re-inflated session
- Throws:
java.lang.Exception- if unable to load the session
-
doStore
public void doStore(java.lang.String id, SessionData data, long lastSaveTime) throws java.lang.ExceptionDescription copied from class:AbstractSessionDataStoreStore the session data persistently.- Specified by:
doStorein classAbstractSessionDataStore- Parameters:
id- identity of session to storedata- info of the sessionlastSaveTime- time of previous save or 0 if never saved- Throws:
java.lang.Exception- if unable to store data
-
initializeStore
public void initializeStore() throws java.lang.ExceptionRead 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:
java.lang.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:SessionDataStoreTrue if this type of datastore will passivate session objects- Returns:
- true if this store can passivate sessions, false otherwise
-
doExists
public boolean doExists(java.lang.String id) throws java.lang.ExceptionDescription copied from class:AbstractSessionDataStoreCheck if a session for the given id exists.- Specified by:
doExistsin classAbstractSessionDataStore- Parameters:
id- the session id to check- Returns:
- true if the session exists in the persistent store, false otherwise
- Throws:
java.lang.Exception
-
save
protected void save(java.io.OutputStream os, java.lang.String id, SessionData data) throws java.io.IOExceptionSave the session data.- Parameters:
os- the output stream to save toid- identity of the sessiondata- the info of the session- Throws:
java.io.IOException
-
getIdWithContext
protected java.lang.String getIdWithContext(java.lang.String id)
Get the session id with its context.- Parameters:
id- identity of session- Returns:
- the session id plus context
-
getIdWithContextAndExpiry
protected java.lang.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 java.lang.String getIdFromFilename(java.lang.String filename)
-
getExpiryFromFilename
protected long getExpiryFromFilename(java.lang.String filename)
-
getContextFromFilename
protected java.lang.String getContextFromFilename(java.lang.String filename)
-
getIdWithContextFromFilename
protected java.lang.String getIdWithContextFromFilename(java.lang.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(java.lang.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(java.lang.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(java.io.InputStream is, java.lang.String expectedId) throws java.lang.Exception
Load the session data from a file.- Parameters:
is- file input stream containing session dataexpectedId- the id we've been told to load- Returns:
- the session data
- Throws:
java.lang.Exception
-
toString
public java.lang.String toString()
- Overrides:
toStringin classAbstractSessionDataStore
-
-