ome.services.sessions.state
Class SessionCache

java.lang.Object
  extended by ome.services.sessions.state.SessionCache
All Implemented Interfaces:
org.springframework.context.ApplicationContextAware

public class SessionCache
extends Object
implements org.springframework.context.ApplicationContextAware

Synchronized and lockable state for the SessionManager. Maps from Session uuid to SessionContext in memory, with each mapping also having an additional cache which may spill over to disk, listeners. Uses ConcurrentHashMap and various implementations from java.util.concurrent.atomic to provide a lock-free implementation.

Since:
4.2.1
Author:
Josh Moore, josh at glencoesoftware.com
See Also:
ticket:3173

Nested Class Summary
static interface SessionCache.StaleCacheListener
          Observer pattern used to refresh sessions in doUpdate.
 
Constructor Summary
SessionCache()
           
 
Method Summary
 boolean addSessionCallback(String session, SessionCallback cb)
           
protected  net.sf.ehcache.Ehcache createCache(String key, boolean inMemory, int maxInMemory)
           
 void doUpdate()
          Will only ever be accessed by a single thread.
 Set<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)
          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 refresh(String uuid, SessionContext replacement)
          Used externally to refresh the SessionContext instance associated with the session uuid
 void reload(String id)
          Provides the reloading logic of the SessionCache for the SessionManagerImpl to use.
 void removeSession(String uuid)
           
 boolean removeSessionCallback(String session, SessionCallback cb)
           
 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 State#lastUpdateRequest.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SessionCache

public SessionCache()
Method Detail

setCacheManager

public void setCacheManager(net.sf.ehcache.CacheManager manager)
Injection method, also performs the creation of sessions


setApplicationContext

public void setApplicationContext(org.springframework.context.ApplicationContext ctx)
                           throws org.springframework.beans.BeansException
Context injector.

Specified by:
setApplicationContext in interface org.springframework.context.ApplicationContextAware
Throws:
org.springframework.beans.BeansException

setUpdateInterval

public void setUpdateInterval(long milliseconds)
Inject time in milliseconds between updates.


setStaleCacheListener

public void setStaleCacheListener(SessionCache.StaleCacheListener staleCacheListener)

addSessionCallback

public boolean addSessionCallback(String session,
                                  SessionCallback cb)

removeSessionCallback

public boolean removeSessionCallback(String session,
                                     SessionCallback cb)

putSession

public void putSession(String uuid,
                       SessionContext sessionContext)
Puts a session blindly into the context. This does nothing to a context which was previously present (e.g. call internalRemove, etc.) and therefore usage should be proceeded by a check.


refresh

public void refresh(String uuid,
                    SessionContext replacement)
Used externally to refresh the SessionContext instance associated with the session uuid

Parameters:
id -
replacement -

getSessionContext

public SessionContext getSessionContext(String uuid)
Retrieve a session possibly raising either RemovedSessionException or SessionTimeoutException.


removeSession

public void removeSession(String uuid)

getIds

public Set<String> getIds()
Since all methods which use 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.


inMemoryCache

public net.sf.ehcache.Ehcache inMemoryCache(String uuid)

onDiskCache

public net.sf.ehcache.Ehcache onDiskCache(String uuid)

createCache

protected net.sf.ehcache.Ehcache createCache(String key,
                                             boolean inMemory,
                                             int maxInMemory)

getLastUpdated

public long getLastUpdated()

updateEvent

public void updateEvent(UserGroupUpdateEvent ugue)
Marks a new update request in State#lastUpdateRequest. If the timestamp on the event is invalid, then System.currentTimeMillis() will be used.


doUpdate

public void doUpdate()
Will only ever be accessed by a single thread. Rechecks the target update time again in case a second write thread was blocking the current one. #lastUpdateRun gets set to a negative value to specify that this method is currently running.


reload

public void reload(String id)
Provides the reloading logic of the SessionCache for the SessionManagerImpl to use.

See Also:
ticket:4011, ticket:5849


OmeroJava Api

Version: 4.3.4-dbcbce5a-b4

Copyright © 2009 The University of Dundee. All Rights Reserved.