From: Brian S. <bri...@jb...> - 2006-04-09 15:38:08
|
User: bstansberry Date: 06/04/09 11:38:04 Modified: src/main/org/jboss/web/tomcat/tc5/sso ClusteredSingleSignOn.java Log: Use ObjectName in activeManagers if Manager is a JBossManager Revision Changes Path 1.10 +28 -12 jboss-tomcat/src/main/org/jboss/web/tomcat/tc5/sso/ClusteredSingleSignOn.java (In the diff below, changes in quantity of whitespace are not shown.) Index: ClusteredSingleSignOn.java =================================================================== RCS file: /cvsroot/jboss/jboss-tomcat/src/main/org/jboss/web/tomcat/tc5/sso/ClusteredSingleSignOn.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -b -r1.9 -r1.10 --- ClusteredSingleSignOn.java 9 Feb 2006 07:38:55 -0000 1.9 +++ ClusteredSingleSignOn.java 9 Apr 2006 15:38:04 -0000 1.10 @@ -17,6 +17,7 @@ import org.jboss.web.tomcat.tc5.Tomcat5; +import org.jboss.web.tomcat.tc5.session.JBossManager; import java.io.IOException; import java.security.Principal; @@ -60,7 +61,7 @@ * </ul> * * @author Brian E. Stansberry based on the work of Craig R. McClanahan - * @version $Revision: 1.9 $ $Date: 2006/02/09 07:38:55 $ + * @version $Revision: 1.10 $ $Date: 2006/04/09 15:38:04 $ */ public class ClusteredSingleSignOn extends org.apache.catalina.authenticator.SingleSignOn @@ -373,6 +374,10 @@ { removed = activeManagers.remove(((ManagerBase)source).getObjectName()); } + else if (source instanceof JBossManager) + { + removed = activeManagers.remove(((JBossManager)source).getObjectName()); + } else { removed = activeManagers.remove(source); @@ -522,24 +527,35 @@ if (added) { Manager manager = session.getManager(); + + // Prefer to cache an ObjectName to avoid risk of leaking a manager, + // so if the manager exposes one, use it + Object mgrKey = null; if (manager instanceof ManagerBase) { - // Prefer to cache an ObjectName to avoid leaking a manager - Object mgrName = ((ManagerBase)manager).getObjectName(); - synchronized (activeManagers) - { - if (!activeManagers.contains(mgrName)) + + mgrKey = ((ManagerBase)manager).getObjectName(); + } + else if (manager instanceof JBossManager) { - activeManagers.add(mgrName); - ((Lifecycle) manager).addLifecycleListener(this); + mgrKey = ((JBossManager)manager).getObjectName(); } + else if (manager instanceof Lifecycle) + { + mgrKey = manager; } + else { + getContainer().getLogger().warn("Manager for session " + + session.getIdInternal() + + " does not implement Lifecycle; web app shutdown may " + + " lead to incorrect SSO invalidations"); } - else if (manager instanceof Lifecycle) + + if (mgrKey != null) { synchronized (activeManagers) { - if (!activeManagers.contains(manager)) + if (!activeManagers.contains(mgrKey)) { activeManagers.add(manager); ((Lifecycle) manager).addLifecycleListener(this); |