Added logging to SessionRegistryImpl.

This commit is contained in:
Luke Taylor 2007-08-30 18:22:40 +00:00
parent 7fcdd4a6ff
commit aa4ee54f86

View File

@ -21,6 +21,8 @@ import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener; import org.springframework.context.ApplicationListener;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@ -48,6 +50,10 @@ import javax.servlet.http.HttpSession;
* @version $Id$ * @version $Id$
*/ */
public class SessionRegistryImpl implements SessionRegistry, ApplicationListener { public class SessionRegistryImpl implements SessionRegistry, ApplicationListener {
//~ Static fields/initializers =====================================================================================
protected static final Log logger = LogFactory.getLog(SessionRegistryImpl.class);
// ~ Instance fields =============================================================================================== // ~ Instance fields ===============================================================================================
private Map principals = Collections.synchronizedMap(new HashMap()); // <principal:Object,SessionIdSet> private Map principals = Collections.synchronizedMap(new HashMap()); // <principal:Object,SessionIdSet>
@ -105,10 +111,14 @@ public class SessionRegistryImpl implements SessionRegistry, ApplicationListener
} }
} }
public synchronized void registerNewSession(String sessionId, Object principal) { public void registerNewSession(String sessionId, Object principal) {
Assert.hasText(sessionId, "SessionId required as per interface contract"); Assert.hasText(sessionId, "SessionId required as per interface contract");
Assert.notNull(principal, "Principal required as per interface contract"); Assert.notNull(principal, "Principal required as per interface contract");
if (logger.isDebugEnabled()) {
logger.debug("Registering session " + sessionId +", for principal " + principal);
}
if (getSessionInformation(sessionId) != null) { if (getSessionInformation(sessionId) != null) {
removeSessionInformation(sessionId); removeSessionInformation(sessionId);
} }
@ -132,16 +142,26 @@ public class SessionRegistryImpl implements SessionRegistry, ApplicationListener
SessionInformation info = getSessionInformation(sessionId); SessionInformation info = getSessionInformation(sessionId);
if (info != null) { if (info != null) {
if (logger.isDebugEnabled()) {
logger.debug("Removing " + sessionId + " from set of registered sessions");
}
sessionIds.remove(sessionId); sessionIds.remove(sessionId);
Set sessionsUsedByPrincipal = (Set) principals.get(info.getPrincipal()); Set sessionsUsedByPrincipal = (Set) principals.get(info.getPrincipal());
if (sessionsUsedByPrincipal != null) { if (sessionsUsedByPrincipal != null) {
synchronized (sessionsUsedByPrincipal) { synchronized (sessionsUsedByPrincipal) {
if (logger.isDebugEnabled()) {
logger.debug("Removing " + sessionId + " from principal's set of registered sessions");
}
sessionsUsedByPrincipal.remove(sessionId); sessionsUsedByPrincipal.remove(sessionId);
if (sessionsUsedByPrincipal.size() == 0) { if (sessionsUsedByPrincipal.size() == 0) {
// No need to keep object in principals Map anymore // No need to keep object in principals Map anymore
if (logger.isDebugEnabled()) {
logger.debug("Removing principal " + info.getPrincipal() + " from registry");
}
principals.remove(info.getPrincipal()); principals.remove(info.getPrincipal());
} }
} }