org.apache.catalina.loader
Class WebappLoader

java.lang.Object
  extended byorg.apache.catalina.loader.WebappLoader
All Implemented Interfaces:
java.util.EventListener, Lifecycle, Loader, javax.management.MBeanRegistration, java.beans.PropertyChangeListener

public class WebappLoader
extends java.lang.Object
implements Lifecycle, Loader, java.beans.PropertyChangeListener, javax.management.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:
$Id: WebappLoader.java 939527 2010-04-30 00:43:48Z kkolinko $
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
AFTER_START_EVENT, AFTER_STOP_EVENT, BEFORE_START_EVENT, BEFORE_STOP_EVENT, DESTROY_EVENT, INIT_EVENT, PERIODIC_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(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.
 void backgroundProcess()
          Execute a periodic task, such as reloading, etc.
 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.
 java.lang.String[] findRepositories()
          Return the set of repositories defined for this class loader.
 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 property
 Container getContainer()
          Return the Container with which this Logger has been associated.
 javax.management.ObjectName getController()
           
 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.
 java.lang.String[] getLoaderRepositories()
           
 java.lang.String getLoaderRepositoriesString()
           
 boolean getReloadable()
          Return the reloadable flag for this Loader.
 java.lang.String[] getRepositories()
           
 java.lang.String getRepositoriesString()
          Extra repositories for this loader
 boolean getUseSystemClassLoaderAsParent()
          Return the useSystemClassLoaderAsParent flag 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(java.lang.Boolean registrationDone)
           
 void preDeregister()
           
 javax.management.ObjectName preRegister(javax.management.MBeanServer server, javax.management.ObjectName name)
           
 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 setContainer(Container container)
          Set the Container with which this Logger has been associated.
 void setController(javax.management.ObjectName controller)
           
 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 setUseSystemClassLoaderAsParent(boolean useSystemClassLoaderAsParent)
          Set the useSystemClassLoaderAsParent 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

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

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

getUseSystemClassLoaderAsParent

public boolean getUseSystemClassLoaderAsParent()
Return the useSystemClassLoaderAsParent flag for this Loader.


setUseSystemClassLoaderAsParent

public void setUseSystemClassLoaderAsParent(boolean useSystemClassLoaderAsParent)
Set the useSystemClassLoaderAsParent flag for this Loader.

Parameters:
useSystemClassLoaderAsParent - The useSystemClassLoaderAsParent flag.

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

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 interface Loader

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. For security reason, returns a clone of the Array (since String are immutable).

Specified by:
findRepositories in interface Loader

getRepositories

public java.lang.String[] getRepositories()

getRepositoriesString

public java.lang.String getRepositoriesString()
Extra repositories for this loader


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?

Specified by:
modified in interface Loader

closeJARs

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


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.


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

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

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

init

public void init()

destroy

public void destroy()

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

preRegister

public javax.management.ObjectName preRegister(javax.management.MBeanServer server,
                                               javax.management.ObjectName name)
                                        throws java.lang.Exception
Specified by:
preRegister in interface javax.management.MBeanRegistration
Throws:
java.lang.Exception

postRegister

public void postRegister(java.lang.Boolean registrationDone)
Specified by:
postRegister in interface javax.management.MBeanRegistration

preDeregister

public void preDeregister()
                   throws java.lang.Exception
Specified by:
preDeregister in interface javax.management.MBeanRegistration
Throws:
java.lang.Exception

postDeregister

public void postDeregister()
Specified by:
postDeregister in interface javax.management.MBeanRegistration

getController

public javax.management.ObjectName getController()

setController

public void setController(javax.management.ObjectName controller)


Copyright © 2000-2012 Apache Software Foundation. All Rights Reserved.