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