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

Reply via email to