|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | 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 the associated loader.
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.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. the usual Java2 delegation model)? |
protected java.net.URLStreamHandlerFactory |
factory
URL stream handler for additional protocols. |
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. |
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.ClassLoader parent,
java.net.URLStreamHandlerFactory factory)
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. |
|
StandardClassLoader(java.net.URLStreamHandlerFactory factory)
Construct a new ClassLoader with no defined repositories and no parent ClassLoader, but with a stream handler factory. |
Method Summary | |
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. |
protected static java.net.URL[] |
convert(java.lang.String[] input)
Convert an array of String to an array of URL and return it. |
protected static java.net.URL[] |
convert(java.lang.String[] input,
java.net.URLStreamHandlerFactory factory)
Convert an array of String to an array of URL and return it. |
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. |
int |
getDebug()
Return the debugging detail level for this component. |
boolean |
getDelegate()
Return the "delegate first" flag for this class loader. |
protected java.security.PermissionCollection |
getPermissions(java.security.CodeSource codeSource)
Get the Permissions for a CodeSource. |
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? |
protected static java.lang.String |
parseProtocol(java.lang.String spec)
Parse URL protocol. |
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. |
void |
setPermissions(java.lang.String path)
If there is a Java SecurityManager create a read FilePermission or JndiPermission for the file directory path. |
void |
setPermissions(java.net.URL url)
If there is a Java SecurityManager add a read FilePermission or JndiPermission for URL. |
java.lang.String |
toString()
Render a String representation of this object. |
Methods inherited from class java.net.URLClassLoader |
addURL, definePackage, getURLs, newInstance, newInstance |
Methods inherited from class java.security.SecureClassLoader |
defineClass |
Methods inherited from class java.lang.ClassLoader |
clearAssertionStatus, defineClass, defineClass, defineClass, definePackage, findLibrary, findLoadedClass, findSystemClass, getPackage, getPackages, getParent, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
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.net.URLStreamHandlerFactory factory
Constructor Detail |
public StandardClassLoader()
public StandardClassLoader(java.net.URLStreamHandlerFactory factory)
factory
- the URLStreamHandlerFactory to use when creating URLspublic StandardClassLoader(java.lang.ClassLoader parent)
parent
- The parent ClassLoaderpublic StandardClassLoader(java.lang.ClassLoader parent, java.net.URLStreamHandlerFactory factory)
parent
- The parent ClassLoaderfactory
- the URLStreamHandlerFactory to use when creating URLspublic 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 setPermissions(java.lang.String path)
path
- file directory pathpublic void setPermissions(java.net.URL url)
url
- URL for a file or directory on local systempublic 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 pathname
java.lang.IllegalArgumentException
- if the specified repository is
invalid or does not existpublic Extension[] findAvailable()
public java.lang.String[] findRepositories()
findRepositories
in interface Reloader
public Extension[] findRequired()
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 loaded
java.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 found
java.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 loaded
java.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 class
java.lang.ClassNotFoundException
- if the class was not foundprotected final java.security.PermissionCollection getPermissions(java.security.CodeSource codeSource)
getPermissions
in class java.net.URLClassLoader
protected static java.lang.String parseProtocol(java.lang.String spec)
protected void addRepositoryInternal(java.lang.String repository)
repository
- The new repository
java.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 static java.net.URL[] convert(java.lang.String[] input, java.net.URLStreamHandlerFactory factory)
input
- The array of String to be convertedfactory
- Handler factory to use to generate the URLsprotected java.io.InputStream findLoadedResource(java.lang.String name)
null
.
name
- Name of the resource to return
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |