Package org.eclipse.jetty.nosql.mongodb
Class MongoSessionDataStore
- java.lang.Object
-
- org.eclipse.jetty.util.component.AbstractLifeCycle
-
- org.eclipse.jetty.util.component.ContainerLifeCycle
-
- org.eclipse.jetty.server.session.AbstractSessionDataStore
-
- org.eclipse.jetty.nosql.NoSqlSessionDataStore
-
- org.eclipse.jetty.nosql.mongodb.MongoSessionDataStore
-
- All Implemented Interfaces:
SessionDataMap
,SessionDataStore
,Container
,Destroyable
,Dumpable
,Dumpable.DumpableContainer
,LifeCycle
@ManagedObject public class MongoSessionDataStore extends NoSqlSessionDataStore
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 org.eclipse.jetty.nosql.NoSqlSessionDataStore
NoSqlSessionDataStore.NoSqlSessionData
-
Nested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
AbstractLifeCycle.AbstractLifeCycleListener
-
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Container
Container.InheritedListener, Container.Listener
-
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Dumpable
Dumpable.DumpableContainer
-
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle
LifeCycle.Listener
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
ACCESSED
Last access time of sessionstatic java.lang.String
ATTRIBUTES
static java.lang.String
CONTEXT
Name of nested document field containing 1 sub document per context for which the session id is in usestatic java.lang.String
CREATED
Time of session creationstatic java.lang.String
EXPIRY
Time this session will expire, based on last access time and maxIdlestatic java.lang.String
ID
Session idstatic java.lang.String
LAST_ACCESSED
static java.lang.String
LASTNODE
static java.lang.String
LASTSAVED
static java.lang.String
MAX_IDLE
The max idle time of a session (smallest value across all contexts which has a session with the same id)static java.lang.String
METADATA
Special attribute for a session that is context-specificstatic java.lang.String
VALID
Whether or not session is validstatic java.lang.String
VERSION
Special attribute per session per context, incremented each time attributes are modified-
Fields inherited from class org.eclipse.jetty.server.session.AbstractSessionDataStore
_context, _gracePeriodSec, _lastExpiryCheckTime, _savePeriodSec
-
-
Constructor Summary
Constructors Constructor Description MongoSessionDataStore()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
delete(java.lang.String id)
Delete session datajava.util.Set<java.lang.String>
doGetExpired(java.util.Set<java.lang.String> candidates)
Implemented by subclasses to resolve which sessions this node should attempt to expire.SessionData
doLoad(java.lang.String id)
Load the session from persistent store.void
doStore(java.lang.String id, SessionData data, long lastSaveTime)
Store the session data persistently.protected void
ensureIndexes()
boolean
exists(java.lang.String id)
Test if data exists for a given session id.com.mongodb.DBCollection
getDBCollection()
void
initialize(SessionContext context)
Initialize this data map for the given context.boolean
isPassivating()
True if this type of datastore will passivate session objectsvoid
setDBCollection(com.mongodb.DBCollection collection)
java.lang.String
toString()
-
Methods inherited from class org.eclipse.jetty.nosql.NoSqlSessionDataStore
newSessionData
-
Methods inherited from class org.eclipse.jetty.server.session.AbstractSessionDataStore
checkStarted, doStart, getExpired, getGracePeriodSec, getSavePeriodSec, load, setGracePeriodSec, setSavePeriodSec, store
-
Methods inherited from class org.eclipse.jetty.util.component.ContainerLifeCycle
addBean, addBean, addEventListener, addManaged, contains, destroy, doStop, 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
-
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.Dumpable.DumpableContainer
isDumpable
-
Methods inherited from interface org.eclipse.jetty.util.component.LifeCycle
addLifeCycleListener, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, start, stop
-
-
-
-
Field Detail
-
METADATA
public static final java.lang.String METADATA
Special attribute for a session that is context-specific- See Also:
- Constant Field Values
-
CONTEXT
public static final java.lang.String CONTEXT
Name of nested document field containing 1 sub document per context for which the session id is in use- See Also:
- Constant Field Values
-
VERSION
public static final java.lang.String VERSION
Special attribute per session per context, incremented each time attributes are modified- See Also:
- Constant Field Values
-
LASTSAVED
public static final java.lang.String LASTSAVED
- See Also:
- Constant Field Values
-
LASTNODE
public static final java.lang.String LASTNODE
- See Also:
- Constant Field Values
-
ACCESSED
public static final java.lang.String ACCESSED
Last access time of session- See Also:
- Constant Field Values
-
LAST_ACCESSED
public static final java.lang.String LAST_ACCESSED
- See Also:
- Constant Field Values
-
ATTRIBUTES
public static final java.lang.String ATTRIBUTES
- See Also:
- Constant Field Values
-
EXPIRY
public static final java.lang.String EXPIRY
Time this session will expire, based on last access time and maxIdle- See Also:
- Constant Field Values
-
MAX_IDLE
public static final java.lang.String MAX_IDLE
The max idle time of a session (smallest value across all contexts which has a session with the same id)- See Also:
- Constant Field Values
-
CREATED
public static final java.lang.String CREATED
Time of session creation- See Also:
- Constant Field Values
-
VALID
public static final java.lang.String VALID
Whether or not session is valid- See Also:
- Constant Field Values
-
ID
public static final java.lang.String ID
Session id- See Also:
- Constant Field Values
-
-
Method Detail
-
setDBCollection
public void setDBCollection(com.mongodb.DBCollection collection)
-
getDBCollection
@ManagedAttribute(value="DBCollection", readonly=true) public com.mongodb.DBCollection getDBCollection()
-
doLoad
public SessionData doLoad(java.lang.String id) throws java.lang.Exception
Description copied from class:AbstractSessionDataStore
Load the session from persistent store.- Specified by:
doLoad
in 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
-
delete
public boolean delete(java.lang.String id) throws java.lang.Exception
Description copied from interface:SessionDataMap
Delete session data- Parameters:
id
- identity of session to delete- Returns:
- true if the session was deleted
- Throws:
java.lang.Exception
- if unable to delete session data
-
exists
public boolean exists(java.lang.String id) throws java.lang.Exception
Description copied from interface:SessionDataStore
Test 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:
java.lang.Exception
- if problem checking existence with persistence layer
-
doGetExpired
public java.util.Set<java.lang.String> doGetExpired(java.util.Set<java.lang.String> candidates)
Description copied from class:AbstractSessionDataStore
Implemented by subclasses to resolve which sessions this node should attempt to expire.- Specified by:
doGetExpired
in classAbstractSessionDataStore
- Parameters:
candidates
- the ids of sessions the SessionDataStore thinks has expired- Returns:
- the reconciled set of session ids that this node should attempt to expire
-
initialize
public void initialize(SessionContext context) throws java.lang.Exception
Description copied from interface:SessionDataMap
Initialize this data map for the given context. A SessionDataMap can only be used by one context(/session manager).- Specified by:
initialize
in interfaceSessionDataMap
- Overrides:
initialize
in classAbstractSessionDataStore
- Parameters:
context
- context associated- Throws:
java.lang.Exception
- if unable to initialize the
-
doStore
public void doStore(java.lang.String id, SessionData data, long lastSaveTime) throws java.lang.Exception
Description copied from class:AbstractSessionDataStore
Store the session data persistently.- Specified by:
doStore
in 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
-
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:SessionDataStore
True if this type of datastore will passivate session objects- Returns:
- true if this store can passivate sessions, false otherwise
-
toString
public java.lang.String toString()
- Overrides:
toString
in classAbstractSessionDataStore
-
-