org.apache.catalina.loader

Class WebappLoader

Implemented Interfaces:
Lifecycle, Loader, MBeanRegistration, PropertyChangeListener

public class WebappLoader
extends java.lang.Object
implements Lifecycle, Loader, PropertyChangeListener, MBeanRegistration

Classloader implementation which is specialized for handling web applications in the most efficient way, while being Catalina aware (all accesses to resources are made through the DirContext interface). This class loader supports detection of modified Java classes, which can be used to implement auto-reload support.

This class loader is configured by adding the pathnames of directories, JAR files, and ZIP files with the addRepository() method, prior to calling start(). When a new class is required, these repositories will be consulted first to locate the class. If it is not present, the system class loader will be used instead.

Version:
$Revision: 1.27 $ $Date: 2004/03/02 12:31:57 $

Authors:
Craig R. McClanahan
Remy Maucherat

Field Summary

protected DefaultContext
defaultContext
The DefaultContext with which this Loader is associated.
protected LifecycleSupport
lifecycle
The lifecycle event support for this component.
protected static StringManager
sm
The string manager for this package.
protected PropertyChangeSupport
support
The property change support for this component.

Fields inherited from interface org.apache.catalina.Lifecycle

AFTER_START_EVENT, AFTER_STOP_EVENT, BEFORE_START_EVENT, BEFORE_STOP_EVENT, START_EVENT, STOP_EVENT

Constructor Summary

WebappLoader()
Construct a new WebappLoader with no defined parent class loader (so that the actual parent will be the system class loader).
WebappLoader(ClassLoader parent)
Construct a new WebappLoader with the specified class loader to be defined as the parent of the ClassLoader we ultimately create.

Method Summary

void
addLifecycleListener(LifecycleListener listener)
Add a lifecycle event listener to this component.
void
addPropertyChangeListener(PropertyChangeListener listener)
Add a property change listener to this component.
void
addRepository(String repository)
Add a new repository to the set of repositories for this class loader.
void
closeJARs(boolean force)
Used to periodically signal to the classloader to release JAR resources.
void
destroy()
LifecycleListener[]
findLifecycleListeners()
Get the lifecycle listeners associated with this lifecycle.
String[]
findRepositories()
Return the set of repositories defined for this class loader.
ClassLoader
getClassLoader()
Return the Java class loader to be used by this Container.
String
getClasspath()
Classpath, as set in org.apache.catalina.jsp_classpath context property
Container
getContainer()
Return the Container with which this Logger has been associated.
ObjectName
getController()
int
getDebug()
Return the debugging detail level for this component.
DefaultContext
getDefaultContext()
Return the DefaultContext with which this Loader is associated.
boolean
getDelegate()
Return the "follow standard delegation model" flag used to configure our ClassLoader.
String
getInfo()
Return descriptive information about this Loader implementation and the corresponding version number, in the format <description>/<version>.
String
getLoaderClass()
Return the ClassLoader class name.
String[]
getLoaderRepositories()
String
getLoaderRepositoriesString()
boolean
getReloadable()
Return the reloadable flag for this Loader.
String[]
getRepositories()
String
getRepositoriesString()
Extra repositories for this loader
void
init()
boolean
modified()
Has the internal repository associated with this Loader been modified, such that the loaded classes should be reloaded?
void
postDeregister()
void
postRegister(Boolean registrationDone)
void
preDeregister()
ObjectName
preRegister(MBeanServer server, ObjectName name)
void
propertyChange(PropertyChangeEvent event)
Process property change events from our associated Context.
void
removeLifecycleListener(LifecycleListener listener)
Remove a lifecycle event listener from this component.
void
removePropertyChangeListener(PropertyChangeListener listener)
Remove a property change listener from this component.
void
setContainer(Container container)
Set the Container with which this Logger has been associated.
void
setController(ObjectName controller)
void
setDebug(int debug)
Set the debugging detail level for this component.
void
setDefaultContext(DefaultContext defaultContext)
Set the DefaultContext with which this Loader is associated.
void
setDelegate(boolean delegate)
Set the "follow standard delegation model" flag used to configure our ClassLoader.
void
setLoaderClass(String loaderClass)
Set the ClassLoader class name.
void
setReloadable(boolean reloadable)
Set the reloadable flag for this Loader.
void
start()
Start this component, initializing our associated class loader.
void
stop()
Stop this component, finalizing our associated class loader.
String
toString()
Return a String representation of this component.

Field Details

defaultContext

protected DefaultContext defaultContext
The DefaultContext with which this Loader is associated.


lifecycle

protected LifecycleSupport lifecycle
The lifecycle event support for this component.


sm

protected static final StringManager sm
The string manager for this package.


support

protected PropertyChangeSupport support
The property change support for this component.

Constructor Details

WebappLoader

public WebappLoader()
Construct a new WebappLoader with no defined parent class loader (so that the actual parent will be the system class loader).


WebappLoader

public WebappLoader(ClassLoader parent)
Construct a new WebappLoader with the specified class loader to be defined as the parent of the ClassLoader we ultimately create.

Parameters:
parent - The parent class loader

Method Details

addLifecycleListener

public void addLifecycleListener(LifecycleListener listener)
Add a lifecycle event listener to this component.
Specified by:
addLifecycleListener in interface Lifecycle

