Author: markt Date: Tue Jan 19 22:59:34 2016 New Revision: 1725646 URL: http://svn.apache.org/viewvc?rev=1725646&view=rev Log: Clarify behaviour of Manager.context
Note: This does not impact Context.manager A Manager can only be used with a single Context and must then be destroyed when no longer required. Modified: tomcat/trunk/java/org/apache/catalina/Manager.java tomcat/trunk/java/org/apache/catalina/authenticator/SingleSignOnListener.java tomcat/trunk/java/org/apache/catalina/core/StandardContext.java tomcat/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java tomcat/trunk/java/org/apache/catalina/session/FileStore.java tomcat/trunk/java/org/apache/catalina/session/LocalStrings.properties tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java tomcat/trunk/java/org/apache/catalina/session/StandardManager.java tomcat/trunk/java/org/apache/catalina/session/StandardSession.java Modified: tomcat/trunk/java/org/apache/catalina/Manager.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Manager.java?rev=1725646&r1=1725645&r2=1725646&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/Manager.java (original) +++ tomcat/trunk/java/org/apache/catalina/Manager.java Tue Jan 19 22:59:34 2016 @@ -50,7 +50,11 @@ public interface Manager { /** - * Set the Container with which this Manager is associated. + * Set the Context with which this Manager is associated. The Context must + * be set to a non-null value before the Manager is first used. Multiple + * calls to this method before first use are permitted. Once the Manager has + * been used, this method may not be used to change the Context (including + * setting a {@code null} value) that the Manager is associated with. * * @param context The newly associated Context */ Modified: tomcat/trunk/java/org/apache/catalina/authenticator/SingleSignOnListener.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/authenticator/SingleSignOnListener.java?rev=1725646&r1=1725645&r2=1725646&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/authenticator/SingleSignOnListener.java (original) +++ tomcat/trunk/java/org/apache/catalina/authenticator/SingleSignOnListener.java Tue Jan 19 22:59:34 2016 @@ -48,9 +48,6 @@ public class SingleSignOnListener implem return; } Context context = manager.getContext(); - if (context == null) { - return; - } Authenticator authenticator = context.getAuthenticator(); if (!(authenticator instanceof AuthenticatorBase)) { return; Modified: tomcat/trunk/java/org/apache/catalina/core/StandardContext.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardContext.java?rev=1725646&r1=1725645&r2=1725646&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/core/StandardContext.java (original) +++ tomcat/trunk/java/org/apache/catalina/core/StandardContext.java Tue Jan 19 22:59:34 2016 @@ -1700,16 +1700,6 @@ public class StandardContext extends Con support.firePropertyChange("distributable", oldDistributable, this.distributable); - - // Bugzilla 32866 - Manager manager = getManager(); - if(manager != null) { - if(log.isDebugEnabled()) { - log.debug("Propagating distributable=" + distributable - + " to manager"); - } - manager.setDistributable(distributable); - } } @@ -1835,20 +1825,20 @@ public class StandardContext extends Con this.manager = manager; // Stop the old component if necessary - if (getState().isAvailable() && (oldManager != null) && - (oldManager instanceof Lifecycle)) { + if (oldManager instanceof Lifecycle) { try { ((Lifecycle) oldManager).stop(); + ((Lifecycle) oldManager).destroy(); } catch (LifecycleException e) { - log.error("StandardContext.setManager: stop: ", e); + log.error("StandardContext.setManager: stop-destroy: ", e); } } // Start the new component if necessary - if (manager != null) + if (manager != null) { manager.setContext(this); - if (getState().isAvailable() && (manager != null) && - (manager instanceof Lifecycle)) { + } + if (getState().isAvailable() && manager instanceof Lifecycle) { try { ((Lifecycle) manager).start(); } catch (LifecycleException e) { Modified: tomcat/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java?rev=1725646&r1=1725645&r2=1725646&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java (original) +++ tomcat/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java Tue Jan 19 22:59:34 2016 @@ -463,13 +463,11 @@ public class SimpleTcpCluster extends Li String clusterName = name ; if (clusterName == null) clusterName = manager.getContext().getName(); if (getContainer() instanceof Engine) { - Context context = manager.getContext() ; - if(context != null) { - Container host = context.getParent(); - if(host instanceof Host && clusterName!=null && - !(clusterName.startsWith(host.getName() +"#"))) { - clusterName = host.getName() +"#" + clusterName ; - } + Context context = manager.getContext(); + Container host = context.getParent(); + if (host instanceof Host && clusterName != null && + !(clusterName.startsWith(host.getName() +"#"))) { + clusterName = host.getName() +"#" + clusterName ; } } return clusterName; Modified: tomcat/trunk/java/org/apache/catalina/session/FileStore.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/FileStore.java?rev=1725646&r1=1725645&r2=1725646&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/session/FileStore.java (original) +++ tomcat/trunk/java/org/apache/catalina/session/FileStore.java Tue Jan 19 22:59:34 2016 @@ -334,23 +334,16 @@ public final class FileStore extends Sto File file = new File(this.directory); if (!file.isAbsolute()) { Context context = manager.getContext(); - if (context != null) { - ServletContext servletContext = context.getServletContext(); - File work = (File) - servletContext.getAttribute(ServletContext.TEMPDIR); - file = new File(work, this.directory); - } else { - throw new IllegalArgumentException("Parent Container is not a Context"); - } + ServletContext servletContext = context.getServletContext(); + File work = (File) servletContext.getAttribute(ServletContext.TEMPDIR); + file = new File(work, this.directory); } if (!file.exists() || !file.isDirectory()) { if (!file.delete() && file.exists()) { - throw new IOException( - sm.getString("fileStore.deleteFailed", file)); + throw new IOException(sm.getString("fileStore.deleteFailed", file)); } if (!file.mkdirs() && !file.isDirectory()) { - throw new IOException( - sm.getString("fileStore.createFailed", file)); + throw new IOException(sm.getString("fileStore.createFailed", file)); } } this.directoryFile = file; Modified: tomcat/trunk/java/org/apache/catalina/session/LocalStrings.properties URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/LocalStrings.properties?rev=1725646&r1=1725645&r2=1725646&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/session/LocalStrings.properties (original) +++ tomcat/trunk/java/org/apache/catalina/session/LocalStrings.properties Tue Jan 19 22:59:34 2016 @@ -31,10 +31,12 @@ JDBCStore.wrongDataSource=Cannot open JN JDBCStore.missingDataSourceName=No valid JNDI name was given. JDBCStore.commitSQLException=SQLException committing connection before closing managerBase.container.noop=Managers added to containers other than Contexts will never be used +managerBase.contextNull=The Context must be set to a non-null value before the Manager is used managerBase.createSession.ise=createSession: Too many active sessions managerBase.sessionAttributeNameFilter=Skipped session attribute named [{0}] because it did not match the name filter [{1}] managerBase.sessionAttributeValueClassNameFilter=Skipped session attribute named [{0}] because the value type [{1}] did not match the filter [{2}] managerBase.sessionTimeout=Invalid session timeout setting {0} +managerBase.setContextNotNew=It is illegal to call setContext() to change the Context associated with a Manager if the Manager is not in the NEW state standardManager.loading=Loading persisted sessions from {0} standardManager.loading.exception=Exception while loading persisted sessions standardManager.unloading=Saving persisted sessions to {0} Modified: tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java?rev=1725646&r1=1725645&r2=1725646&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java (original) +++ tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java Tue Jan 19 22:59:34 2016 @@ -40,6 +40,7 @@ import org.apache.catalina.Context; import org.apache.catalina.Engine; import org.apache.catalina.Lifecycle; import org.apache.catalina.LifecycleException; +import org.apache.catalina.LifecycleState; import org.apache.catalina.Manager; import org.apache.catalina.Session; import org.apache.catalina.SessionIdGenerator; @@ -349,20 +350,16 @@ public abstract class ManagerBase extend @Override public void setContext(Context context) { - // De-register from the old Context (if any) - if (this.context != null) { - this.context.removePropertyChangeListener(this); + if (this.context == context) { + // NO-OP + return; + } + if (!getState().equals(LifecycleState.NEW)) { + throw new IllegalStateException(sm.getString("managerBase.setContextNotNew")); } - Context oldContext = this.context; this.context = context; support.firePropertyChange("context", oldContext, this.context); - - // Register with the new Context (if any) - if (this.context != null) { - setMaxInactiveInterval(this.context.getSessionTimeout() * 60); - this.context.addPropertyChangeListener(this); - } } @@ -608,7 +605,16 @@ public abstract class ManagerBase extend super.initInternal(); + if (context == null) { + throw new LifecycleException(sm.getString("managerBase.contextNull")); + } + + // Copy current values from Context + setMaxInactiveInterval(this.context.getSessionTimeout() * 60); setDistributable(getContext().getDistributable()); + + // Track any further changes in those values + this.context.addPropertyChangeListener(this); } @Override @@ -659,6 +665,17 @@ public abstract class ManagerBase extend @Override + protected void destroyInternal() throws LifecycleException { + // De-register from the old Context (if any) + if (this.context != null) { + this.context.removePropertyChangeListener(this); + } + + super.destroyInternal(); + } + + + @Override public void add(Session session) { sessions.put(session.getIdInternal(), session); int size = getActiveSessions(); @@ -1326,6 +1343,8 @@ public abstract class ManagerBase extend log.error(sm.getString("managerBase.sessionTimeout", event.getNewValue())); } + } else if (event.getPropertyName().equals("distributable")) { + setDistributable(((Boolean) event.getNewValue()).booleanValue()); } } Modified: tomcat/trunk/java/org/apache/catalina/session/StandardManager.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/StandardManager.java?rev=1725646&r1=1725645&r2=1725646&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/session/StandardManager.java (original) +++ tomcat/trunk/java/org/apache/catalina/session/StandardManager.java Tue Jan 19 22:59:34 2016 @@ -194,9 +194,7 @@ public class StandardManager extends Man try (FileInputStream fis = new FileInputStream(file.getAbsolutePath()); BufferedInputStream bis = new BufferedInputStream(fis);) { Context c = getContext(); - if (c != null) { - loader = c.getLoader(); - } + loader = c.getLoader(); if (loader != null) { classLoader = loader.getClassLoader(); } @@ -415,17 +413,16 @@ public class StandardManager extends Man * @return the file */ protected File file() { - if ((pathname == null) || (pathname.length() == 0)) - return (null); + if (pathname == null || pathname.length() == 0) { + return null; + } File file = new File(pathname); if (!file.isAbsolute()) { Context context = getContext(); - if (context != null) { - ServletContext servletContext = context.getServletContext(); - File tempdir = (File) - servletContext.getAttribute(ServletContext.TEMPDIR); - if (tempdir != null) - file = new File(tempdir, pathname); + ServletContext servletContext = context.getServletContext(); + File tempdir = (File) servletContext.getAttribute(ServletContext.TEMPDIR); + if (tempdir != null) { + file = new File(tempdir, pathname); } } return file; Modified: tomcat/trunk/java/org/apache/catalina/session/StandardSession.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/StandardSession.java?rev=1725646&r1=1725645&r2=1725646&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/session/StandardSession.java (original) +++ tomcat/trunk/java/org/apache/catalina/session/StandardSession.java Tue Jan 19 22:59:34 2016 @@ -1145,15 +1145,11 @@ public class StandardSession implements */ @Override public ServletContext getServletContext() { - - if (manager == null) - return (null); + if (manager == null) { + return null; + } Context context = manager.getContext(); - if (context == null) - return (null); - else - return (context.getServletContext()); - + return context.getServletContext(); } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org