Class ClassRealm
- java.lang.Object
-
- java.lang.ClassLoader
-
- java.security.SecureClassLoader
-
- java.net.URLClassLoader
-
- org.codehaus.plexus.classworlds.realm.ClassRealm
-
- All Implemented Interfaces:
java.io.Closeable
,java.lang.AutoCloseable
- Direct Known Subclasses:
ClassRealmReverseAdapter
public class ClassRealm extends java.net.URLClassLoader
The class loading gateway. Each class realm has access to a base class loader, imports form zero or more other class loaders, an optional parent class loader and of course its own class path. When queried for a class/resource, a class realm will always query its base class loader first before it delegates to a pluggable strategy. The strategy in turn controls the order in which imported class loaders, the parent class loader and the realm itself are searched. The base class loader is assumed to be capable of loading of the bootstrap classes.
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.SortedSet<Entry>
foreignImports
private java.lang.String
id
private static boolean
isParallelCapable
private java.util.concurrent.ConcurrentMap<java.lang.String,java.lang.Object>
lockMap
private java.lang.ClassLoader
parentClassLoader
private java.util.SortedSet<Entry>
parentImports
private Strategy
strategy
private ClassWorld
world
-
Constructor Summary
Constructors Constructor Description ClassRealm(ClassWorld world, java.lang.String id, java.lang.ClassLoader baseClassLoader)
Creates a new class realm.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addURL(java.net.URL url)
ClassRealm
createChildRealm(java.lang.String id)
void
display()
void
display(java.io.PrintStream out)
protected java.lang.Class<?>
findClass(java.lang.String name)
protected java.lang.Class<?>
findClass(java.lang.String moduleName, java.lang.String name)
java.net.URL
findResource(java.lang.String name)
java.util.Enumeration<java.net.URL>
findResources(java.lang.String name)
protected java.lang.Object
getClassLoadingLock(java.lang.String name)
private java.lang.Object
getClassRealmLoadingLock(java.lang.String name)
java.lang.String
getId()
java.lang.ClassLoader
getImportClassLoader(java.lang.String name)
java.util.Collection<ClassRealm>
getImportRealms()
java.lang.ClassLoader
getParentClassLoader()
ClassRealm
getParentRealm()
java.net.URL
getResource(java.lang.String name)
java.util.Enumeration<java.net.URL>
getResources(java.lang.String name)
Strategy
getStrategy()
ClassWorld
getWorld()
void
importFrom(java.lang.ClassLoader classLoader, java.lang.String packageName)
void
importFrom(java.lang.String realmId, java.lang.String packageName)
void
importFromParent(java.lang.String packageName)
(package private) boolean
isImportedFromParent(java.lang.String name)
java.lang.Class<?>
loadClass(java.lang.String name)
protected java.lang.Class<?>
loadClass(java.lang.String name, boolean resolve)
java.lang.Class<?>
loadClassFromImport(java.lang.String name)
java.lang.Class<?>
loadClassFromParent(java.lang.String name)
java.lang.Class<?>
loadClassFromSelf(java.lang.String name)
java.net.URL
loadResourceFromImport(java.lang.String name)
java.net.URL
loadResourceFromParent(java.lang.String name)
java.net.URL
loadResourceFromSelf(java.lang.String name)
java.util.Enumeration<java.net.URL>
loadResourcesFromImport(java.lang.String name)
java.util.Enumeration<java.net.URL>
loadResourcesFromParent(java.lang.String name)
java.util.Enumeration<java.net.URL>
loadResourcesFromSelf(java.lang.String name)
void
setParentClassLoader(java.lang.ClassLoader parentClassLoader)
void
setParentRealm(ClassRealm realm)
private static void
showUrls(ClassRealm classRealm, java.io.PrintStream out)
java.lang.String
toString()
private java.lang.Class<?>
unsynchronizedLoadClass(java.lang.String name, boolean resolve)
-
Methods inherited from class java.net.URLClassLoader
close, definePackage, getPermissions, getResourceAsStream, getURLs, newInstance, newInstance
-
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findLibrary, findLoadedClass, findResource, findSystemClass, getDefinedPackage, getDefinedPackages, getName, getPackage, getPackages, getParent, getPlatformClassLoader, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
-
-
-
-
Field Detail
-
world
private ClassWorld world
-
id
private java.lang.String id
-
foreignImports
private java.util.SortedSet<Entry> foreignImports
-
parentImports
private java.util.SortedSet<Entry> parentImports
-
strategy
private Strategy strategy
-
parentClassLoader
private java.lang.ClassLoader parentClassLoader
-
isParallelCapable
private static final boolean isParallelCapable
-
lockMap
private final java.util.concurrent.ConcurrentMap<java.lang.String,java.lang.Object> lockMap
-
-
Constructor Detail
-
ClassRealm
public ClassRealm(ClassWorld world, java.lang.String id, java.lang.ClassLoader baseClassLoader)
Creates a new class realm.- Parameters:
world
- The class world this realm belongs to, must not benull
.id
- The identifier for this realm, must not benull
.baseClassLoader
- The base class loader for this realm, may benull
to use the bootstrap class loader.
-
-
Method Detail
-
getId
public java.lang.String getId()
-
getWorld
public ClassWorld getWorld()
-
importFromParent
public void importFromParent(java.lang.String packageName)
-
isImportedFromParent
boolean isImportedFromParent(java.lang.String name)
-
importFrom
public void importFrom(java.lang.String realmId, java.lang.String packageName) throws NoSuchRealmException
- Throws:
NoSuchRealmException
-
importFrom
public void importFrom(java.lang.ClassLoader classLoader, java.lang.String packageName)
-
getImportClassLoader
public java.lang.ClassLoader getImportClassLoader(java.lang.String name)
-
getImportRealms
public java.util.Collection<ClassRealm> getImportRealms()
-
getStrategy
public Strategy getStrategy()
-
setParentClassLoader
public void setParentClassLoader(java.lang.ClassLoader parentClassLoader)
-
getParentClassLoader
public java.lang.ClassLoader getParentClassLoader()
-
setParentRealm
public void setParentRealm(ClassRealm realm)
-
getParentRealm
public ClassRealm getParentRealm()
-
createChildRealm
public ClassRealm createChildRealm(java.lang.String id) throws DuplicateRealmException
- Throws:
DuplicateRealmException
-
addURL
public void addURL(java.net.URL url)
- Overrides:
addURL
in classjava.net.URLClassLoader
-
loadClass
public java.lang.Class<?> loadClass(java.lang.String name) throws java.lang.ClassNotFoundException
- Overrides:
loadClass
in classjava.lang.ClassLoader
- Throws:
java.lang.ClassNotFoundException
-
loadClass
protected java.lang.Class<?> loadClass(java.lang.String name, boolean resolve) throws java.lang.ClassNotFoundException
- Overrides:
loadClass
in classjava.lang.ClassLoader
- Throws:
java.lang.ClassNotFoundException
-
unsynchronizedLoadClass
private java.lang.Class<?> unsynchronizedLoadClass(java.lang.String name, boolean resolve) throws java.lang.ClassNotFoundException
- Throws:
java.lang.ClassNotFoundException
-
findClass
protected java.lang.Class<?> findClass(java.lang.String moduleName, java.lang.String name)
- Overrides:
findClass
in classjava.lang.ClassLoader
-
findClass
protected java.lang.Class<?> findClass(java.lang.String name) throws java.lang.ClassNotFoundException
- Overrides:
findClass
in classjava.net.URLClassLoader
- Throws:
java.lang.ClassNotFoundException
-
getResource
public java.net.URL getResource(java.lang.String name)
- Overrides:
getResource
in classjava.lang.ClassLoader
-
findResource
public java.net.URL findResource(java.lang.String name)
- Overrides:
findResource
in classjava.net.URLClassLoader
-
getResources
public java.util.Enumeration<java.net.URL> getResources(java.lang.String name) throws java.io.IOException
- Overrides:
getResources
in classjava.lang.ClassLoader
- Throws:
java.io.IOException
-
findResources
public java.util.Enumeration<java.net.URL> findResources(java.lang.String name) throws java.io.IOException
- Overrides:
findResources
in classjava.net.URLClassLoader
- Throws:
java.io.IOException
-
display
public void display()
-
display
public void display(java.io.PrintStream out)
-
showUrls
private static void showUrls(ClassRealm classRealm, java.io.PrintStream out)
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
loadClassFromImport
public java.lang.Class<?> loadClassFromImport(java.lang.String name)
-
loadClassFromSelf
public java.lang.Class<?> loadClassFromSelf(java.lang.String name)
-
getClassRealmLoadingLock
private java.lang.Object getClassRealmLoadingLock(java.lang.String name)
-
getClassLoadingLock
protected java.lang.Object getClassLoadingLock(java.lang.String name)
- Overrides:
getClassLoadingLock
in classjava.lang.ClassLoader
-
loadClassFromParent
public java.lang.Class<?> loadClassFromParent(java.lang.String name)
-
loadResourceFromImport
public java.net.URL loadResourceFromImport(java.lang.String name)
-
loadResourceFromSelf
public java.net.URL loadResourceFromSelf(java.lang.String name)
-
loadResourceFromParent
public java.net.URL loadResourceFromParent(java.lang.String name)
-
loadResourcesFromImport
public java.util.Enumeration<java.net.URL> loadResourcesFromImport(java.lang.String name)
-
loadResourcesFromSelf
public java.util.Enumeration<java.net.URL> loadResourcesFromSelf(java.lang.String name)
-
loadResourcesFromParent
public java.util.Enumeration<java.net.URL> loadResourcesFromParent(java.lang.String name)
-
-