Parameters:
listener - The listener to add


addPropertyChangeListener

public void addPropertyChangeListener(PropertyChangeListener listener)
Add a property change listener to this component.
Specified by:
addPropertyChangeListener in interface Loader

Parameters:
listener - The listener to add


addRepository

public void addRepository(String repository)
Add a new repository to the set of repositories for this class loader.
Specified by:
addRepository in interface Loader

Parameters:
repository - Repository to be added


closeJARs

public void closeJARs(boolean force)
Used to periodically signal to the classloader to release JAR resources.


destroy

public void destroy()


findLifecycleListeners

public LifecycleListener[] findLifecycleListeners()
Get the lifecycle listeners associated with this lifecycle. If this Lifecycle has no listeners registered, a zero-length array is returned.
Specified by:
findLifecycleListeners in interface Lifecycle


findRepositories

public String[] findRepositories()
Return the set of repositories defined for this class loader. If none are defined, a zero-length array is returned. For security reason, returns a clone of the Array (since String are immutable).
Specified by:
findRepositories in interface Loader


getClassLoader

public ClassLoader getClassLoader()
Return the Java class loader to be used by this Container.
Specified by:
getClassLoader in interface Loader


getClasspath

public String getClasspath()
Classpath, as set in org.apache.catalina.jsp_classpath context property

Returns:
The classpath


getContainer

public Container getContainer()
Return the Container with which this Logger has been associated.
Specified by:
getContainer in interface Loader


getController

public ObjectName getController()


getDebug

public int getDebug()
Return the debugging detail level for this component.


getDefaultContext

public DefaultContext getDefaultContext()
Return the DefaultContext with which this Loader is associated. XXX What is that ???
Specified by:
getDefaultContext in interface Loader


getDelegate

public boolean getDelegate()
Return the "follow standard delegation model" flag used to configure our ClassLoader.
Specified by:
getDelegate in interface Loader


getInfo

public String getInfo()
Return descriptive information about this Loader implementation and the corresponding version number, in the format <description>/<version>.
Specified by:
getInfo in interface Loader


getLoaderClass

public String getLoaderClass()
Return the ClassLoader class name.


getLoaderRepositories

public String[] getLoaderRepositories()


getLoaderRepositoriesString

public String getLoaderRepositoriesString()


getReloadable

public boolean getReloadable()
Return the reloadable flag for this Loader.
Specified by:
getReloadable in interface Loader


getRepositories

public String[] getRepositories()


getRepositoriesString

public String getRepositoriesString()
Extra repositories for this loader


init

public void init()


modified

public boolean modified()
Has the internal repository associated with this Loader been modified, such that the loaded classes should be reloaded?
Specified by:
modified in interface Loader


postDeregister

public void postDeregister()


postRegister

public void postRegister(Boolean registrationDone)


preDeregister

public void preDeregister()
            throws Exception


preRegister

public ObjectName preRegister(MBeanServer server,
                              ObjectName name)
            throws Exception


propertyChange

public void propertyChange(PropertyChangeEvent event)
Process property change events from our associated Context.

Parameters:
event - The property change event that has occurred


removeLifecycleListener

public void removeLifecycleListener(LifecycleListener listener)
Remove a lifecycle event listener from this component.
Specified by:
removeLifecycleListener in interface Lifecycle

Parameters:
listener - The listener to remove


removePropertyChangeListener

public void removePropertyChangeListener(PropertyChangeListener listener)
Remove a property change listener from this component.
Specified by:
removePropertyChangeListener in interface Loader

Parameters:
listener - The listener to remove


setContainer

public void setContainer(Container container)
Set the Container with which this Logger has been associated.
Specified by:
setContainer in interface Loader

Parameters:
container - The associated Container


setController

public void setController(ObjectName controller)


setDebug

public void setDebug(int debug)
Set the debugging detail level for this component.

Parameters:
debug - The new debugging detail level


setDefaultContext

public void setDefaultContext(DefaultContext defaultContext)
Set the DefaultContext with which this Loader is associated.
Specified by:
setDefaultContext in interface Loader

Parameters:
defaultContext - The newly associated DefaultContext


setDelegate

public void setDelegate(boolean delegate)
Set the "follow standard delegation model" flag used to configure our ClassLoader.
Specified by:
setDelegate in interface Loader

Parameters:
delegate - The new flag


setLoaderClass

public void setLoaderClass(String loaderClass)
Set the ClassLoader class name.

Parameters:
loaderClass - The new ClassLoader class name


setReloadable

public void setReloadable(boolean reloadable)
Set the reloadable flag for this Loader.
Specified by:
setReloadable in interface Loader

Parameters:
reloadable - The new reloadable flag


start

public void start()
            throws LifecycleException
Start this component, initializing our associated class loader.
Specified by:
start in interface Lifecycle

Throws:
LifecycleException - if a lifecycle error occurs


stop

public void stop()
            throws LifecycleException
Stop this component, finalizing our associated class loader.
Specified by:
stop in interface Lifecycle

Throws:
LifecycleException - if a lifecycle error occurs


toString

public String toString()
Return a String representation of this component.


Copyright B) 2000-2003 Apache Software Foundation. All Rights Reserved.