Package org.apache.catalina.loader
Class WebappLoader
- java.lang.Object
-
- org.apache.catalina.util.LifecycleBase
-
- org.apache.catalina.util.LifecycleMBeanBase
-
- org.apache.catalina.loader.WebappLoader
-
- All Implemented Interfaces:
javax.management.MBeanRegistration
,JmxEnabled
,Lifecycle
,Loader
public class WebappLoader extends LifecycleMBeanBase implements Loader
Classloader implementation which is specialized for handling web applications in the most efficient way, while being Catalina aware (all accesses to resources are made throughWebResourceRoot
). This class loader supports detection of modified Java classes, which can be used to implement auto-reload support.This class loader is configured via the Resources children of its Context prior to calling
start()
. When a new class is required, these Resources will be consulted first to locate the class. If it is not present, the system class loader will be used instead.- Author:
- Craig R. McClanahan, Remy Maucherat
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.apache.catalina.Lifecycle
Lifecycle.SingleUse
-
-
Field Summary
Fields Modifier and Type Field Description protected static StringManager
sm
The string manager for this package.protected java.beans.PropertyChangeSupport
support
The property change support for this component.-
Fields inherited from interface org.apache.catalina.Lifecycle
AFTER_DESTROY_EVENT, AFTER_INIT_EVENT, AFTER_START_EVENT, AFTER_STOP_EVENT, BEFORE_DESTROY_EVENT, BEFORE_INIT_EVENT, BEFORE_START_EVENT, BEFORE_STOP_EVENT, CONFIGURE_START_EVENT, CONFIGURE_STOP_EVENT, PERIODIC_EVENT, START_EVENT, STOP_EVENT
-
-
Constructor Summary
Constructors Constructor Description WebappLoader()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addPropertyChangeListener(java.beans.PropertyChangeListener listener)
Add a property change listener to this component.void
backgroundProcess()
Execute a periodic task, such as reloading, etc.java.lang.ClassLoader
getClassLoader()
Return the Java class loader to be used by this Container.java.lang.String
getClasspath()
Classpath, as set in org.apache.catalina.jsp_classpath context propertyContext
getContext()
boolean
getDelegate()
Return the "follow standard delegation model" flag used to configure our ClassLoader.protected java.lang.String
getDomainInternal()
Method implemented by sub-classes to identify the domain in which MBeans should be registered.java.lang.String
getJakartaConverter()
java.lang.String
getLoaderClass()
java.lang.String[]
getLoaderRepositories()
java.lang.String
getLoaderRepositoriesString()
protected java.lang.String
getObjectNameKeyProperties()
Allow sub-classes to specify the key properties component of theObjectName
that will be used to register this component.boolean
modified()
Has the internal repository associated with this Loader been modified, such that the loaded classes should be reloaded?void
removePropertyChangeListener(java.beans.PropertyChangeListener listener)
Remove a property change listener from this component.void
setContext(Context context)
Set the Context with which this Loader has been associated.void
setDelegate(boolean delegate)
Set the "follow standard delegation model" flag used to configure our ClassLoader.void
setJakartaConverter(java.lang.String jakartaConverter)
Set the Jakarta converter.void
setLoaderClass(java.lang.String loaderClass)
Set the ClassLoader class name.void
setLoaderInstance(WebappClassLoaderBase loaderInstance)
Set the ClassLoader instance, without relying on reflection This method will also invokesetLoaderClass(String)
withloaderInstance.getClass().getName()
as an argumentprotected void
startInternal()
Start associatedClassLoader
and implement the requirements ofLifecycleBase.startInternal()
.protected void
stopInternal()
Stop associatedClassLoader
and implement the requirements ofLifecycleBase.stopInternal()
.java.lang.String
toString()
Return a String representation of this component.-
Methods inherited from class org.apache.catalina.util.LifecycleMBeanBase
destroyInternal, getDomain, getObjectName, initInternal, postDeregister, postRegister, preDeregister, preRegister, register, setDomain, unregister, unregister
-
Methods inherited from class org.apache.catalina.util.LifecycleBase
addLifecycleListener, destroy, findLifecycleListeners, fireLifecycleEvent, getState, getStateName, getThrowOnFailure, init, removeLifecycleListener, setState, setState, setThrowOnFailure, start, stop
-
-
-
-
Field Detail
-
sm
protected static final StringManager sm
The string manager for this package.
-
support
protected final java.beans.PropertyChangeSupport support
The property change support for this component.
-
-
Method Detail
-
getClassLoader
public java.lang.ClassLoader getClassLoader()
Return the Java class loader to be used by this Container.- Specified by:
getClassLoader
in interfaceLoader
- Returns:
- the Java class loader to be used by this Container.
-
getContext
public Context getContext()
- Specified by:
getContext
in interfaceLoader
- Returns:
- the Context with which this Loader has been associated.
-
setContext
public void setContext(Context context)
Description copied from interface:Loader
Set the Context with which this Loader has been associated.- Specified by:
setContext
in interfaceLoader
- Parameters:
context
- The associated Context
-
getDelegate
public boolean getDelegate()
Return the "follow standard delegation model" flag used to configure our ClassLoader.- Specified by:
getDelegate
in interfaceLoader
- Returns:
- the "follow standard delegation model" flag used to configure our ClassLoader.
-
setDelegate
public void setDelegate(boolean delegate)
Set the "follow standard delegation model" flag used to configure our ClassLoader.- Specified by:
setDelegate
in interfaceLoader
- Parameters:
delegate
- The new flag
-
getJakartaConverter
public java.lang.String getJakartaConverter()
- Returns:
- a non null String if the loader will attempt to use the Jakarta converter. The String is the name of the profile used for conversion.
-
setJakartaConverter
public void setJakartaConverter(java.lang.String jakartaConverter)
Set the Jakarta converter.- Parameters:
jakartaConverter
- The profile name which will be used by the converter Any invalid profile value will default to the TOMCAT profile, which converts all packages used by Tomcat.
-
getLoaderClass
public java.lang.String getLoaderClass()
- Returns:
- the ClassLoader class name.
-
setLoaderClass
public void setLoaderClass(java.lang.String loaderClass)
Set the ClassLoader class name.- Parameters:
loaderClass
- The new ClassLoader class name
-
setLoaderInstance
public void setLoaderInstance(WebappClassLoaderBase loaderInstance)
Set the ClassLoader instance, without relying on reflection This method will also invokesetLoaderClass(String)
withloaderInstance.getClass().getName()
as an argument- Parameters:
loaderInstance
- The new ClassLoader instance to use
-
addPropertyChangeListener
public void addPropertyChangeListener(java.beans.PropertyChangeListener listener)
Add a property change listener to this component.- Specified by:
addPropertyChangeListener
in interfaceLoader
- Parameters:
listener
- The listener to add
-
backgroundProcess
public void backgroundProcess()
Execute a periodic task, such as reloading, etc. This method will be invoked inside the classloading context of this container. Unexpected throwables will be caught and logged.- Specified by:
backgroundProcess
in interfaceLoader
-
getLoaderRepositories
public java.lang.String[] getLoaderRepositories()
-
getLoaderRepositoriesString
public java.lang.String getLoaderRepositoriesString()
-
getClasspath
public java.lang.String getClasspath()
Classpath, as set in org.apache.catalina.jsp_classpath context property- Returns:
- The classpath
-
modified
public boolean modified()
Has the internal repository associated with this Loader been modified, such that the loaded classes should be reloaded?
-
removePropertyChangeListener
public void removePropertyChangeListener(java.beans.PropertyChangeListener listener)
Remove a property change listener from this component.- Specified by:
removePropertyChangeListener
in interfaceLoader
- Parameters:
listener
- The listener to remove
-
toString
public java.lang.String toString()
Return a String representation of this component.- Overrides:
toString
in classjava.lang.Object
-
startInternal
protected void startInternal() throws LifecycleException
Start associatedClassLoader
and implement the requirements ofLifecycleBase.startInternal()
.- Specified by:
startInternal
in classLifecycleBase
- Throws:
LifecycleException
- if this component detects a fatal error that prevents this component from being used
-
stopInternal
protected void stopInternal() throws LifecycleException
Stop associatedClassLoader
and implement the requirements ofLifecycleBase.stopInternal()
.- Specified by:
stopInternal
in classLifecycleBase
- Throws:
LifecycleException
- if this component detects a fatal error that prevents this component from being used
-
getDomainInternal
protected java.lang.String getDomainInternal()
Description copied from class:LifecycleMBeanBase
Method implemented by sub-classes to identify the domain in which MBeans should be registered.- Specified by:
getDomainInternal
in classLifecycleMBeanBase
- Returns:
- The name of the domain to use to register MBeans.
-
getObjectNameKeyProperties
protected java.lang.String getObjectNameKeyProperties()
Description copied from class:LifecycleMBeanBase
Allow sub-classes to specify the key properties component of theObjectName
that will be used to register this component.- Specified by:
getObjectNameKeyProperties
in classLifecycleMBeanBase
- Returns:
- The string representation of the key properties component of the
desired
ObjectName
-
-