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.URLClassLoaderThe 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>foreignImportsprivate java.lang.Stringidprivate static booleanisParallelCapableprivate java.util.concurrent.ConcurrentMap<java.lang.String,java.lang.Object>lockMapprivate java.lang.ClassLoaderparentClassLoaderprivate java.util.SortedSet<Entry>parentImportsprivate Strategystrategyprivate ClassWorldworld
-
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 voidaddURL(java.net.URL url)ClassRealmcreateChildRealm(java.lang.String id)voiddisplay()voiddisplay(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.URLfindResource(java.lang.String name)java.util.Enumeration<java.net.URL>findResources(java.lang.String name)protected java.lang.ObjectgetClassLoadingLock(java.lang.String name)private java.lang.ObjectgetClassRealmLoadingLock(java.lang.String name)java.lang.StringgetId()java.lang.ClassLoadergetImportClassLoader(java.lang.String name)java.util.Collection<ClassRealm>getImportRealms()java.lang.ClassLoadergetParentClassLoader()ClassRealmgetParentRealm()java.net.URLgetResource(java.lang.String name)java.util.Enumeration<java.net.URL>getResources(java.lang.String name)StrategygetStrategy()ClassWorldgetWorld()voidimportFrom(java.lang.ClassLoader classLoader, java.lang.String packageName)voidimportFrom(java.lang.String realmId, java.lang.String packageName)voidimportFromParent(java.lang.String packageName)(package private) booleanisImportedFromParent(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.URLloadResourceFromImport(java.lang.String name)java.net.URLloadResourceFromParent(java.lang.String name)java.net.URLloadResourceFromSelf(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)voidsetParentClassLoader(java.lang.ClassLoader parentClassLoader)voidsetParentRealm(ClassRealm realm)private static voidshowUrls(ClassRealm classRealm, java.io.PrintStream out)java.lang.StringtoString()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 benullto 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:
addURLin classjava.net.URLClassLoader
-
loadClass
public java.lang.Class<?> loadClass(java.lang.String name) throws java.lang.ClassNotFoundException- Overrides:
loadClassin classjava.lang.ClassLoader- Throws:
java.lang.ClassNotFoundException
-
loadClass
protected java.lang.Class<?> loadClass(java.lang.String name, boolean resolve) throws java.lang.ClassNotFoundException- Overrides:
loadClassin 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:
findClassin classjava.lang.ClassLoader
-
findClass
protected java.lang.Class<?> findClass(java.lang.String name) throws java.lang.ClassNotFoundException- Overrides:
findClassin classjava.net.URLClassLoader- Throws:
java.lang.ClassNotFoundException
-
getResource
public java.net.URL getResource(java.lang.String name)
- Overrides:
getResourcein classjava.lang.ClassLoader
-
findResource
public java.net.URL findResource(java.lang.String name)
- Overrides:
findResourcein classjava.net.URLClassLoader
-
getResources
public java.util.Enumeration<java.net.URL> getResources(java.lang.String name) throws java.io.IOException- Overrides:
getResourcesin 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:
findResourcesin 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:
toStringin 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:
getClassLoadingLockin 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)
-
-