|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectome.services.sessions.state.SessionCache
public class SessionCache
Synchronized and lockable state for the SessionManager
. Maps from
Session
to SessionContext
in memory, with each mapping also
having an additional cache which may spill over to disk.
Nested Class Summary | |
---|---|
static interface |
SessionCache.StaleCacheListener
Observer pattern used to clear the blocked SessionCache#needsUpdate state, which prevents all further calls
from happening. |
Constructor Summary | |
---|---|
SessionCache()
|
Method Summary | |
---|---|
boolean |
addSessionCallback(String session,
SessionCallback cb)
|
protected boolean |
checkNeedsUpdateWithoutLock()
Whether or not doUpdate() should run. |
protected net.sf.ehcache.Ehcache |
createCache(String key,
boolean inMemory,
int maxInMemory)
|
void |
doUpdate()
Will only ever be accessed by a single thread. |
List<String> |
getIds()
Since all methods which use getIds() will subsequently check for
the existing session, we do not block here. |
long |
getLastUpdated()
|
SessionContext |
getSessionContext(String uuid,
boolean blocking)
Retrieve a session possibly raising either RemovedSessionException or SessionTimeoutException . |
net.sf.ehcache.Ehcache |
inMemoryCache(String uuid)
|
net.sf.ehcache.Ehcache |
onDiskCache(String uuid)
|
void |
putSession(String uuid,
SessionContext sessionContext)
Puts a session blindly into the context. |
void |
removeSession(String uuid)
|
boolean |
removeSessionCallback(String session,
SessionCallback cb)
|
void |
setAllowedBlockTime(long allowedBlockTime)
Inject time in milliseconds to allow blocking |
void |
setApplicationContext(org.springframework.context.ApplicationContext ctx)
Context injector. |
void |
setCacheManager(net.sf.ehcache.CacheManager manager)
Injection method, also performs the creation of sessions |
void |
setStaleCacheListener(SessionCache.StaleCacheListener staleCacheListener)
|
void |
setUpdateInterval(long milliseconds)
Inject time in milliseconds between updates. |
void |
updateEvent(UserGroupUpdateEvent ugue)
Marks a new update request in lastUpdateRequest . |
protected void |
waitForUpdate()
If lastUpdateRun is older than lastUpdateRequest , then
wait until the next background thread updates lastUpdateRequest. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public SessionCache()
Method Detail |
---|
public void setCacheManager(net.sf.ehcache.CacheManager manager)
sessions
public void setApplicationContext(org.springframework.context.ApplicationContext ctx) throws org.springframework.beans.BeansException
setApplicationContext
in interface org.springframework.context.ApplicationContextAware
org.springframework.beans.BeansException
public void setUpdateInterval(long milliseconds)
public void setAllowedBlockTime(long allowedBlockTime)
public void setStaleCacheListener(SessionCache.StaleCacheListener staleCacheListener)
public boolean addSessionCallback(String session, SessionCallback cb)
public boolean removeSessionCallback(String session, SessionCallback cb)
public void putSession(String uuid, SessionContext sessionContext)
public SessionContext getSessionContext(String uuid, boolean blocking)
RemovedSessionException
or SessionTimeoutException
.
public void removeSession(String uuid)
public List<String> getIds()
getIds()
will subsequently check for
the existing session, we do not block here. Blocking is primarily useful
for post-admintype changes which can add or remove a user from a group.
The existence of a session (which is what getIds specifies) is not
significantly effected.
public net.sf.ehcache.Ehcache inMemoryCache(String uuid)
public net.sf.ehcache.Ehcache onDiskCache(String uuid)
protected net.sf.ehcache.Ehcache createCache(String key, boolean inMemory, int maxInMemory)
public long getLastUpdated()
public void updateEvent(UserGroupUpdateEvent ugue)
lastUpdateRequest
. If the
timestamp on the event is invalid, then
System.currentTimeMillis()
will be used. This method updates
lastUpdateRequest
in the ReadWriteLock.readLock()
of
runUpdate
, since only blocking changed during the background
thread are of importance (i.e. we don't want to miss a change). However,
because getting/setting a long value is not always an atomic operation,
we use a AtomicLong
.
protected void waitForUpdate()
lastUpdateRun
is older than lastUpdateRequest
, then
wait until the next background thread updates lastUpdateRequest. Note:
this method does not use forceUpdateInterval
since that is
primarily to guarantee that old sessions are removed. If synchronization
takes too long, an DatabaseBusyException
is thrown.
protected boolean checkNeedsUpdateWithoutLock()
doUpdate()
should run. This does not perform any
synchronization so that methods can choose to use a read or write lock.
public void doUpdate()
lastUpdateRun
gets set to a negative value to specify that this
method is currently running.
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
Version: Beta-4.1.1-r5927-b91
Copyright © 2009 The University of Dundee. All Rights Reserved.