Package org.eclipse.jetty.server.session
Class FileSessionDataStore
- 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.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
-
-
Field Summary
Fields Modifier and Type Field Description protected String_contextStringprotected boolean_deleteUnrestorableFilesprotected long_lastSweepTimeprotected Map<String,String>_sessionFileMapprotected File_storeDir-
Fields inherited from class org.eclipse.jetty.server.session.AbstractSessionDataStore
_context, _gracePeriodSec, _lastExpiryCheckTime, _savePeriodSec
-
-
Constructor Summary
Constructors Constructor Description FileSessionDataStore()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleandelete(String id)Delete a sessionbooleandeleteFile(String filename)Delete the file associated with a sessionSet<String>doGetExpired(Set<String> candidates)Check to see which sessions have expired.SessionDatadoLoad(String id)Load the session from persistent store.protected voiddoStart()protected voiddoStop()voiddoStore(String id, SessionData data, long lastSaveTime)Store the session data persistently.booleanexists(String id)Test if data exists for a given session id.protected StringgetContextFromFilename(String filename)protected longgetExpiryFromFilename(String filename)protected StringgetIdFromFilename(String filename)protected StringgetIdWithContext(String id)Get the session id with its context.protected StringgetIdWithContextAndExpiry(SessionData data)Get the session id with its context and its expiry timeprotected StringgetIdWithContextFromFilename(String filename)Extract the session id and context from the filenameFilegetStoreDir()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(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(String filename)Check if the filename is a session filename.protected SessionDataload(InputStream is, String expectedId)Load the session data from a file.protected voidsave(OutputStream os, String id, SessionData data)Save the session data.voidsetDeleteUnrestorableFiles(boolean deleteUnrestorableFiles)voidsetStoreDir(File storeDir)voidsweepDisk()Check all session files that do not belong to this context and remove any that expired long ago (ie at least 5 gracePeriods ago).voidsweepFile(long now, Path p)Check to see if the expiry on the file is very old, and delete the file if so.StringtoString()-
Methods inherited from class org.eclipse.jetty.server.session.AbstractSessionDataStore
checkStarted, getExpired, getGracePeriodSec, getSavePeriodSec, load, newSessionData, setGracePeriodSec, setSavePeriodSec, store
-
Methods inherited from class org.eclipse.jetty.util.component.ContainerLifeCycle
addBean, addBean, addBean, addEventListener, addManaged, contains, destroy, dump, dump, dump, dump, dump, dumpBeans, dumpObject, dumpObjects, dumpStdErr, dumpThis, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, isAuto, isManaged, isUnmanaged, manage, removeBean, removeBeans, removeEventListener, setBeans, setStopTimeout, start, stop, unmanage, updateBean, updateBean, updateBeans
-
Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
addLifeCycleListener, getState, getState, getStopTimeout, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, start, stop
-
-
-
-
Method Detail
-
initialize
public void initialize(SessionContext context) throws 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:
Exception- if unable to initialize the
-
doStart
protected void doStart() throws Exception- Overrides:
doStartin classAbstractSessionDataStore- Throws:
Exception
-
doStop
protected void doStop() throws Exception- Overrides:
doStopin classorg.eclipse.jetty.util.component.ContainerLifeCycle- Throws:
Exception
-
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
-
doGetExpired
public Set<String> doGetExpired(Set<String> candidates)
Check to see which sessions have expired.- Specified by:
doGetExpiredin classAbstractSessionDataStore- Parameters:
candidates- the set of session ids that the SessionCache believes have expired- Returns:
- the complete set of sessions that have expired, including those that are not currently loaded into the SessionCache
-
sweepDisk
public void sweepDisk()
Check all session files that do not belong to this context and remove any that expired long ago (ie at least 5 gracePeriods ago).
-
sweepFile
public void sweepFile(long now, Path p) throws ExceptionCheck to see if the expiry on the file is very old, and delete the file if so. "Old" means that it expired at least 5 gracePeriods ago. The session can belong to any context.- Parameters:
now- the time now in msecp- the file to check- Throws:
Exception- indicating error in sweep
-
doLoad
public SessionData doLoad(String id) throws 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:
Exception- if unable to load the session
-
doStore
public void doStore(String id, SessionData data, long lastSaveTime) throws Exception
Description 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:
Exception- if unable to store data
-
initializeStore
public void initializeStore() throws 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:
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
-
exists
public boolean exists(String id) throws Exception
Description copied from interface:SessionDataStoreTest if data exists for a given session id.- 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
-
save
protected void save(OutputStream os, String id, SessionData data) throws IOException
Save the session data.- Parameters:
os- the output stream to save toid- identity of the sessiondata- 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-- Returns:
- the session id plus context and expiry
-
getExpiryFromFilename
protected long getExpiryFromFilename(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 dataexpectedId- the id we've been told to load- Returns:
- the session data
- Throws:
Exception
-
toString
public String toString()
- Overrides:
toStringin classAbstractSessionDataStore
-
-