Class Module
- java.lang.Object
-
- org.jboss.modules.Module
-
public final class Module extends java.lang.Object
A module is a unit of classes and other resources, along with the specification of what is imported and exported by this module from and to other modules. Modules are created byModuleLoader
s which build modules from various configuration information and resource roots.- Author:
- David M. Lloyd, John Bailey, Flavia Rainone, Jason T. Greene, thomas.diesler@jboss.com
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description static <T> java.lang.Iterable<T>
findServices(java.lang.Class<T> type, java.util.function.Predicate<java.lang.Class<?>> filter, java.lang.ClassLoader loader)
Returns an iterable of available and filtered providers of given type.static Module
forClass(java.lang.Class<?> clazz)
Get the module for a loaded class, ornull
if the class did not come from any module.static Module
forClassLoader(java.lang.ClassLoader cl, boolean search)
Get the module for a class loader, ornull
if the class loader is not associated with any module.static ModuleLoader
getBootModuleLoader()
Gets the boot module loader.static Module
getCallerModule()
Get the caller's module.static ModuleLoader
getCallerModuleLoader()
Gets the current module loader.ModuleClassLoader
getClassLoader()
Get the class loader for a module.static ModuleLoader
getContextModuleLoader()
Get the current thread's context module loader.DependencySpec[]
getDependencies()
Get the current dependencies of this module.java.util.Set<java.lang.String>
getExportedPaths()
Get all the paths exported by this module.java.net.URL
getExportedResource(java.lang.String name)
Get an exported resource URL.Resource
getExportedResource(java.lang.String rootPath, java.lang.String resourcePath)
Deprecated.Resource root names are deprecated.java.util.Enumeration<java.net.URL>
getExportedResources(java.lang.String name)
Get all exported resource URLs for a resource name.ModuleIdentifier
getIdentifier()
Deprecated.UsegetName()
instead.java.util.Set<java.lang.String>
getImportedPaths()
Get the (unmodifiable) set of paths which are imported into this module class loader, including local paths.Module
getModule(java.lang.String name)
Get the module with the given identifier from the module loader used by this module.Module
getModule(ModuleIdentifier identifier)
Deprecated.UsegetModule(String)
instead.static Module
getModuleFromCallerModuleLoader(java.lang.String name)
Get a module from the current module loader.static Module
getModuleFromCallerModuleLoader(ModuleIdentifier identifier)
Deprecated.UsegetModuleFromCallerModuleLoader(String)
instead.ModuleLoader
getModuleLoader()
Get the module loader which created this module.static ModuleLogger
getModuleLogger()
Get the logger used by the module system.java.lang.String
getName()
Get this module's name.java.security.PermissionCollection
getPermissionCollection()
Get the module's configured permission collection.static java.lang.String
getPlatformIdentifier()
Get the platform identifier.static org.jboss.modules._private.ModulesPrivateAccess
getPrivateAccess()
Private access for module internal code.java.lang.String
getProperty(java.lang.String name)
Get the property with the given name, ornull
if none was defined.java.lang.String
getProperty(java.lang.String name, java.lang.String defaultVal)
Get the property with the given name, or a default value if none was defined.java.util.List<java.lang.String>
getPropertyNames()
Get a copy of the list of property names.static long
getStartTime()
Return the start time in millis when Module.class was loaded.static ModuleLoader
getSystemModuleLoader()
Get the system module loader.Version
getVersion()
Get the module version.java.util.Iterator<Resource>
globResources(java.lang.String glob)
Enumerate all imported resources in this module which match the given glob expression.java.util.Iterator<Resource>
iterateResources(PathFilter filter)
Enumerate all the imported resources in this module, subject to a path filter.static java.lang.Class<?>
loadClassFromBootModuleLoader(java.lang.String name, java.lang.String className)
Load a class from a module in the system module loader.static java.lang.Class<?>
loadClassFromBootModuleLoader(ModuleIdentifier moduleIdentifier, java.lang.String className)
Deprecated.UseloadClassFromBootModuleLoader(String, String)
instead.static java.lang.Class<?>
loadClassFromCallerModuleLoader(java.lang.String name, java.lang.String className)
Load a class from a module in the caller's module loader.static java.lang.Class<?>
loadClassFromCallerModuleLoader(ModuleIdentifier moduleIdentifier, java.lang.String className)
Deprecated.UseloadClassFromCallerModuleLoader(String, String)
instead.<S> java.util.ServiceLoader<S>
loadService(java.lang.Class<S> serviceType)
Load a service loader from this module.<S> java.util.ServiceLoader<S>
loadServiceDirectly(java.lang.Class<S> serviceType)
Load a service loader from this module, without looking at dependencies.static <S> java.util.ServiceLoader<S>
loadServiceFromCallerModuleLoader(java.lang.String name, java.lang.Class<S> serviceType)
Load a service loader from a module in the caller's module loader.static <S> java.util.ServiceLoader<S>
loadServiceFromCallerModuleLoader(ModuleIdentifier identifier, java.lang.Class<S> serviceType)
Deprecated.UseloadServiceFromCallerModuleLoader(String, Class)
instead.static void
registerContentHandlerFactoryModule(Module module)
Register an additional module which contains content handlers.static void
registerURLStreamHandlerFactoryModule(Module module)
Register an additional module which contains URL handlers.void
run(java.lang.String[] args)
Run a module's main class, if any.void
run(java.lang.String className, java.lang.String[] args)
Run the given main class in this module.static void
setModuleLogger(ModuleLogger logger)
Change the logger used by the module system.java.lang.String
toString()
Get the string representation of this module.
-
-
-
Method Detail
-
getPrivateAccess
public static org.jboss.modules._private.ModulesPrivateAccess getPrivateAccess()
Private access for module internal code. ThrowsSecurityException
for user code.- Throws:
java.lang.SecurityException
- always
-
getDependencies
public DependencySpec[] getDependencies() throws java.lang.SecurityException
Get the current dependencies of this module.- Returns:
- the current dependencies of this module
- Throws:
java.lang.SecurityException
- if a security manager is enabled and the caller does not have thegetDependencies
RuntimePermission
-
getExportedResource
@Deprecated public Resource getExportedResource(java.lang.String rootPath, java.lang.String resourcePath)
Deprecated.Resource root names are deprecated.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(java.lang.String[] args) throws java.lang.NoSuchMethodException, java.lang.reflect.InvocationTargetException, java.lang.ClassNotFoundException
Run a module's main class, if any.- Parameters:
args
- the arguments to pass- Throws:
java.lang.NoSuchMethodException
- if there is no main methodjava.lang.reflect.InvocationTargetException
- if the main method failedjava.lang.ClassNotFoundException
- if the main class is not found
-
run
public void run(java.lang.String className, java.lang.String[] args) throws java.lang.NoSuchMethodException, java.lang.reflect.InvocationTargetException, java.lang.ClassNotFoundException
Run the given main class in this module.- Parameters:
className
- the class name to run (must not benull
)args
- the arguments to pass- Throws:
java.lang.NoSuchMethodException
- if there is no main methodjava.lang.reflect.InvocationTargetException
- if the main method failedjava.lang.ClassNotFoundException
- if the main class is not found
-
getIdentifier
@Deprecated public ModuleIdentifier getIdentifier()
Deprecated.UsegetName()
instead.Get this module's identifier.- Returns:
- the identifier
-
getName
public java.lang.String getName()
Get this module's name.- Returns:
- this module's name
-
getModuleLoader
public ModuleLoader getModuleLoader()
Get the module loader which created this module.- Returns:
- the module loader of this module
-
loadService
public <S> java.util.ServiceLoader<S> loadService(java.lang.Class<S> serviceType)
Load a service loader from this module.- Type Parameters:
S
- the service type- Parameters:
serviceType
- the service type class- Returns:
- the service loader
-
loadServiceDirectly
public <S> java.util.ServiceLoader<S> loadServiceDirectly(java.lang.Class<S> serviceType)
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
@Deprecated public static <S> java.util.ServiceLoader<S> loadServiceFromCallerModuleLoader(ModuleIdentifier identifier, java.lang.Class<S> serviceType) throws ModuleLoadException
Deprecated.UseloadServiceFromCallerModuleLoader(String, Class)
instead.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
-
loadServiceFromCallerModuleLoader
public static <S> java.util.ServiceLoader<S> loadServiceFromCallerModuleLoader(java.lang.String name, java.lang.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:
name
- the module name 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
public ModuleClassLoader 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
public java.util.Set<java.lang.String> getExportedPaths()
Get all the paths exported by this module.- Returns:
- the paths that are exported by this module
-
forClass
public static Module forClass(java.lang.Class<?> clazz)
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
public static Module forClassLoader(java.lang.ClassLoader cl, boolean search)
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
public static ModuleLoader 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
-
getSystemModuleLoader
public static ModuleLoader getSystemModuleLoader()
Get the system module loader. This is the module loader which contains the Java platform modules, plus a module for JBoss Modules itself, calledorg.jboss.modules
.- Returns:
- the system module loader
-
findServices
public static <T> java.lang.Iterable<T> findServices(java.lang.Class<T> type, java.util.function.Predicate<java.lang.Class<?>> filter, java.lang.ClassLoader loader)
Returns an iterable of available and filtered providers of given type.- Parameters:
type
- service provider typefilter
- to specify which providers to loadloader
- to be used for providers lookup- Returns:
- An iterable of available and filtered providers of given type
-
getCallerModuleLoader
public static ModuleLoader 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
public static ModuleLoader 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
@Deprecated public static Module getModuleFromCallerModuleLoader(ModuleIdentifier identifier) throws ModuleLoadException
Deprecated.UsegetModuleFromCallerModuleLoader(String)
instead.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:
getCallerModuleLoader()
-
getModuleFromCallerModuleLoader
public static Module getModuleFromCallerModuleLoader(java.lang.String name) 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:
name
- the module name- Returns:
- the module
- Throws:
ModuleLoadException
- if the module could not be loaded- See Also:
getCallerModuleLoader()
-
getCallerModule
public static Module 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
@Deprecated public Module getModule(ModuleIdentifier identifier) throws ModuleLoadException
Deprecated.UsegetModule(String)
instead.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
-
getModule
public Module getModule(java.lang.String name) throws ModuleLoadException
Get the module with the given identifier from the module loader used by this module.- Parameters:
name
- the module name- Returns:
- the module
- Throws:
ModuleLoadException
- if an error occurs
-
loadClassFromBootModuleLoader
@Deprecated public static java.lang.Class<?> loadClassFromBootModuleLoader(ModuleIdentifier moduleIdentifier, java.lang.String className) throws ModuleLoadException, java.lang.ClassNotFoundException
Deprecated.UseloadClassFromBootModuleLoader(String, String)
instead.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 loadedjava.lang.ClassNotFoundException
- if the class could not be loaded- See Also:
getBootModuleLoader()
-
loadClassFromBootModuleLoader
public static java.lang.Class<?> loadClassFromBootModuleLoader(java.lang.String name, java.lang.String className) throws ModuleLoadException, java.lang.ClassNotFoundException
Load a class from a module in the system module loader.- Parameters:
name
- the name 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 loadedjava.lang.ClassNotFoundException
- if the class could not be loaded- See Also:
getBootModuleLoader()
-
loadClassFromCallerModuleLoader
@Deprecated public static java.lang.Class<?> loadClassFromCallerModuleLoader(ModuleIdentifier moduleIdentifier, java.lang.String className) throws ModuleLoadException, java.lang.ClassNotFoundException
Deprecated.UseloadClassFromCallerModuleLoader(String, String)
instead.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 loadedjava.lang.ClassNotFoundException
- if the class could not be loaded- See Also:
getCallerModuleLoader()
-
loadClassFromCallerModuleLoader
public static java.lang.Class<?> loadClassFromCallerModuleLoader(java.lang.String name, java.lang.String className) throws ModuleLoadException, java.lang.ClassNotFoundException
Load a class from a module in the caller's module loader.- Parameters:
name
- the name 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 loadedjava.lang.ClassNotFoundException
- if the class could not be loaded- See Also:
getCallerModuleLoader()
-
getExportedResource
public java.net.URL getExportedResource(java.lang.String name)
Get an exported resource URL.- Parameters:
name
- the resource name- Returns:
- the resource, or
null
if it was not found
-
getExportedResources
public java.util.Enumeration<java.net.URL> getExportedResources(java.lang.String name)
Get all exported resource URLs for a resource name.- Parameters:
name
- the resource name- Returns:
- the resource URLs
-
iterateResources
public java.util.Iterator<Resource> iterateResources(PathFilter filter) throws ModuleLoadException
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
public java.util.Iterator<Resource> globResources(java.lang.String glob) throws ModuleLoadException
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
public java.util.Set<java.lang.String> getImportedPaths() throws ModuleLoadException
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
-
getProperty
public java.lang.String getProperty(java.lang.String name)
Get the property with the given name, ornull
if none was defined.- Parameters:
name
- the property name- Returns:
- the property value
-
getProperty
public java.lang.String getProperty(java.lang.String name, java.lang.String defaultVal)
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
public java.util.List<java.lang.String> getPropertyNames()
Get a copy of the list of property names.- Returns:
- the property names list
-
getVersion
public Version getVersion()
Get the module version.- Returns:
- the module version, or
null
if none was set
-
toString
public java.lang.String toString()
Get the string representation of this module.- Overrides:
toString
in classjava.lang.Object
- Returns:
- the string representation
-
getModuleLogger
public static ModuleLogger 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
public static void setModuleLogger(ModuleLogger logger)
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
public static void registerContentHandlerFactoryModule(Module module)
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
public static void registerURLStreamHandlerFactoryModule(Module module)
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
public static java.lang.String 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
public java.security.PermissionCollection getPermissionCollection()
Get the module's configured permission collection.- Returns:
- the module permission collection
-
-