Author: markt
Date: Wed Jul 4 21:20:46 2012
New Revision: 1357412
URL: http://svn.apache.org/viewvc?rev=1357412&view=rev
Log:
Move Resources and Loader from Container to Context
Modified:
tomcat/trunk/java/org/apache/catalina/Container.java
tomcat/trunk/java/org/apache/catalina/Context.java
tomcat/trunk/java/org/apache/catalina/Loader.java
tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java
tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties
tomcat/trunk/java/org/apache/catalina/core/NamingContextListener.java
tomcat/trunk/java/org/apache/catalina/core/StandardContext.java
tomcat/trunk/java/org/apache/catalina/core/StandardWrapper.java
tomcat/trunk/java/org/apache/catalina/ha/session/ClusterManagerBase.java
tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java
tomcat/trunk/java/org/apache/catalina/mbeans/MBeanFactory.java
tomcat/trunk/java/org/apache/catalina/mbeans/MBeanUtils.java
tomcat/trunk/java/org/apache/catalina/session/FileStore.java
tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java
tomcat/trunk/java/org/apache/catalina/session/StandardManager.java
tomcat/trunk/java/org/apache/catalina/util/Introspection.java
tomcat/trunk/test/org/apache/catalina/loader/TestVirtualWebappLoader.java
tomcat/trunk/test/org/apache/catalina/startup/TestContextConfigAnnotation.java
Modified: tomcat/trunk/java/org/apache/catalina/Container.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Container.java?rev=1357412&r1=1357411&r2=1357412&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/Container.java (original)
+++ tomcat/trunk/java/org/apache/catalina/Container.java Wed Jul 4 21:20:46
2012
@@ -20,7 +20,6 @@ import java.beans.PropertyChangeListener
import java.io.File;
import javax.management.ObjectName;
-import javax.naming.directory.DirContext;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
@@ -115,22 +114,6 @@ public interface Container extends Lifec
// ------------------------------------------------------------- Properties
/**
- * Return the Loader with which this Container is associated. If there is
- * no associated Loader, return the Loader associated with our parent
- * Container (if any); otherwise, return <code>null</code>.
- */
- public Loader getLoader();
-
-
- /**
- * Set the Loader with which this Container is associated.
- *
- * @param loader The newly associated loader
- */
- public void setLoader(Loader loader);
-
-
- /**
* Return the Logger with which this Container is associated. If there is
* no associated Logger, return the Logger associated with our parent
* Container (if any); otherwise return <code>null</code>.
@@ -300,22 +283,6 @@ public interface Container extends Lifec
public void setRealm(Realm realm);
- /**
- * Return the Resources with which this Container is associated. If there
- * is no associated Resources object, return the Resources associated with
- * our parent Container (if any); otherwise return <code>null</code>.
- */
- public DirContext getResources();
-
-
- /**
- * Set the Resources object with which this Container is associated.
- *
- * @param resources The newly associated Resources
- */
- public void setResources(DirContext resources);
-
-
// --------------------------------------------------------- Public Methods
Modified: tomcat/trunk/java/org/apache/catalina/Context.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Context.java?rev=1357412&r1=1357411&r2=1357412&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/Context.java (original)
+++ tomcat/trunk/java/org/apache/catalina/Context.java Wed Jul 4 21:20:46 2012
@@ -20,6 +20,7 @@ import java.net.URL;
import java.util.Locale;
import java.util.Set;
+import javax.naming.directory.DirContext;
import javax.servlet.ServletContainerInitializer;
import javax.servlet.ServletContext;
import javax.servlet.ServletRegistration;
@@ -1387,5 +1388,29 @@ public interface Context extends Contain
* part of a redirect response.
*/
public boolean getSendRedirectBody();
+
+ /**
+ * Return the Loader with which this Context is associated.
+ */
+ public Loader getLoader();
+
+ /**
+ * Set the Loader with which this Context is associated.
+ *
+ * @param loader The newly associated loader
+ */
+ public void setLoader(Loader loader);
+
+ /**
+ * Return the Resources with which this Context is associated.
+ */
+ public DirContext getResources();
+
+ /**
+ * Set the Resources object with which this Context is associated.
+ *
+ * @param resources The newly associated Resources
+ */
+ public void setResources(DirContext resources);
}
Modified: tomcat/trunk/java/org/apache/catalina/Loader.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Loader.java?rev=1357412&r1=1357411&r2=1357412&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/Loader.java (original)
+++ tomcat/trunk/java/org/apache/catalina/Loader.java Wed Jul 4 21:20:46 2012
@@ -74,17 +74,17 @@ public interface Loader {
/**
- * Return the Container with which this Loader has been associated.
+ * Return the Context with which this Loader has been associated.
*/
- public Container getContainer();
+ public Context getContext();
/**
- * Set the Container with which this Loader has been associated.
+ * Set the Context with which this Loader has been associated.
*
- * @param container The associated Container
+ * @param context The associated Context
*/
- public void setContainer(Container container);
+ public void setContext(Context context);
/**
Modified: tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java?rev=1357412&r1=1357411&r2=1357412&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java Wed Jul 4
21:20:46 2012
@@ -24,7 +24,6 @@ import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.BlockingQueue;
@@ -41,7 +40,6 @@ import java.util.concurrent.locks.ReadWr
import java.util.concurrent.locks.ReentrantReadWriteLock;
import javax.management.ObjectName;
-import javax.naming.directory.DirContext;
import org.apache.catalina.AccessLog;
import org.apache.catalina.Cluster;
@@ -55,7 +53,6 @@ import org.apache.catalina.Host;
import org.apache.catalina.Lifecycle;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.LifecycleState;
-import org.apache.catalina.Loader;
import org.apache.catalina.Manager;
import org.apache.catalina.Pipeline;
import org.apache.catalina.Realm;
@@ -67,7 +64,6 @@ import org.apache.catalina.util.ContextN
import org.apache.catalina.util.LifecycleMBeanBase;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
-import org.apache.naming.resources.ProxyDirContext;
import org.apache.tomcat.util.ExceptionUtils;
import org.apache.tomcat.util.res.StringManager;
@@ -188,12 +184,6 @@ public abstract class ContainerBase exte
new CopyOnWriteArrayList<ContainerListener>();
/**
- * The Loader implementation with which this Container is associated.
- */
- protected Loader loader = null;
-
-
- /**
* The Logger implementation with which this Container is associated.
*/
protected Log logger = null;
@@ -252,11 +242,6 @@ public abstract class ContainerBase exte
*/
private final ReadWriteLock realmLock = new ReentrantReadWriteLock();
- /**
- * The resources DirContext object with which this Container is associated.
- */
- protected DirContext resources = null;
-
/**
* The string manager for this package.
@@ -375,65 +360,6 @@ public abstract class ContainerBase exte
/**
- * Return the Loader with which this Container is associated. If there is
- * no associated Loader, return the Loader associated with our parent
- * Container (if any); otherwise, return <code>null</code>.
- */
- @Override
- public Loader getLoader() {
-
- if (loader != null)
- return (loader);
- if (parent != null)
- return (parent.getLoader());
- return (null);
-
- }
-
-
- /**
- * Set the Loader with which this Container is associated.
- *
- * @param loader The newly associated loader
- */
- @Override
- public synchronized void setLoader(Loader loader) {
-
- // Change components if necessary
- Loader oldLoader = this.loader;
- if (oldLoader == loader)
- return;
- this.loader = loader;
-
- // Stop the old component if necessary
- if (getState().isAvailable() && (oldLoader != null) &&
- (oldLoader instanceof Lifecycle)) {
- try {
- ((Lifecycle) oldLoader).stop();
- } catch (LifecycleException e) {
- log.error("ContainerBase.setLoader: stop: ", e);
- }
- }
-
- // Start the new component if necessary
- if (loader != null)
- loader.setContainer(this);
- if (getState().isAvailable() && (loader != null) &&
- (loader instanceof Lifecycle)) {
- try {
- ((Lifecycle) loader).start();
- } catch (LifecycleException e) {
- log.error("ContainerBase.setLoader: start: ", e);
- }
- }
-
- // Report this property change to interested listeners
- support.firePropertyChange("loader", oldLoader, this.loader);
-
- }
-
-
- /**
* Return the Logger for this Container.
*/
@Override
@@ -785,50 +711,6 @@ public abstract class ContainerBase exte
}
- /**
- * Return the resources DirContext object with which this Container is
- * associated. If there is no associated resources object, return the
- * resources associated with our parent Container (if any); otherwise
- * return <code>null</code>.
- */
- @Override
- public DirContext getResources() {
- if (resources != null)
- return (resources);
- if (parent != null)
- return (parent.getResources());
- return (null);
-
- }
-
-
- /**
- * Set the resources DirContext object with which this Container is
- * associated.
- *
- * @param resources The newly associated DirContext
- */
- @Override
- public synchronized void setResources(DirContext resources) {
- // Called from StandardContext.setResources()
- // <- StandardContext.start()
- // <- ContainerBase.addChildInternal()
-
- // Change components if necessary
- DirContext oldResources = this.resources;
- if (oldResources == resources)
- return;
- Hashtable<String, String> env = new Hashtable<String, String>();
- if (getParent() != null)
- env.put(ProxyDirContext.HOST, getParent().getName());
- env.put(ProxyDirContext.CONTEXT, getName());
- this.resources = new ProxyDirContext(env, resources);
- // Report this property change to interested listeners
- support.firePropertyChange("resources", oldResources, this.resources);
-
- }
-
-
// ------------------------------------------------------ Container Methods
@@ -1054,8 +936,6 @@ public abstract class ContainerBase exte
protected synchronized void startInternal() throws LifecycleException {
// Start our subordinate components, if any
- if ((loader != null) && (loader instanceof Lifecycle))
- ((Lifecycle) loader).start();
logger = null;
getLogger();
if ((manager != null) && (manager instanceof Lifecycle))
@@ -1065,8 +945,6 @@ public abstract class ContainerBase exte
Realm realm = getRealmInternal();
if ((realm != null) && (realm instanceof Lifecycle))
((Lifecycle) realm).start();
- if ((resources != null) && (resources instanceof Lifecycle))
- ((Lifecycle) resources).start();
// Start our child containers, if any
Container children[] = findChildren();
@@ -1146,9 +1024,6 @@ public abstract class ContainerBase exte
}
// Stop our subordinate components, if any
- if ((resources != null) && (resources instanceof Lifecycle)) {
- ((Lifecycle) resources).stop();
- }
Realm realm = getRealmInternal();
if ((realm != null) && (realm instanceof Lifecycle)) {
((Lifecycle) realm).stop();
@@ -1160,9 +1035,6 @@ public abstract class ContainerBase exte
((Lifecycle) manager).getState().isAvailable() ) {
((Lifecycle) manager).stop();
}
- if ((loader != null) && (loader instanceof Lifecycle)) {
- ((Lifecycle) loader).stop();
- }
}
@Override
@@ -1178,9 +1050,6 @@ public abstract class ContainerBase exte
if ((cluster != null) && (cluster instanceof Lifecycle)) {
((Lifecycle) cluster).destroy();
}
- if ((loader != null) && (loader instanceof Lifecycle)) {
- ((Lifecycle) loader).destroy();
- }
// Stop the Valves in our pipeline (including the basic), if any
if (pipeline instanceof Lifecycle) {
@@ -1298,13 +1167,6 @@ public abstract class ContainerBase exte
log.warn(sm.getString("containerBase.backgroundProcess.cluster", cluster), e);
}
}
- if (loader != null) {
- try {
- loader.backgroundProcess();
- } catch (Exception e) {
-
log.warn(sm.getString("containerBase.backgroundProcess.loader", loader), e);
- }
- }
if (manager != null) {
try {
manager.backgroundProcess();
@@ -1522,34 +1384,37 @@ public abstract class ContainerBase exte
// Ignore
}
if (!threadDone) {
- ClassLoader cl =
- Thread.currentThread().getContextClassLoader();
- Loader loader = getLoader();
- if (loader != null) {
- cl = loader.getClassLoader();
- }
- processChildren(ContainerBase.this, cl);
+ processChildren(ContainerBase.this);
}
}
}
- protected void processChildren(Container container, ClassLoader cl) {
+ protected void processChildren(Container container) {
+ ClassLoader originalClassLoader = null;
+
try {
- if (container.getLoader() != null) {
+ if (container instanceof Context) {
+ // Ensure background processing for Contexts and Wrappers
+ // is performed under the web app's class loader
+ originalClassLoader =
+ Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader
- (container.getLoader().getClassLoader());
+ (((Context)
container).getLoader().getClassLoader());
}
container.backgroundProcess();
+ Container[] children = container.findChildren();
+ for (int i = 0; i < children.length; i++) {
+ if (children[i].getBackgroundProcessorDelay() <= 0) {
+ processChildren(children[i]);
+ }
+ }
} catch (Throwable t) {
ExceptionUtils.handleThrowable(t);
log.error("Exception invoking periodic operation: ", t);
} finally {
- Thread.currentThread().setContextClassLoader(cl);
- }
- Container[] children = container.findChildren();
- for (int i = 0; i < children.length; i++) {
- if (children[i].getBackgroundProcessorDelay() <= 0) {
- processChildren(children[i], cl);
+ if (originalClassLoader != null) {
+ Thread.currentThread().setContextClassLoader(
+ originalClassLoader);
}
}
}
Modified: tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties?rev=1357412&r1=1357411&r2=1357412&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties
(original)
+++ tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties Wed Jul
4 21:20:46 2012
@@ -64,7 +64,6 @@ asyncContextImpl.requestEnded=The reques
containerBase.threadedStartFailed=A child container failed during start
containerBase.threadedStopFailed=A child container failed during stop
containerBase.backgroundProcess.cluster=Exception processing cluster {0}
background process
-containerBase.backgroundProcess.loader=Exception processing loader {0}
background process
containerBase.backgroundProcess.manager=Exception processing manager {0}
background process
containerBase.backgroundProcess.realm=Exception processing realm {0}
background process
containerBase.backgroundProcess.valve=Exception processing valve {0}
background process
@@ -87,6 +86,7 @@ naming.namingContextCreationFailed=Creat
standardContext.invalidWrapperClass={0} is not a subclass of StandardWrapper
standardContext.applicationListener=Error configuring application listener of
class {0}
standardContext.applicationSkipped=Skipped installing application listeners
due to previous error(s)
+standardContext.backgroundProcess.loader=Exception processing loader {0}
background process
standardContext.cluster.noManager=No manager found. Checking if cluster
manager should be used. Cluster configured: [{0}], Application distributable:
[{1}]
standardContext.duplicateListener=The listener "{0}" is already configured for
this context. The duplicate definition has been ignored.
standardContext.errorPage.error=Error page location {0} must start with a ''/''
Modified: tomcat/trunk/java/org/apache/catalina/core/NamingContextListener.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/NamingContextListener.java?rev=1357412&r1=1357411&r2=1357412&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/NamingContextListener.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/core/NamingContextListener.java Wed
Jul 4 21:20:46 2012
@@ -36,7 +36,6 @@ import javax.naming.NamingException;
import javax.naming.Reference;
import javax.naming.StringRefAddr;
-import org.apache.catalina.Container;
import org.apache.catalina.ContainerEvent;
import org.apache.catalina.ContainerListener;
import org.apache.catalina.Context;
@@ -263,7 +262,7 @@ public class NamingContextListener
try {
ContextBindings.bindClassLoader
(container, container,
- ((Container) container).getLoader().getClassLoader());
+ ((Context) container).getLoader().getClassLoader());
} catch (NamingException e) {
logger.error(sm.getString("naming.bindFailed", e));
}
@@ -299,7 +298,7 @@ public class NamingContextListener
if (container instanceof Context) {
ContextBindings.unbindClassLoader
(container, container,
- ((Container) container).getLoader().getClassLoader());
+ ((Context) container).getLoader().getClassLoader());
}
if (container instanceof Server) {
@@ -704,7 +703,7 @@ public class NamingContextListener
if (container instanceof Context) {
try {
compCtx.bind("Resources",
- ((Container) container).getResources());
+ ((Context) container).getResources());
} catch (NamingException e) {
logger.error(sm.getString("naming.bindFailed", e));
}
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=1357412&r1=1357411&r2=1357412&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardContext.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardContext.java Wed Jul 4
21:20:46 2012
@@ -420,6 +420,12 @@ public class StandardContext extends Con
/**
+ * The Loader implementation with which this Container is associated.
+ */
+ private Loader loader = null;
+
+
+ /**
* The login configuration descriptor for this web application.
*/
private LoginConfig loginConfig = null;
@@ -670,6 +676,8 @@ public class StandardContext extends Con
private String aliases = null;
+ private DirContext resources = null;
+
/**
* Non proxied resources.
*/
@@ -1854,16 +1862,45 @@ public class StandardContext extends Con
}
- /**
- * Set the Loader with which this Context is associated.
- *
- * @param loader The newly associated loader
- */
+ @Override
+ public Loader getLoader() {
+ return loader;
+ }
+
+
@Override
public synchronized void setLoader(Loader loader) {
- super.setLoader(loader);
+ // Change components if necessary
+ Loader oldLoader = this.loader;
+ if (oldLoader == loader)
+ return;
+ this.loader = loader;
+
+ // Stop the old component if necessary
+ if (getState().isAvailable() && (oldLoader != null) &&
+ (oldLoader instanceof Lifecycle)) {
+ try {
+ ((Lifecycle) oldLoader).stop();
+ } catch (LifecycleException e) {
+ log.error("StandardContext.setLoader: stop: ", e);
+ }
+ }
+
+ // Start the new component if necessary
+ if (loader != null)
+ loader.setContext(this);
+ if (getState().isAvailable() && (loader != null) &&
+ (loader instanceof Lifecycle)) {
+ try {
+ ((Lifecycle) loader).start();
+ } catch (LifecycleException e) {
+ log.error("StandardContext.setLoader: start: ", e);
+ }
+ }
+ // Report this property change to interested listeners
+ support.firePropertyChange("loader", oldLoader, this.loader);
}
@@ -2396,12 +2433,12 @@ public class StandardContext extends Con
}
- /**
- * Set the resources DirContext object with which this Container is
- * associated.
- *
- * @param resources The newly associated DirContext
- */
+ @Override
+ public DirContext getResources() {
+ return resources;
+ }
+
+
@Override
public synchronized void setResources(DirContext resources) {
@@ -5479,9 +5516,28 @@ public class StandardContext extends Con
instanceListeners = new String[0];
}
+ if ((loader != null) && (loader instanceof Lifecycle)) {
+ ((Lifecycle) loader).destroy();
+ }
+
super.destroyInternal();
}
+
+ @Override
+ public void backgroundProcess() {
+ if (loader != null) {
+ try {
+ loader.backgroundProcess();
+ } catch (Exception e) {
+ log.warn(sm.getString(
+ "standardContext.backgroundProcess.loader", loader),
e);
+ }
+ }
+ super.backgroundProcess();
+ }
+
+
private void resetContext() throws Exception {
// Restore the original state ( pre reading web.xml in start )
// If you extend this - override this method and make sure to clean up
Modified: tomcat/trunk/java/org/apache/catalina/core/StandardWrapper.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardWrapper.java?rev=1357412&r1=1357411&r2=1357412&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardWrapper.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardWrapper.java Wed Jul 4
21:20:46 2012
@@ -1168,7 +1168,7 @@ public class StandardWrapper extends Con
if (getServlet() == null) {
Class<?> clazz = null;
try {
- clazz = getParent().getLoader().getClassLoader().loadClass(
+ clazz = ((Context)
getParent()).getLoader().getClassLoader().loadClass(
getServletClass());
processServletSecurityAnnotation(clazz);
} catch (ClassNotFoundException e) {
Modified:
tomcat/trunk/java/org/apache/catalina/ha/session/ClusterManagerBase.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/ClusterManagerBase.java?rev=1357412&r1=1357411&r2=1357412&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ha/session/ClusterManagerBase.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/ha/session/ClusterManagerBase.java
Wed Jul 4 21:20:46 2012
@@ -22,6 +22,7 @@ import java.io.IOException;
import java.util.regex.Pattern;
import org.apache.catalina.Container;
+import org.apache.catalina.Context;
import org.apache.catalina.Loader;
import org.apache.catalina.ha.CatalinaCluster;
import org.apache.catalina.ha.ClusterManager;
@@ -129,7 +130,9 @@ public abstract class ClusterManagerBase
public static ClassLoader[] getClassLoaders(Container container) {
Loader loader = null;
ClassLoader classLoader = null;
- if (container != null) loader = container.getLoader();
+ if (container instanceof Context) {
+ loader = ((Context) container).getLoader();
+ }
if (loader != null) classLoader = loader.getClassLoader();
else classLoader = Thread.currentThread().getContextClassLoader();
if ( classLoader == Thread.currentThread().getContextClassLoader() ) {
Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java?rev=1357412&r1=1357411&r2=1357412&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java Wed Jul 4
21:20:46 2012
@@ -44,7 +44,6 @@ import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.servlet.ServletContext;
-import org.apache.catalina.Container;
import org.apache.catalina.Context;
import org.apache.catalina.Globals;
import org.apache.catalina.Lifecycle;
@@ -123,9 +122,9 @@ public class WebappLoader extends Lifecy
/**
- * The Container with which this Loader has been associated.
+ * The Context with which this Loader has been associated.
*/
- private Container container = null;
+ private Context context = null;
/**
@@ -207,40 +206,30 @@ public class WebappLoader extends Lifecy
}
- /**
- * Return the Container with which this Logger has been associated.
- */
@Override
- public Container getContainer() {
-
- return (container);
-
+ public Context getContext() {
+ return context;
}
- /**
- * Set the Container with which this Logger has been associated.
- *
- * @param container The associated Container
- */
@Override
- public void setContainer(Container container) {
+ public void setContext(Context context) {
- // Deregister from the old Container (if any)
- if ((this.container != null) && (this.container instanceof Context))
- ((Context) this.container).removePropertyChangeListener(this);
+ // Deregister from the old Context (if any)
+ if (this.context != null) {
+ this.context.removePropertyChangeListener(this);
+ }
// Process this property change
- Container oldContainer = this.container;
- this.container = container;
- support.firePropertyChange("container", oldContainer, this.container);
+ Context oldContext = this.context;
+ this.context = context;
+ support.firePropertyChange("context", oldContext, this.context);
// Register with the new Container (if any)
- if ((this.container != null) && (this.container instanceof Context)) {
- setReloadable( ((Context) this.container).getReloadable() );
- ((Context) this.container).addPropertyChangeListener(this);
+ if (this.context != null) {
+ setReloadable(this.context.getReloadable());
+ this.context.addPropertyChangeListener(this);
}
-
}
@@ -398,13 +387,13 @@ public class WebappLoader extends Lifecy
try {
Thread.currentThread().setContextClassLoader
(WebappLoader.class.getClassLoader());
- if (container instanceof Context) {
- ((Context) container).reload();
+ if (context != null) {
+ context.reload();
}
} finally {
- if (container.getLoader() != null) {
+ if (context.getLoader() != null) {
Thread.currentThread().setContextClassLoader
- (container.getLoader().getClassLoader());
+ (context.getLoader().getClassLoader());
}
}
} else {
@@ -508,8 +497,8 @@ public class WebappLoader extends Lifecy
public String toString() {
StringBuilder sb = new StringBuilder("WebappLoader[");
- if (container != null)
- sb.append(container.getName());
+ if (context != null)
+ sb.append(context.getName());
sb.append("]");
return (sb.toString());
@@ -529,8 +518,8 @@ public class WebappLoader extends Lifecy
if (log.isDebugEnabled())
log.debug(sm.getString("webappLoader.starting"));
- if (container.getResources() == null) {
- log.info("No resources for " + container);
+ if (context.getResources() == null) {
+ log.info("No resources for " + context);
setState(LifecycleState.STARTING);
return;
}
@@ -557,7 +546,7 @@ public class WebappLoader extends Lifecy
try {
classLoader = createClassLoader();
- classLoader.setResources(container.getResources());
+ classLoader.setResources(context.getResources());
classLoader.setDelegate(this.delegate);
classLoader.setSearchExternalFirst(searchExternalFirst);
for (int i = 0; i < repositories.length; i++) {
@@ -574,15 +563,15 @@ public class WebappLoader extends Lifecy
// Binding the Webapp class loader to the directory context
DirContextURLStreamHandler.bind(classLoader,
- this.container.getResources());
+ this.context.getResources());
- String contextName = container.getName();
+ String contextName = context.getName();
if (!contextName.startsWith("/")) {
contextName = "/" + contextName;
}
- ObjectName cloname = new ObjectName(container.getDomain() +
+ ObjectName cloname = new ObjectName(context.getDomain() +
":type=WebappClassLoader,context=" + contextName +
- ",host=" + container.getParent().getName());
+ ",host=" + context.getParent().getName());
Registry.getRegistry(null, null)
.registerComponent(classLoader, cloname, null);
@@ -613,9 +602,8 @@ public class WebappLoader extends Lifecy
setState(LifecycleState.STOPPING);
// Remove context attributes as appropriate
- if (container instanceof Context) {
- ServletContext servletContext =
- ((Context) container).getServletContext();
+ if (context != null) {
+ ServletContext servletContext = context.getServletContext();
servletContext.removeAttribute(Globals.CLASS_PATH_ATTR);
}
@@ -624,13 +612,13 @@ public class WebappLoader extends Lifecy
DirContextURLStreamHandler.unbind(classLoader);
try {
- String contextName = container.getName();
+ String contextName = context.getName();
if (!contextName.startsWith("/")) {
contextName = "/" + contextName;
}
- ObjectName cloname = new ObjectName(container.getDomain() +
+ ObjectName cloname = new ObjectName(context.getDomain() +
":type=WebappClassLoader,context=" + contextName +
- ",host=" + container.getParent().getName());
+ ",host=" + context.getParent().getName());
Registry.getRegistry(null, null).unregisterComponent(cloname);
} catch (Exception e) {
log.error("LifecycleException ", e);
@@ -682,7 +670,7 @@ public class WebappLoader extends Lifecy
WebappClassLoader classLoader = null;
if (parentClassLoader == null) {
- parentClassLoader = container.getParentClassLoader();
+ parentClassLoader = context.getParentClassLoader();
}
Class<?>[] argTypes = { ClassLoader.class };
Object[] args = { parentClassLoader };
@@ -701,12 +689,11 @@ public class WebappLoader extends Lifecy
if (!Globals.IS_SECURITY_ENABLED)
return;
- if (!(container instanceof Context))
+ if (context == null)
return;
// Tell the class loader the root of the context
- ServletContext servletContext =
- ((Context) container).getServletContext();
+ ServletContext servletContext = context.getServletContext();
// Assigning permissions for the work directory
File workDir =
@@ -796,10 +783,9 @@ public class WebappLoader extends Lifecy
*/
private void setRepositories() throws IOException {
- if (!(container instanceof Context))
+ if (context == null)
return;
- ServletContext servletContext =
- ((Context) container).getServletContext();
+ ServletContext servletContext = context.getServletContext();
if (servletContext == null)
return;
@@ -816,7 +802,7 @@ public class WebappLoader extends Lifecy
classLoader.setWorkDir(workDir);
- DirContext resources = container.getResources();
+ DirContext resources = context.getResources();
// Setting up the class repository (/WEB-INF/classes), if it exists
@@ -979,10 +965,9 @@ public class WebappLoader extends Lifecy
private void setClassPath() {
// Validate our current state information
- if (!(container instanceof Context))
+ if (context == null)
return;
- ServletContext servletContext =
- ((Context) container).getServletContext();
+ ServletContext servletContext = context.getServletContext();
if (servletContext == null)
return;
@@ -1140,7 +1125,7 @@ public class WebappLoader extends Lifecy
@Override
protected String getDomainInternal() {
- return container.getDomain();
+ return context.getDomain();
}
@@ -1149,25 +1134,17 @@ public class WebappLoader extends Lifecy
StringBuilder name = new StringBuilder("type=Loader");
- if (container instanceof Context) {
- name.append(",context=");
- Context context = (Context) container;
+ name.append(",context=");
- String contextName = context.getName();
- if (!contextName.startsWith("/")) {
- name.append("/");
- }
- name.append(contextName);
-
- name.append(",host=");
- name.append(context.getParent().getName());
- } else {
- // Unlikely / impossible? Handle it to be safe
- name.append(",container=");
- name.append(container.getName());
+ String contextName = context.getName();
+ if (!contextName.startsWith("/")) {
+ name.append("/");
}
+ name.append(contextName);
+
+ name.append(",host=");
+ name.append(context.getParent().getName());
return name.toString();
}
-
}
Modified: tomcat/trunk/java/org/apache/catalina/mbeans/MBeanFactory.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/mbeans/MBeanFactory.java?rev=1357412&r1=1357411&r2=1357412&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/mbeans/MBeanFactory.java (original)
+++ tomcat/trunk/java/org/apache/catalina/mbeans/MBeanFactory.java Wed Jul 4
21:20:46 2012
@@ -715,8 +715,8 @@ public class MBeanFactory {
// Add the new instance to its parent component
ObjectName pname = new ObjectName(parent);
Container container = getParentContainerFromParent(pname);
- if (container != null) {
- container.setLoader(loader);
+ if (container instanceof Context) {
+ ((Context) container).setLoader(loader);
}
// FIXME add Loader.getObjectName
//ObjectName oname = loader.getObjectName();
@@ -852,8 +852,9 @@ public class MBeanFactory {
ObjectName oname = new ObjectName(name);
// Acquire a reference to the component to be removed
Container container = getParentContainerFromChild(oname);
- container.setLoader(null);
-
+ if (container instanceof Context) {
+ ((Context) container).setLoader(null);
+ }
}
Modified: tomcat/trunk/java/org/apache/catalina/mbeans/MBeanUtils.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/mbeans/MBeanUtils.java?rev=1357412&r1=1357411&r2=1357412&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/mbeans/MBeanUtils.java (original)
+++ tomcat/trunk/java/org/apache/catalina/mbeans/MBeanUtils.java Wed Jul 4
21:20:46 2012
@@ -26,9 +26,7 @@ import javax.management.ObjectName;
import org.apache.catalina.Container;
import org.apache.catalina.Context;
-import org.apache.catalina.Engine;
import org.apache.catalina.Group;
-import org.apache.catalina.Host;
import org.apache.catalina.Loader;
import org.apache.catalina.Role;
import org.apache.catalina.Server;
@@ -463,28 +461,18 @@ public class MBeanUtils {
*
* @exception MalformedObjectNameException if a name cannot be created
*/
- static ObjectName createObjectName(String domain,
- Loader loader)
+ static ObjectName createObjectName(String domain, Loader loader)
throws MalformedObjectNameException {
ObjectName name = null;
- Container container = loader.getContainer();
-
- if (container instanceof Engine) {
- name = new ObjectName(domain + ":type=Loader");
- } else if (container instanceof Host) {
- name = new ObjectName(domain + ":type=Loader,host=" +
- container.getName());
- } else if (container instanceof Context) {
- Context context = ((Context)container);
- ContextName cn = new ContextName(context.getName());
- Container host = context.getParent();
- name = new ObjectName(domain + ":type=Loader,context=" +
- cn.getDisplayName() + ",host=" + host.getName());
- }
+ Context context = loader.getContext();
- return (name);
+ ContextName cn = new ContextName(context.getName());
+ Container host = context.getParent();
+ name = new ObjectName(domain + ":type=Loader,context=" +
+ cn.getDisplayName() + ",host=" + host.getName());
+ return name;
}
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=1357412&r1=1357411&r2=1357412&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/session/FileStore.java (original)
+++ tomcat/trunk/java/org/apache/catalina/session/FileStore.java Wed Jul 4
21:20:46 2012
@@ -255,8 +255,8 @@ public final class FileStore extends Sto
fis = new FileInputStream(file.getAbsolutePath());
bis = new BufferedInputStream(fis);
Container container = manager.getContainer();
- if (container != null)
- loader = container.getLoader();
+ if (container instanceof Context)
+ loader = ((Context) container).getLoader();
if (loader != null)
classLoader = loader.getClassLoader();
if (classLoader != null)
Modified: tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java?rev=1357412&r1=1357411&r2=1357412&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java (original)
+++ tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java Wed Jul 4
21:20:46 2012
@@ -622,8 +622,8 @@ public class JDBCStore extends StoreBase
if (rst.next()) {
bis = new BufferedInputStream(rst.getBinaryStream(2));
- if (container != null) {
- loader = container.getLoader();
+ if (container instanceof org.apache.catalina.Context) {
+ loader = ((org.apache.catalina.Context)
container).getLoader();
}
if (loader != null) {
classLoader = loader.getClassLoader();
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=1357412&r1=1357411&r2=1357412&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/session/StandardManager.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/session/StandardManager.java Wed Jul
4 21:20:46 2012
@@ -215,8 +215,8 @@ public class StandardManager extends Man
try {
fis = new FileInputStream(file.getAbsolutePath());
bis = new BufferedInputStream(fis);
- if (container != null)
- loader = container.getLoader();
+ if (container instanceof Context)
+ loader = ((Context) container).getLoader();
if (loader != null)
classLoader = loader.getClassLoader();
if (classLoader != null) {
Modified: tomcat/trunk/java/org/apache/catalina/util/Introspection.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/util/Introspection.java?rev=1357412&r1=1357411&r2=1357412&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/util/Introspection.java (original)
+++ tomcat/trunk/java/org/apache/catalina/util/Introspection.java Wed Jul 4
21:20:46 2012
@@ -22,7 +22,7 @@ import java.lang.reflect.Method;
import java.security.AccessController;
import java.security.PrivilegedAction;
-import org.apache.catalina.Container;
+import org.apache.catalina.Context;
import org.apache.catalina.Globals;
import org.apache.juli.logging.Log;
import org.apache.tomcat.util.ExceptionUtils;
@@ -116,9 +116,9 @@ public class Introspection {
* class cannot be loaded, a debug level log message will be written to the
* Container's log and null will be returned.
*/
- public static Class<?> loadClass(Container container, String className) {
- ClassLoader cl = container.getLoader().getClassLoader();
- Log log = container.getLogger();
+ public static Class<?> loadClass(Context context, String className) {
+ ClassLoader cl = context.getLoader().getClassLoader();
+ Log log = context.getLogger();
Class<?> clazz = null;
try {
clazz = cl.loadClass(className);
Modified:
tomcat/trunk/test/org/apache/catalina/loader/TestVirtualWebappLoader.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/loader/TestVirtualWebappLoader.java?rev=1357412&r1=1357411&r2=1357412&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/loader/TestVirtualWebappLoader.java
(original)
+++ tomcat/trunk/test/org/apache/catalina/loader/TestVirtualWebappLoader.java
Wed Jul 4 21:20:46 2012
@@ -48,7 +48,7 @@ public class TestVirtualWebappLoader ext
VirtualWebappLoader loader = new VirtualWebappLoader();
- loader.setContainer(ctx);
+ loader.setContext(ctx);
ctx.setLoader(loader);
ctx.setResources(new FileDirContext());
ctx.resourcesStart();
Modified:
tomcat/trunk/test/org/apache/catalina/startup/TestContextConfigAnnotation.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/startup/TestContextConfigAnnotation.java?rev=1357412&r1=1357411&r2=1357412&view=diff
==============================================================================
---
tomcat/trunk/test/org/apache/catalina/startup/TestContextConfigAnnotation.java
(original)
+++
tomcat/trunk/test/org/apache/catalina/startup/TestContextConfigAnnotation.java
Wed Jul 4 21:20:46 2012
@@ -36,7 +36,7 @@ import static org.junit.Assert.fail;
import org.junit.Test;
-import org.apache.catalina.Container;
+import org.apache.catalina.Context;
import org.apache.catalina.Loader;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.deploy.FilterDef;
@@ -328,9 +328,9 @@ public class TestContextConfigAnnotation
return this.getClass().getClassLoader();
}
@Override
- public Container getContainer() { return null; }
+ public Context getContext() { return null; }
@Override
- public void setContainer(Container container) {}
+ public void setContext(Context context) {}
@Override
public boolean getDelegate() { return false; }
@Override
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]