Package org.eclipse.jetty.server.session
Class CachingSessionDataStore
java.lang.Object
org.eclipse.jetty.util.component.AbstractLifeCycle
org.eclipse.jetty.util.component.ContainerLifeCycle
org.eclipse.jetty.server.session.CachingSessionDataStore
- All Implemented Interfaces:
SessionDataMap,SessionDataStore,Container,Destroyable,Dumpable,Dumpable.DumpableContainer,LifeCycle
CachingSessionDataStore
A SessionDataStore is a mechanism for (persistently) storing data associated with sessions.
This implementation delegates to a pluggable SessionDataStore for actually storing the
session data. It also uses a pluggable cache implementation in front of the
delegate SessionDataStore to improve performance: accessing most persistent store
technology can be expensive time-wise, so introducing a fronting cache
can increase performance. The cache implementation can either be a local cache,
a remote cache, or a clustered cache.
The implementation here will try to read first from the cache and fallback to
reading from the SessionDataStore if the session key is not found. On writes, the
session data is written first to the SessionDataStore, and then to the cache. On
deletes, the data is deleted first from the SessionDataStore, and then from the
cache. There is no transaction manager ensuring atomic operations, so it is
possible that failures can result in cache inconsistency.
-
Nested Class Summary
Nested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
AbstractLifeCycle.AbstractLifeCycleListener, AbstractLifeCycle.StopExceptionNested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Container
Container.InheritedListener, Container.ListenerNested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Dumpable
Dumpable.DumpableContainerNested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle
LifeCycle.Listener -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected SessionDataMapThe fronting cacheprotected SessionDataStoreThe actual store for the session data -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleanDelete session dataprotected voiddoStart()Starts the managed lifecycle beans in the order they were added.protected voiddoStop()Stops the managed lifecycle beans in the reverse order they were added.booleanTest 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.voidinitialize(SessionContext context) Initialize this data map for the given context.booleanTrue if this type of datastore will passivate session objectsRead in session data.newSessionData(String id, long created, long accessed, long lastAccessed, long maxInactiveMs) Create a new SessionDatavoidstore(String id, SessionData data) Store the session data.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, updateBeansMethods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
getEventListeners, getState, getState, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, setEventListeners, start, stop, toStringMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.eclipse.jetty.util.component.Container
getCachedBeans, getEventListenersMethods inherited from interface org.eclipse.jetty.util.component.Dumpable.DumpableContainer
isDumpableMethods inherited from interface org.eclipse.jetty.util.component.LifeCycle
addEventListener, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeEventListener, start, stop
-
Field Details
-
_store
The actual store for the session data -
_cache
The fronting cache
-
-
Constructor Details
-
CachingSessionDataStore
- Parameters:
cache- the front cache to usestore- the actual store for the the session data
-
-
Method Details
-
getSessionStore
- Returns:
- the delegate session store
-
getSessionDataMap
- Returns:
- the fronting cache for session data
-
load
Description copied from interface:SessionDataMapRead in session data.- Specified by:
loadin interfaceSessionDataMap- Parameters:
id- identity of session to load- Returns:
- the SessionData matching the id
- Throws:
Exception- if unable to load session data
-
delete
Description copied from interface:SessionDataMapDelete session data- Specified by:
deletein interfaceSessionDataMap- Parameters:
id- identity of session to delete- Returns:
- true if the session was deleted
- Throws:
Exception- if unable to delete session data
-
getExpired
Description copied from interface:SessionDataStoreCalled periodically, this method should search the data store for sessions that have been expired for a 'reasonable' amount of time.- Specified by:
getExpiredin interfaceSessionDataStore- 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
-
store
Description copied from interface:SessionDataMapStore the session data.- Specified by:
storein interfaceSessionDataMap- Parameters:
id- identity of session to storedata- info of session to store- Throws:
Exception- if unable to write session data
-
doStart
Description copied from class:ContainerLifeCycleStarts the managed lifecycle beans in the order they were added.- Overrides:
doStartin classContainerLifeCycle- 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
Description copied from class:ContainerLifeCycleStops the managed lifecycle beans in the reverse order they were added.- Overrides:
doStopin classContainerLifeCycle- Throws:
Exception- If there was a problem stopping. Will cause a transition to FAILED state
-
isPassivating
public boolean isPassivating()Description copied from interface:SessionDataStoreTrue if this type of datastore will passivate session objects- Specified by:
isPassivatingin interfaceSessionDataStore- Returns:
- true if this store can passivate sessions, false otherwise
-
exists
Description copied from interface:SessionDataStoreTest if data exists for a given session id.- Specified by:
existsin interfaceSessionDataStore- 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
-
initialize
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- Parameters:
context- context associated- Throws:
Exception- if unable to initialize the
-
newSessionData
public SessionData newSessionData(String id, long created, long accessed, long lastAccessed, long maxInactiveMs) Description copied from interface:SessionDataStoreCreate a new SessionData- Specified by:
newSessionDatain interfaceSessionDataStore- Parameters:
id- the idcreated- the timestamp when createdaccessed- the timestamp when accessedlastAccessed- the timestamp when last accessedmaxInactiveMs- the max inactive time in milliseconds- Returns:
- a new SessionData object
-