@ManagedObject public class FileSessionDataStore extends AbstractSessionDataStore
AbstractLifeCycle.AbstractLifeCycleListener
LifeCycle.Listener
Container.InheritedListener, Container.Listener
Modifier and Type | Field and Description |
---|---|
private java.lang.String |
_contextString |
private boolean |
_deleteUnrestorableFiles |
protected long |
_lastSweepTime |
private java.util.Map<java.lang.String,java.lang.String> |
_sessionFileMap |
private java.io.File |
_storeDir |
private static Logger |
LOG |
_context, _gracePeriodSec, _lastExpiryCheckTime, _savePeriodSec
FAILED, RUNNING, STARTED, STARTING, STOP_ON_FAILURE, STOPPED, STOPPING
Constructor and Description |
---|
FileSessionDataStore() |
Modifier and Type | Method and Description |
---|---|
boolean |
delete(java.lang.String id)
Delete a session
|
boolean |
deleteFile(java.lang.String filename)
Delete the file associated with a session
|
java.util.Set<java.lang.String> |
doGetExpired(java.util.Set<java.lang.String> candidates)
Check to see which sessions have expired.
|
protected void |
doStart()
Starts the managed lifecycle beans in the order they were added.
|
protected void |
doStop()
Stops the managed lifecycle beans in the reverse order they were added.
|
void |
doStore(java.lang.String id,
SessionData data,
long lastSaveTime)
Store the session data persistently.
|
boolean |
exists(java.lang.String id)
Test if data exists for a given session id.
|
private java.lang.String |
getContextFromFilename(java.lang.String filename) |
private long |
getExpiryFromFilename(java.lang.String filename) |
private java.lang.String |
getIdFromFilename(java.lang.String filename) |
private java.lang.String |
getIdWithContext(java.lang.String id)
Get the session id with its context.
|
private java.lang.String |
getIdWithContextAndExpiry(SessionData data)
Get the session id with its context and its expiry time
|
private java.lang.String |
getIdWithContextFromFilename(java.lang.String filename)
Extract the session id and context from the filename
|
java.io.File |
getStoreDir() |
void |
initialize(SessionContext context)
Initialize this data map for the
given context.
|
void |
initializeStore()
Read the names of the existing session files and build a map of
fully qualified session ids (ie with context) to filename.
|
boolean |
isDeleteUnrestorableFiles() |
private boolean |
isOurContextSessionFilename(java.lang.String filename)
Check if the filename matches our session pattern
and is a session for our context.
|
boolean |
isPassivating()
True if this type of datastore will passivate session objects
|
private boolean |
isSessionFilename(java.lang.String filename)
Check if the filename is a session filename.
|
private SessionData |
load(java.io.InputStream is,
java.lang.String expectedId) |
SessionData |
load(java.lang.String id)
Read in session data.
|
private void |
restoreAttributes(java.io.InputStream is,
int size,
SessionData data) |
private void |
save(java.io.OutputStream os,
java.lang.String id,
SessionData data) |
void |
setDeleteUnrestorableFiles(boolean deleteUnrestorableFiles) |
void |
setStoreDir(java.io.File storeDir) |
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).
|
void |
sweepFile(long now,
java.nio.file.Path p)
Check to see if the expiry on the file is very old, and
delete the file if so.
|
java.lang.String |
toString() |
checkStarted, getExpired, getGracePeriodSec, getSavePeriodSec, newSessionData, setGracePeriodSec, setSavePeriodSec, store
addBean, addBean, addBean, addEventListener, addManaged, contains, destroy, dump, dump, dump, dump, dump, dumpBeans, dumpObject, dumpStdErr, dumpThis, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, isManaged, manage, removeBean, removeBeans, removeEventListener, setBeans, setStopTimeout, start, stop, unmanage, updateBean, updateBean, updateBeans
addLifeCycleListener, getState, getState, getStopTimeout, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, start, stop
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
addLifeCycleListener, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, start, start, stop, stop
private static final Logger LOG
private java.io.File _storeDir
private boolean _deleteUnrestorableFiles
private java.util.Map<java.lang.String,java.lang.String> _sessionFileMap
private java.lang.String _contextString
protected long _lastSweepTime
public void initialize(SessionContext context) throws java.lang.Exception
SessionDataMap
initialize
in interface SessionDataMap
initialize
in class AbstractSessionDataStore
context
- context associatedjava.lang.Exception
- if unable to initialize theSessionDataMap.initialize(org.eclipse.jetty.server.session.SessionContext)
protected void doStart() throws java.lang.Exception
ContainerLifeCycle
doStart
in class AbstractSessionDataStore
java.lang.Exception
protected void doStop() throws java.lang.Exception
ContainerLifeCycle
doStop
in class ContainerLifeCycle
java.lang.Exception
@ManagedAttribute(value="dir where sessions are stored", readonly=true) public java.io.File getStoreDir()
public void setStoreDir(java.io.File storeDir)
public boolean isDeleteUnrestorableFiles()
public void setDeleteUnrestorableFiles(boolean deleteUnrestorableFiles)
public boolean delete(java.lang.String id) throws java.lang.Exception
id
- session idjava.lang.Exception
- if unable to delete session datapublic boolean deleteFile(java.lang.String filename) throws java.lang.Exception
filename
- name of the file containing the session's informationjava.lang.Exception
- indicating delete failurepublic java.util.Set<java.lang.String> doGetExpired(java.util.Set<java.lang.String> candidates)
doGetExpired
in class AbstractSessionDataStore
candidates
- the set of session ids that the SessionCache believes
have expiredpublic void sweepDisk()
public void sweepFile(long now, java.nio.file.Path p) throws java.lang.Exception
now
- the time now in msecp
- the file to checkjava.lang.Exception
- indicating error in sweeppublic SessionData load(java.lang.String id) throws java.lang.Exception
SessionDataMap
id
- identity of session to loadjava.lang.Exception
- if unable to load session dataSessionDataMap.load(java.lang.String)
public void doStore(java.lang.String id, SessionData data, long lastSaveTime) throws java.lang.Exception
AbstractSessionDataStore
doStore
in class AbstractSessionDataStore
id
- identity of session to storedata
- info of the sessionlastSaveTime
- time of previous save or 0 if never savedjava.lang.Exception
- if unable to store dataAbstractSessionDataStore.doStore(java.lang.String, org.eclipse.jetty.server.session.SessionData, long)
public void initializeStore() throws java.lang.Exception
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.@ManagedAttribute(value="are sessions serialized by this store", readonly=true) public boolean isPassivating()
SessionDataStore
SessionDataStore.isPassivating()
public boolean exists(java.lang.String id) throws java.lang.Exception
SessionDataStore
id
- Identity of session whose existance should be checkedjava.lang.Exception
- if problem checking existance with persistence layerSessionDataStore.exists(java.lang.String)
private void save(java.io.OutputStream os, java.lang.String id, SessionData data) throws java.io.IOException
os
- the output stream to save toid
- identity of the sessiondata
- the info of the sessionjava.io.IOException
private java.lang.String getIdWithContext(java.lang.String id)
id
- identity of sessionprivate java.lang.String getIdWithContextAndExpiry(SessionData data)
data
- private java.lang.String getIdFromFilename(java.lang.String filename)
private long getExpiryFromFilename(java.lang.String filename)
private java.lang.String getContextFromFilename(java.lang.String filename)
private java.lang.String getIdWithContextFromFilename(java.lang.String filename)
filename
- the name of the file to useprivate boolean isSessionFilename(java.lang.String filename)
filename
- the filename to checkprivate boolean isOurContextSessionFilename(java.lang.String filename)
filename
- the filename to checkprivate SessionData load(java.io.InputStream is, java.lang.String expectedId) throws java.lang.Exception
is
- inputstream containing session dataexpectedId
- the id we've been told to loadjava.lang.Exception
private void restoreAttributes(java.io.InputStream is, int size, SessionData data) throws java.lang.Exception
is
- inputstream containing session datasize
- number of attributesdata
- the data to restore tojava.lang.Exception
public java.lang.String toString()
toString
in class AbstractSessionDataStore
AbstractSessionDataStore.toString()