org.apache.catalina.loader
Class WebappLoader

java.lang.Object
  |
  +--org.apache.catalina.loader.WebappLoader
All Implemented Interfaces:
java.util.EventListener, Lifecycle, Loader, java.beans.PropertyChangeListener, java.lang.Runnable

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

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.12.2.7 $ $Date: 2002/03/25 14:51:09 $
Author:
Craig R. McClanahan, Remy Maucherat

Field Summary
protected  LifecycleSupport lifecycle
          The lifecycle event support for this component.
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
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(java.lang.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(java.beans.PropertyChangeListener listener)
          Add a property change listener to this component.
 void addRepository(java.lang.String repository)
          Add a new repository to the set of repositories for this class loader.
 java.lang.String[] findRepositories()
          Return the set of repositories defined for this class loader.
 int getCheckInterval()
          Return the check interval for this Loader.
 java.lang.ClassLoader getClassLoader()
          Return the Java class loader to be used by this Container.
 Container getContainer()
          Return the Container with which this Logger has been associated.
 int getDebug()
          Return the debugging detail level for this component.
 boolean getDelegate()
          Return the "follow standard delegation model" flag used to configure our ClassLoader.
 java.lang.String getInfo()
          Return descriptive information about this Loader implementation and the corresponding version number, in the format <description>/<version>.
 java.lang.String getLoaderClass()
          Return the ClassLoader class name.
 boolean getReloadable()
          Return the reloadable flag for this Loader.
 boolean modified()
          Has the internal repository associated with this Loader been modified, such that the loaded classes should be reloaded?
 void propertyChange(java.beans.PropertyChangeEvent event)
          Process property change events from our associated Context.
 void removeLifecycleListener(LifecycleListener listener)
          Remove a lifecycle event listener from this component.
 void removePropertyChangeListener(java.beans.PropertyChangeListener listener)
          Remove a property change listener from this component.
 void run()
          The background thread that checks for session timeouts and shutdown.
 void setCheckInterval(int checkInterval)
          Set the check interval for this Loader.
 void setContainer(Container container)
          Set the Container with which this Logger has been associated.
 void setDebug(int debug)
          Set the debugging detail level for this component.
 void setDelegate(boolean delegate)
          Set the "follow standard delegation model" flag used to configure our ClassLoader.
 void setLoaderClass(java.lang.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.
 java.lang.String toString()
          Return a String representation of this component.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

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 java.beans.PropertyChangeSupport support
The property change support for this component.

Constructor Detail

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(java.lang.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 Detail

getCheckInterval

public int getCheckInterval()
Return the check interval for this Loader.


setCheckInterval

public void setCheckInterval(int checkInterval)
Set the check interval for this Loader.

Parameters:
checkInterval - The new check interval

getClassLoader

public java.lang.ClassLoader getClassLoader()
Return the Java class loader to be used by this Container.

Specified by:
getClassLoader in interface Loader

getContainer

public Container getContainer()
Return the Container with which this Logger has been associated.

Specified by:
getContainer in interface Loader

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

getDebug

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


setDebug

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

Parameters:
debug - The new debugging detail level

getDelegate

public boolean getDelegate()
Return the "follow standard delegation model" flag used to configure our ClassLoader.

Specified by:
getDelegate in interface Loader

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

getInfo

public java.lang.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 java.lang.String getLoaderClass()
Return the ClassLoader class name.


setLoaderClass

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

Parameters:
loaderClass - The new ClassLoader class name

getReloadable

public boolean getReloadable()
Return the reloadable flag for this Loader.

Specified by:
getReloadable in interface Loader

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

addPropertyChangeListener

public void addPropertyChangeListener(java.beans.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(java.lang.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

findRepositories

public java.lang.String[] findRepositories()
Return the set of repositories defined for this class loader. If none are defined, a zero-length array is returned.

Specified by:
findRepositories in interface Loader

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

removePropertyChangeListener

public void removePropertyChangeListener(java.beans.PropertyChangeListener listener)
Remove a property change listener from this component.

Specified by:
removePropertyChangeListener in interface Loader
Parameters:
listener - The listener to remove

toString

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

Overrides:
toString in class java.lang.Object

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

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

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

propertyChange

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

Specified by:
propertyChange in interface java.beans.PropertyChangeListener
Parameters:
event - The property change event that has occurred

run

public void run()
The background thread that checks for session timeouts and shutdown.

Specified by:
run in interface java.lang.Runnable


Copyright 2000-2001 Apache Software Foundation. All Rights Reserved.