|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--java.lang.ClassLoader | +--java.security.SecureClassLoader | +--java.net.URLClassLoader | +--org.apache.catalina.loader.StandardClassLoader
Subclass implementation of java.net.URLClassLoader that knows how
to load classes from disk directories, as well as local and remote JAR
files. It also implements the Reloader
interface, to provide
automatic reloading support to StandardLoader
.
In all cases, URLs must conform to the contract specified by
URLClassLoader
- any URL that ends with a "/" character is
assumed to represent a directory; all other URLs are assumed to be the
address of a JAR file.
IMPLEMENTATION NOTE - Local repositories are searched in
the order they are added via the initial constructor and/or any subsequent
calls to addRepository()
.
IMPLEMENTATION NOTE - At present, there are no dependencies from this class to any other Catalina class, so that it could be used independently.
Field Summary | |
protected java.lang.String[] |
allowed
The set of fully qualified class or resource names to which access will be allowed (if they exist) by this class loader, even if the class or resource name would normally be restricted. |
protected java.util.ArrayList |
available
The set of optional packages (formerly standard extensions) that are available in the repositories associated with this class loader. |
protected java.util.HashMap |
classCache
The cache of ClassCacheEntries for classes we have loaded locally, keyed by class name. |
protected int |
debug
The debugging detail level of this component. |
protected boolean |
delegate
Should this class loader delegate to the parent class loader before searching its own repositories (i.e. |
protected java.lang.String[] |
repositories
The list of local repositories, in the order they should be searched for locally loaded classes or resources. |
protected java.util.ArrayList |
required
The set of optional packages (formerly standard extensions) that are required in the repositories associated with this class loader. |
protected java.lang.String[] |
restricted
The set of class name prefixes to which access should be restricted. |
protected java.lang.String[] |
systems
The set of class and resource name prefixes that should be allowed, but only from the underlying system class loader. |
Constructor Summary | |
StandardClassLoader()
Construct a new ClassLoader with no defined repositories and no parent ClassLoader. |
|
StandardClassLoader(java.lang.ClassLoader parent)
Construct a new ClassLoader with no defined repositories and the specified parent ClassLoader. |
|
StandardClassLoader(java.lang.String[] repositories)
Construct a new ClassLoader with the specified repositories and no parent ClassLoader. |
|
StandardClassLoader(java.lang.String[] repositories,
java.lang.ClassLoader parent)
Construct a new ClassLoader with the specified repositories and parent ClassLoader. |
|
StandardClassLoader(java.net.URL[] repositories,
java.lang.ClassLoader parent)
Construct a new ClassLoader with the specified repositories and parent ClassLoader. |
Method Summary | |
void |
addAllowed(java.lang.String name)
Add a new fully qualified class or resource name to which access will be allowed, even if the class or resource name would otherwise match one of the restricted patterns. |
void |
addRepository(java.lang.String repository)
Add a new repository to the set of places this ClassLoader can look for classes to be loaded. |
protected void |
addRepositoryInternal(java.lang.String repository)
Add a repository to our internal array only. |
void |
addRestricted(java.lang.String prefix)
Add a fully qualified class or resource name prefix that, if it matches the name of a requested class or resource, will cause access to that class or resource to fail (unless the complete name is on the allowed list). |
void |
addSystem(java.lang.String prefix)
Add a fully qualified class or resource name prefix that, if it matches the name of a requested class or resource, will cause access to that class or resource to be attempted in the system class loader only (bypassing the repositories defined in this class loader). |
protected static java.net.URL[] |
convert(java.lang.String[] input)
Convert an array of String to an array of URL and return it. |
java.lang.String[] |
findAllowed()
Return a String array of the allowed class or resource name list for this class loader. |
Extension[] |
findAvailable()
Return a list of "optional packages" (formerly "standard extensions") that have been declared to be available in the repositories associated with this class loader, plus any parent class loader implemented with the same class. |
java.lang.Class |
findClass(java.lang.String name)
Find the specified class in our local repositories, if possible. |
protected java.io.InputStream |
findLoadedResource(java.lang.String name)
Finds the resource with the given name if it has previously been loaded and cached by this class loader, and return an input stream to the resource data. |
java.lang.String[] |
findRepositories()
Return a String array of the current repositories for this class loader. |
Extension[] |
findRequired()
Return a list of "optional packages" (formerly "standard extensions") that have been declared to be required in the repositories associated with this class loader, plus any parent class loader implemented with the same class. |
java.net.URL |
findResource(java.lang.String name)
Find the specified resource in our local repository, and return a URL refering to it, or null if this resource
cannot be found. |
java.util.Enumeration |
findResources(java.lang.String name)
Return an enumeration of URLs representing all of the
resources with the given name. |
java.lang.String[] |
findRestricted()
Return a String array of the restricted class or resource name prefixes for this class loader. |
java.lang.String[] |
findSystem()
Return a Striong array of the sytsem class or resource name prefixes for this class loader. |
int |
getDebug()
Return the debugging detail level for this component. |
boolean |
getDelegate()
Return the "delegate first" flag for this class loader. |
java.net.URL |
getResource(java.lang.String name)
Find the resource with the given name. |
java.io.InputStream |
getResourceAsStream(java.lang.String name)
Find the resource with the given name, and return an input stream that can be used for reading it. |
java.lang.Class |
loadClass(java.lang.String name)
Load the class with the specified name. |
java.lang.Class |
loadClass(java.lang.String name,
boolean resolve)
Load the class with the specified name, searching using the following algorithm until it finds and returns the class. |
boolean |
modified()
Have one or more classes or resources been modified so that a reload is appropriate? |
void |
setDebug(int debug)
Set the debugging detail level for this component. |
void |
setDelegate(boolean delegate)
Set the "delegate first" flag for this class loader. |
java.lang.String |
toString()
Render a String representation of this object. |
Methods inherited from class java.net.URLClassLoader |
addURL, definePackage, getPermissions, getURLs, newInstance, newInstance |
Methods inherited from class java.security.SecureClassLoader |
defineClass |
Methods inherited from class java.lang.ClassLoader |
defineClass, defineClass, defineClass, definePackage, findLibrary, findLoadedClass, findSystemClass, getPackage, getPackages, getParent, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, resolveClass, setSigners |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
protected java.lang.String[] allowed
protected java.util.ArrayList available
org.apache.catalina.loader.Extension
.protected java.util.HashMap classCache
protected int debug
protected boolean delegate
false
,
this class loader will search its own repositories first, and
delegate to the parent only if the class or resource is not
found locally.protected java.lang.String[] repositories
protected java.util.ArrayList required
org.apache.catalina.loader.Extension
.protected java.lang.String[] restricted
null
return value,
unless that specific class or resource name is on the allowed list.protected java.lang.String[] systems
Constructor Detail |
public StandardClassLoader()
public StandardClassLoader(java.lang.ClassLoader parent)
parent
- The parent ClassLoaderpublic StandardClassLoader(java.lang.String[] repositories)
repositories
- The initial set of repositoriespublic StandardClassLoader(java.lang.String[] repositories, java.lang.ClassLoader parent)
repositories
- The initial set of repositoriesparent
- The parent ClassLoaderpublic StandardClassLoader(java.net.URL[] repositories, java.lang.ClassLoader parent)
repositories
- The initial set of repositoriesparent
- The parent ClassLoaderMethod Detail |
public int getDebug()
public void setDebug(int debug)
debug
- The new debugging detail levelpublic boolean getDelegate()
public void setDelegate(boolean delegate)
delegate
- The new "delegate first" flagpublic void addAllowed(java.lang.String name)
addAllowed
in interface Reloader
name
- Class or resource name to allow access forpublic void addRepository(java.lang.String repository)
addRepository
in interface Reloader
repository
- Name of a source of classes to be loaded, such as a
directory pathname, a JAR file pathname, or a ZIP file pathnamejava.lang.IllegalArgumentException
- if the specified repository is
invalid or does not existpublic void addRestricted(java.lang.String prefix)
addRestricted
in interface Reloader
prefix
- The restricted prefixpublic void addSystem(java.lang.String prefix)
java.
prefix is defined as a system prefix.addSystem
in interface Reloader
prefix
- The system prefixpublic java.lang.String[] findAllowed()
findAllowed
in interface Reloader
public Extension[] findAvailable()
public java.lang.String[] findRepositories()
findRepositories
in interface Reloader
public Extension[] findRequired()
public java.lang.String[] findRestricted()
findRestricted
in interface Reloader
public java.lang.String[] findSystem()
findSystem
in interface Reloader
public boolean modified()
IMPLEMENTATION NOTE - We assume that anything loaded from a JAR file will never need to be reloaded unless the JAR file itself has been updated. Unpacked classes or resources loaded from a directory are checked individually.
modified
in interface Reloader
public java.lang.String toString()
toString
in class java.lang.Object
public java.lang.Class findClass(java.lang.String name) throws java.lang.ClassNotFoundException
ClassNotFoundException
.findClass
in class java.net.URLClassLoader
name
- Name of the class to be loadedjava.lang.ClassNotFoundException
- if the class was not foundpublic java.net.URL findResource(java.lang.String name)
URL
refering to it, or null
if this resource
cannot be found.findResource
in class java.net.URLClassLoader
name
- Name of the resource to be foundpublic java.util.Enumeration findResources(java.lang.String name) throws java.io.IOException
URLs
representing all of the
resources with the given name. If no resources with this name are
found, return an empty enumeration.findResources
in class java.net.URLClassLoader
name
- Name of the resources to be foundjava.io.IOException
- if an input/output error occurspublic java.net.URL getResource(java.lang.String name)
null
.
This method searches according to the following algorithm, returning
as soon as it finds the appropriate URL. If the resource cannot be
found, returns null
.
delegate
property is set to true
,
call the getResource()
method of the parent class
loader, if any.findResource()
to find this resource in our
locally defined repositories.getResource()
method of the parent class
loader, if any.getResource
in class java.lang.ClassLoader
name
- Name of the resource to return a URL forpublic java.io.InputStream getResourceAsStream(java.lang.String name)
getResource()
, after checking to see if the resource
data has been previously cached. If the resource cannot be found,
return null
.getResourceAsStream
in class java.lang.ClassLoader
name
- Name of the resource to return an input stream forpublic java.lang.Class loadClass(java.lang.String name) throws java.lang.ClassNotFoundException
loadClass(String, boolean)
with false
as the second argument.loadClass
in class java.lang.ClassLoader
name
- Name of the class to be loadedjava.lang.ClassNotFoundException
- if the class was not foundpublic java.lang.Class loadClass(java.lang.String name, boolean resolve) throws java.lang.ClassNotFoundException
ClassNotFoundException
.
findLoadedClass(String)
to check if the
class has already been loaded. If it has, the same
Class
object is returned.delegate
property is set to true
,
call the loadClass()
method of the parent class
loader, if any.findClass()
to find this class in our locally
defined repositories.loadClass()
method of our parent
class loader, if any.resolve
flag is true
, this method will then
call resolveClass(Class)
on the resulting Class object.loadClass
in class java.lang.ClassLoader
name
- Name of the class to be loadedresolve
- If true
then resolve the classjava.lang.ClassNotFoundException
- if the class was not foundprotected void addRepositoryInternal(java.lang.String repository)
repository
- The new repositoryjava.lang.IllegalArgumentException
- if the manifest of a JAR file
cannot be processed correctlyprotected static java.net.URL[] convert(java.lang.String[] input)
input
- The array of String to be convertedprotected java.io.InputStream findLoadedResource(java.lang.String name)
null
.name
- Name of the resource to return
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |