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: [email protected]
For additional commands, e-mail: [email protected]