Class MongoSessionDataStore
java.lang.Object
org.eclipse.jetty.util.component.AbstractLifeCycle
org.eclipse.jetty.util.component.ContainerLifeCycle
org.eclipse.jetty.session.AbstractSessionDataStore
org.eclipse.jetty.session.ObjectStreamSessionDataStore
org.eclipse.jetty.nosql.NoSqlSessionDataStore
org.eclipse.jetty.nosql.mongodb.MongoSessionDataStore
- All Implemented Interfaces:
SessionDataMap, SessionDataStore, Container, Destroyable, Dumpable, Dumpable.DumpableContainer, LifeCycle
MongoSessionDataStore
The document model is an outer object that contains the elements:
- "id" : session_id
- "created" : create_time
- "accessed": last_access_time
- "maxIdle" : max_idle_time setting as session was created
- "expiry" : time at which session should expire
- "valid" : session_valid
- "context" : a nested object containing 1 nested object per context for which the session id is in use
- unique_context_name : nested object containing name:value pairs of the session attributes for that context
- unique_context_name: vhost:contextpath, where no vhosts="0_0_0_0", root context = "", contextpath "/" replaced by "_"
One of the name:value attribute pairs will always be the special attribute "__metadata__". The value is an object representing a version counter which is incremented every time the attributes change.
For example:
{ "_id" : ObjectId("52845534a40b66410f228f23"),
"accessed" : NumberLong("1384818548903"),
"maxIdle" : 1,
"context" : { "0_0_0_0:_testA" : { "A" : "A",
"__metadata__" : { "version" : NumberLong(2) }
},
"0_0_0_0:_testB" : { "B" : "B",
"__metadata__" : { "version" : NumberLong(1) }
}
},
"created" : NumberLong("1384818548903"),
"expiry" : NumberLong("1384818549903"),
"id" : "w01ijx2vnalgv1sqrpjwuirprp7",
"valid" : true
}
In MongoDB, the nesting level is indicated by "." separators for the key name. Thus to
interact with session fields, the key is composed of:
"context".unique_context_name.field_name
Eg "context"."0_0_0_0:_testA"."lastSaved"
-
Nested Class Summary
Nested classes/interfaces inherited from class NoSqlSessionDataStore
NoSqlSessionDataStore.NoSqlSessionDataNested classes/interfaces inherited from class AbstractLifeCycle
AbstractLifeCycle.AbstractLifeCycleListener, AbstractLifeCycle.StopExceptionNested classes/interfaces inherited from interface Container
Container.InheritedListener, Container.ListenerNested classes/interfaces inherited from interface Dumpable
Dumpable.DumpableContainerNested classes/interfaces inherited from interface LifeCycle
LifeCycle.Listener -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringLast access time of sessionstatic final Stringstatic final StringName of nested document field containing 1 sub document per context for which the session id is in usestatic final StringTime of session creationstatic final StringTime this session will expire, based on last access time and maxIdlestatic final StringSession idstatic final Stringstatic final Stringstatic final Stringstatic final StringThe max idle time of a session (smallest value across all contexts which has a session with the same id)static final StringSpecial attribute for a session that is context-specificstatic final StringWhether or not session is validstatic final StringSpecial attribute per session per context, incremented each time attributes are modifiedFields inherited from class AbstractSessionDataStore
_context, _gracePeriodSec, _lastExpiryCheckTime, _lastOrphanSweepTime, _savePeriodSec, DEFAULT_GRACE_PERIOD_SEC, DEFAULT_SAVE_PERIOD_SEC -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleanDelete session datadoCheckExpired(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.voiddoCleanOrphans(long timeLimit) Implemented by subclasses to delete sessions for other contexts that expired at or before the timeLimit.booleanCheck if a session for the given id exists.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.Load the session from persistent store.protected voiddoStart()Starts the managed lifecycle beans in the order they were added.voiddoStore(String id, SessionData data, long lastSaveTime) Store the session data persistently.protected voidcom.mongodb.client.MongoCollection<org.bson.Document> voidinitialize(SessionContext context) Initialize this data map for the given context.booleanTrue if this type of datastore will passivate session objectsvoidsetDBCollection(com.mongodb.client.MongoCollection<org.bson.Document> collection) toString()Methods inherited from class NoSqlSessionDataStore
newSessionDataMethods inherited from class ObjectStreamSessionDataStore
deserializeAttributes, newObjectInputStream, newObjectOutputStream, serializeAttributesMethods inherited from class AbstractSessionDataStore
checkStarted, cleanOrphans, exists, getExpired, getGracePeriodSec, getSavePeriodSec, load, setGracePeriodSec, setSavePeriodSec, storeMethods inherited from class 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, updateBeansMethods inherited from class AbstractLifeCycle
getEventListeners, getState, getState, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, setEventListeners, start, stopMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface Container
getCachedBeans, getEventListenersMethods inherited from interface Dumpable.DumpableContainer
isDumpableMethods inherited from interface LifeCycle
addEventListener, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeEventListener, start, stop
-
Field Details
-
__METADATA
Special attribute for a session that is context-specific- See Also:
-
__CONTEXT
Name of nested document field containing 1 sub document per context for which the session id is in use- See Also:
-
__VERSION
Special attribute per session per context, incremented each time attributes are modified- See Also:
-
__LASTSAVED
- See Also:
-
__LASTNODE
- See Also:
-
__ACCESSED
-
__LAST_ACCESSED
- See Also:
-
__ATTRIBUTES
- See Also:
-
__EXPIRY
Time this session will expire, based on last access time and maxIdle- See Also:
-
__MAX_IDLE
The max idle time of a session (smallest value across all contexts which has a session with the same id)- See Also:
-
__CREATED
-
__VALID
-
__ID
-
-
Constructor Details
-
MongoSessionDataStore
public MongoSessionDataStore()
-
-
Method Details
-
setDBCollection
public void setDBCollection(com.mongodb.client.MongoCollection<org.bson.Document> collection) -
getDBCollection
@ManagedAttribute(value="DBCollection", readonly=true) public com.mongodb.client.MongoCollection<org.bson.Document> getDBCollection() -
doStart
Description copied from class:ContainerLifeCycleStarts the managed lifecycle beans in the order they were added.- Overrides:
doStartin classAbstractSessionDataStore- Throws:
Exception- If there was a problem starting. Will cause a transition to FAILED state
-
doLoad
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
-
delete
Description copied from interface:SessionDataMapDelete session data- Parameters:
id- identity of session to delete- Returns:
- true if the session was deleted
- Throws:
Exception- if unable to delete session data
-
doExists
Description 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:
Exception
-
doCheckExpired
Description copied from class:AbstractSessionDataStoreImplemented by subclasses to resolve which sessions in this context that are being managed by this node that should be expired.- Specified by:
doCheckExpiredin classAbstractSessionDataStore- Parameters:
candidates- the ids of sessions the SessionCache thinks has expiredtime- the time at which to check for expiry- Returns:
- the reconciled set of session ids that have been checked in the store
-
doGetExpired
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 timeLimit) 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:
timeLimit- the upper limit of the expiry time to check in msec
-
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- Overrides:
initializein classAbstractSessionDataStore- Parameters:
context- context associated- Throws:
Exception- if unable to initialize the- See Also:
-
doStore
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
-
ensureIndexes
protected void ensureIndexes() throws com.mongodb.MongoException- Throws:
com.mongodb.MongoException
-
isPassivating
@ManagedAttribute(value="does store serialize sessions", 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
-
toString
- Overrides:
toStringin classAbstractSessionDataStore
-