Class Module
ModuleLoader
s which build modules from
various configuration information and resource roots.-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final RuntimePermission
private static final RuntimePermission
private static final RuntimePermission
private static final AtomicReference<ModuleLoader>
private static final FastCopyHashSet<ClassFilter>
private static final FastCopyHashSet<PathFilter>
private final LocalLoader
The fallback local loader, if any is defined.private static final RuntimePermission
private static final RuntimePermission
private static final RuntimePermission
private final ModuleIdentifier
The identifier of this module.private Linkage
The linkage state.(package private) static ModuleLogger
The system-wide module logger, which may be changed viasetModuleLogger(org.jboss.modules.log.ModuleLogger)
.private final String
The name of the main class, if any (may benull
).private final ModuleClassLoader
The module class loader for this module.private final ModuleLoader
The module loader which created this module.private static final PermissionCollection
private final PermissionCollection
The assigned permission collection.(package private) static final ModulesPrivateAccess
The properties map specified when this module was defined.(package private) static final String[]
(package private) static final String[]
-
Constructor Summary
ConstructorsConstructorDescriptionModule
(ConcreteModuleSpec spec, ModuleLoader moduleLoader) Construct a new instance from a module specification. -
Method Summary
Modifier and TypeMethodDescriptionprivate long
addExportedPaths
(Dependency[] dependencies, Map<String, List<LocalLoader>> map, FastCopyHashSet<PathFilter> filterStack, FastCopyHashSet<ClassFilter> classFilterStack, FastCopyHashSet<PathFilter> resourceFilterStack, Set<Module.Visited> visited) private long
addPaths
(Dependency[] dependencies, Map<String, List<LocalLoader>> map, FastCopyHashSet<PathFilter> filterStack, FastCopyHashSet<ClassFilter> classFilterStack, FastCopyHashSet<PathFilter> resourceFilterStack, Set<Module.Visited> visited) private Dependency[]
calculateDependencies
(DependencySpec[] dependencySpecs) private static PermissionCollection
copyPermissions
(PermissionCollection permissionCollection) private LocalLoader
createClassFilteredLocalLoader
(ClassFilter filter, LocalLoader localLoader) private LocalLoader
createPathFilteredLocalLoader
(PathFilter filter, LocalLoader localLoader) (package private) static String
fileNameOfClass
(String className) Get the file name of a class.static Module
Get the module for a loaded class, ornull
if the class did not come from any module.static Module
forClassLoader
(ClassLoader cl, boolean search) Get the module for a class loader, ornull
if the class loader is not associated with any module.static ModuleLoader
Gets the boot module loader.static Module
Get the caller's module.static ModuleLoader
Gets the current module loader.Get the class loader for a module.(package private) ModuleClassLoader
static ModuleLoader
Get the current thread's context module loader.Get the current dependencies of this module.(package private) Dependency[]
(package private) DependencySpec[]
Get all the paths exported by this module.getExportedResource
(String name) Get an exported resource URL.getExportedResource
(String rootPath, String resourcePath) Get an exported resource from a specific root in this module.getExportedResources
(String name) Get all exported resource URLs for a resource name.(package private) LocalLoader
Get this module's identifier.Get the (unmodifiable) set of paths which are imported into this module class loader, including local paths.(package private) String
getModule
(ModuleIdentifier identifier) Get the module with the given identifier from the module loader used by this module.static Module
getModuleFromCallerModuleLoader
(ModuleIdentifier identifier) Get a module from the current module loader.Get the module loader which created this module.static ModuleLogger
Get the logger used by the module system.(package private) Package
getPackage
(String name) (package private) Package[]
(package private) Map<String,
List<LocalLoader>> getPaths()
(package private) Map<String,
List<LocalLoader>> Get the module's configured permission collection.static String
Get the platform identifier.static ModulesPrivateAccess
Private access for module internal code.getProperty
(String name) Get the property with the given name, ornull
if none was defined.getProperty
(String name, String defaultVal) Get the property with the given name, or a default value if none was defined.Get a copy of the list of property names.(package private) URL
getResource
(String name) Load a resource from a local loader.(package private) InputStream
getResourceAsStream
(String name) Load a resource from a local loader.(package private) Enumeration<URL>
getResources
(String name) Load all resources of a given name from a local loader.static long
Return the start time in millis when Module.class was loaded.globResources
(String glob) Enumerate all imported resources in this module which match the given glob expression.(package private) static void
initBootModuleLoader
(ModuleLoader loader) iterateResources
(PathFilter filter) Enumerate all the imported resources in this module, subject to a path filter.(package private) void
static Class<?>
loadClassFromBootModuleLoader
(ModuleIdentifier moduleIdentifier, String className) Load a class from a module in the system module loader.static Class<?>
loadClassFromCallerModuleLoader
(ModuleIdentifier moduleIdentifier, String className) Load a class from a module in the caller's module loader.(package private) Class<?>
loadModuleClass
(String className, boolean resolve) Load a class from a local loader.<S> ServiceLoader<S>
loadService
(Class<S> serviceType) Load a service loader from this module.<S> ServiceLoader<S>
loadServiceDirectly
(Class<S> serviceType) Load a service loader from this module, without looking at dependencies.static <S> ServiceLoader<S>
loadServiceFromCallerModuleLoader
(ModuleIdentifier identifier, Class<S> serviceType) Load a service loader from a module in the caller's module loader.private static PermissionCollection
(package private) static String
Get the path name of a resource.(package private) static String
pathOfClass
(String className) Get the path name of a class.static void
Register an additional module which contains content handlers.static void
Register an additional module which contains URL handlers.(package private) void
relink()
(package private) void
void
Run a module's main class, if any.(package private) void
setDependencies
(List<DependencySpec> dependencySpecs) (package private) void
setDependencies
(DependencySpec[] dependencySpecs) static void
setModuleLogger
(ModuleLogger logger) Change the logger used by the module system.toString()
Get the string representation of this module.
-
Field Details
-
BOOT_MODULE_LOADER
-
systemPackages
-
systemPaths
-
PRIVATE_ACCESS
-
log
The system-wide module logger, which may be changed viasetModuleLogger(org.jboss.modules.log.ModuleLogger)
. -
EMPTY_CLASS_FILTERS
-
EMPTY_PATH_FILTERS
-
identifier
The identifier of this module. -
mainClassName
The name of the main class, if any (may benull
). -
moduleClassLoader
The module class loader for this module. -
moduleLoader
The module loader which created this module. -
fallbackLoader
The fallback local loader, if any is defined. -
properties
The properties map specified when this module was defined. -
permissionCollection
The assigned permission collection. -
linkage
The linkage state. -
GET_DEPENDENCIES
-
GET_CLASS_LOADER
-
GET_BOOT_MODULE_LOADER
-
ACCESS_MODULE_LOGGER
-
ADD_CONTENT_HANDLER_FACTORY
-
ADD_URL_STREAM_HANDLER_FACTORY
-
NO_PERMISSIONS
-
-
Constructor Details
-
Module
Module(ConcreteModuleSpec spec, ModuleLoader moduleLoader) Construct a new instance from a module specification.- Parameters:
spec
- the module specificationmoduleLoader
- the module loader
-
-
Method Details
-
getPrivateAccess
Private access for module internal code. ThrowsSecurityException
for user code.- Throws:
SecurityException
- always
-
noPermissions
-
copyPermissions
-
getFallbackLoader
LocalLoader getFallbackLoader() -
getDependenciesInternal
Dependency[] getDependenciesInternal() -
getDependencySpecsInternal
DependencySpec[] getDependencySpecsInternal() -
getClassLoaderPrivate
ModuleClassLoader getClassLoaderPrivate() -
getDependencies
Get the current dependencies of this module.- Returns:
- the current dependencies of this module
- Throws:
SecurityException
- if a security manager is enabled and the caller does not have thegetDependencies
RuntimePermission
-
getExportedResource
Get an exported resource from a specific root in this module.- Parameters:
rootPath
- the module root to searchresourcePath
- the path of the resource- Returns:
- the resource
-
run
public void run(String[] args) throws NoSuchMethodException, InvocationTargetException, ClassNotFoundException Run a module's main class, if any.- Parameters:
args
- the arguments to pass- Throws:
NoSuchMethodException
- if there is no main methodInvocationTargetException
- if the main method failedClassNotFoundException
- if the main class is not found
-
getIdentifier
Get this module's identifier.- Returns:
- the identifier
-
getModuleLoader
Get the module loader which created this module.- Returns:
- the module loader of this module
-
loadService
Load a service loader from this module.- Type Parameters:
S
- the service type- Parameters:
serviceType
- the service type class- Returns:
- the service loader
-
loadServiceDirectly
Load a service loader from this module, without looking at dependencies.- Type Parameters:
S
- the service type- Parameters:
serviceType
- the service type class- Returns:
- the service loader
-
loadServiceFromCallerModuleLoader
public static <S> ServiceLoader<S> loadServiceFromCallerModuleLoader(ModuleIdentifier identifier, Class<S> serviceType) throws ModuleLoadException Load a service loader from a module in the caller's module loader. The caller's module loader refers to the loader of the module of the class that calls this method. Note thatloadService(Class)
is more efficient since it does not need to crawl the stack.- Type Parameters:
S
- the the service type- Parameters:
identifier
- the module identifier containing the service loaderserviceType
- the service type class- Returns:
- the loaded service from the caller's module
- Throws:
ModuleLoadException
- if the named module failed to load
-
getClassLoader
Get the class loader for a module. The class loader can be used to access non-exported classes and resources of the module.If a security manager is present, then this method invokes the security manager's
checkPermission
method with aRuntimePermission("getClassLoader")
permission to verify access to the class loader. If access is not granted, aSecurityException
will be thrown.- Returns:
- the module class loader
-
getExportedPaths
Get all the paths exported by this module.- Returns:
- the paths that are exported by this module
-
forClass
Get the module for a loaded class, ornull
if the class did not come from any module.- Parameters:
clazz
- the class- Returns:
- the module it came from
-
forClassLoader
Get the module for a class loader, ornull
if the class loader is not associated with any module. If the class loader is unknown, it is possible to check the parent class loader up the chain, and so on until a module is found.- Parameters:
cl
- the class loadersearch
-true
to search up the delegation chain- Returns:
- the associated module
-
getBootModuleLoader
Gets the boot module loader. The boot module loader is the initial loader that is established by the module framework. It typically is based off of the environmental module path unless it is overridden by specifying a different class name for theboot.module.loader
system property.- Returns:
- the boot module loader
-
initBootModuleLoader
-
getCallerModuleLoader
Gets the current module loader. The current module loader is the loader of the module from the calling class. Note that this method must crawl the stack to determine this, so other mechanisms are more efficient.- Returns:
- the current module loader, or
null
if this method is called outside of a module
-
getContextModuleLoader
Get the current thread's context module loader. This loader is the one which defined the module whose class loader is, or is a parent of, the thread's current context class loader. If there is none, thennull
is returned.- Returns:
- the module loader, or
null
if none is set
-
getModuleFromCallerModuleLoader
public static Module getModuleFromCallerModuleLoader(ModuleIdentifier identifier) throws ModuleLoadException Get a module from the current module loader. Note that this must crawl the stack to determine this, so other mechanisms are more efficient.- Parameters:
identifier
- the module identifier- Returns:
- the module
- Throws:
ModuleLoadException
- if the module could not be loaded- See Also:
-
getCallerModule
Get the caller's module. The caller's module is the module containing the method that calls this method. Note that this method crawls the stack so other ways of obtaining the module are more efficient.- Returns:
- the current module
-
getModule
Get the module with the given identifier from the module loader used by this module.- Parameters:
identifier
- the module identifier- Returns:
- the module
- Throws:
ModuleLoadException
- if an error occurs
-
loadClassFromBootModuleLoader
public static Class<?> loadClassFromBootModuleLoader(ModuleIdentifier moduleIdentifier, String className) throws ModuleLoadException, ClassNotFoundException Load a class from a module in the system module loader.- Parameters:
moduleIdentifier
- the identifier of the module from which the class should be loadedclassName
- the class name to load- Returns:
- the class
- Throws:
ModuleLoadException
- if the module could not be loadedClassNotFoundException
- if the class could not be loaded- See Also:
-
loadClassFromCallerModuleLoader
public static Class<?> loadClassFromCallerModuleLoader(ModuleIdentifier moduleIdentifier, String className) throws ModuleLoadException, ClassNotFoundException Load a class from a module in the caller's module loader.- Parameters:
moduleIdentifier
- the identifier of the module from which the class should be loadedclassName
- the class name to load- Returns:
- the class
- Throws:
ModuleLoadException
- if the module could not be loadedClassNotFoundException
- if the class could not be loaded- See Also:
-
loadModuleClass
Load a class from a local loader.- Parameters:
className
- the class nameresolve
-true
to resolve the class after definition- Returns:
- the class
- Throws:
ClassNotFoundException
-
getResource
Load a resource from a local loader.- Parameters:
name
- the resource name- Returns:
- the resource URL, or
null
if not found
-
getResourceAsStream
Load a resource from a local loader.- Parameters:
name
- the resource name- Returns:
- the resource stream, or
null
if not found - Throws:
IOException
-
getResources
Load all resources of a given name from a local loader.- Parameters:
name
- the resource name- Returns:
- the enumeration of all the matching resource URLs (may be empty)
-
getExportedResource
Get an exported resource URL.- Parameters:
name
- the resource name- Returns:
- the resource, or
null
if it was not found
-
getExportedResources
Get all exported resource URLs for a resource name.- Parameters:
name
- the resource name- Returns:
- the resource URLs
-
iterateResources
Enumerate all the imported resources in this module, subject to a path filter. The filter applies to the containing path of each resource.- Parameters:
filter
- the filter to apply to the search- Returns:
- the resource iterator (possibly empty)
- Throws:
ModuleLoadException
- if linking a dependency module fails for some reason
-
globResources
Enumerate all imported resources in this module which match the given glob expression. The glob applies to the whole resource name.- Parameters:
glob
- the glob to apply- Returns:
- the iterator
- Throws:
ModuleLoadException
- if linking a dependency module fails for some reason
-
getImportedPaths
Get the (unmodifiable) set of paths which are imported into this module class loader, including local paths. The set will include all paths defined by the module's resource loaders, minus any paths excluded by filters. The set will generally always contain an empty entry (""). The set is unordered and unsorted, and is iterable in O(n) time and accessible in O(1) time.- Returns:
- the set of paths
- Throws:
ModuleLoadException
- if the module was previously unlinked, and there was an exception while linking
-
pathOfClass
Get the path name of a class.- Parameters:
className
- the binary name of the class- Returns:
- the parent path
-
pathOf
Get the path name of a resource.- Parameters:
resourceName
- the resource name- Returns:
- the parent path
-
fileNameOfClass
Get the file name of a class.- Parameters:
className
- the class name- Returns:
- the name of the corresponding class file
-
getProperty
Get the property with the given name, ornull
if none was defined.- Parameters:
name
- the property name- Returns:
- the property value
-
getProperty
Get the property with the given name, or a default value if none was defined.- Parameters:
name
- the property namedefaultVal
- the default value- Returns:
- the property value
-
getPropertyNames
Get a copy of the list of property names.- Returns:
- the property names list
-
toString
Get the string representation of this module. -
getModuleLogger
Get the logger used by the module system.If a security manager is present, then this method invokes the security manager's
checkPermission
method with aRuntimePermission("accessModuleLogger")
permission to verify access to the module logger. If access is not granted, aSecurityException
will be thrown.- Returns:
- the module logger
-
setModuleLogger
Change the logger used by the module system.If a security manager is present, then this method invokes the security manager's
checkPermission
method with aRuntimePermission("accessModuleLogger")
permission to verify access to the module logger. If access is not granted, aSecurityException
will be thrown.- Parameters:
logger
- the new logger, must not benull
-
getStartTime
public static long getStartTime()Return the start time in millis when Module.class was loaded.- Returns:
- start time of Module.class load
-
registerContentHandlerFactoryModule
Register an additional module which contains content handlers.If a security manager is present, then this method invokes the security manager's
checkPermission
method with aRuntimePermission("addContentHandlerFactory")
permission to verify access. If access is not granted, aSecurityException
will be thrown.- Parameters:
module
- the module to add
-
registerURLStreamHandlerFactoryModule
Register an additional module which contains URL handlers.If a security manager is present, then this method invokes the security manager's
checkPermission
method with aRuntimePermission("addURLStreamHandlerFactory")
permission to verify access. If access is not granted, aSecurityException
will be thrown.- Parameters:
module
- the module to add
-
getPlatformIdentifier
Get the platform identifier. This is the string that uniquely identifies the hardware and OS combination for the current running system.- Returns:
- the platform identifier
-
getPermissionCollection
Get the module's configured permission collection.- Returns:
- the module permission collection
-
addPaths
private long addPaths(Dependency[] dependencies, Map<String, List<LocalLoader>> map, FastCopyHashSet<PathFilter> filterStack, FastCopyHashSet<ClassFilter> classFilterStack, FastCopyHashSet<PathFilter> resourceFilterStack, Set<Module.Visited> visited) throws ModuleLoadException- Throws:
ModuleLoadException
-
createPathFilteredLocalLoader
-
createClassFilteredLocalLoader
-
addExportedPaths
private long addExportedPaths(Dependency[] dependencies, Map<String, List<LocalLoader>> map, FastCopyHashSet<PathFilter> filterStack, FastCopyHashSet<ClassFilter> classFilterStack, FastCopyHashSet<PathFilter> resourceFilterStack, Set<Module.Visited> visited) throws ModuleLoadException- Throws:
ModuleLoadException
-
getPaths
- Throws:
ModuleLoadException
-
getPathsUnchecked
Map<String,List<LocalLoader>> getPathsUnchecked() -
link
- Throws:
ModuleLoadException
-
relinkIfNecessary
- Throws:
ModuleLoadException
-
relink
- Throws:
ModuleLoadException
-
setDependencies
-
setDependencies
-
calculateDependencies
-
getMainClass
String getMainClass() -
getPackage
-
getPackages
Package[] getPackages()
-