Class AbstractModulesRegistryImpl
java.lang.Object
com.sun.enterprise.module.common_impl.AbstractModulesRegistryImpl
- All Implemented Interfaces:
ModuleChangeListener, ModulesRegistry
- Direct Known Subclasses:
ModulesRegistryImpl
The Modules Registry maintains the registry of all available module.
TODO: concurrency bug in the acess of the repositories field.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate Map<ServiceLocator, String> (package private) Map<Module, Map<ServiceLocator, List<ActiveDescriptor>>> protected final ConcurrentMap<ModuleId, Module> protected final ModulesRegistryModulesRegistrycan form a tree structure by using this pointer.Service provider class names and which modules they are in.protected final Map<Integer, Repository> private final ConcurrentMap<Class<?>, CopyOnWriteArrayList<?>> -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voidAdd a new module to this registry.add(ModuleDefinition info) Registers a new DefaultModuleDefinition in this registry.add(ModuleDefinition info, boolean resolve) Registers a new DefaultModuleDefinition in this registry.voidaddRepository(Repository repository) Add a newRepositoryto this registry.voidaddRepository(Repository repository, int weight) Add a newRepositoryto this registry.voidModules can notify their registry that they have changed (classes, resources,etc...).Creates the defaultServiceLocatorfrom all the modules in this registry Calling this method has the same effect of calling}invalid @link
{@link #createServiceLocator("default")createServiceLocator(String name) Creates aServiceLocatorfrom all the modules in this registry Cal;ling this method has the same effect of callingModulesRegistry.newServiceLocator()followed by}.invalid @link
{@link #populateServiceLocator(String, org.glassfish.hk2.api.ServiceLocator, java.util.ListcreateServiceLocator(ServiceLocator parent, String name, List<PopulatorPostProcessor> postProcessors) Creates aServiceLocatorwith the provided parent.voiddumpState(PrintStream writer) protected Set<ServiceLocator> Returns the list of shared Modules registered in this instance.getModules(String moduleName) Returns the list of shared Modules registered in this instance whose name matches the given namegetModulesProvider(Class serviceClass) Returns a collection of Module containing at least one implementation of the passed service interface class.getProvidersClass(Class<T> serviceClass) getProvidingModule(String providerClassName) Gets theModulethat provides the provider of the given name.getRepository(String name) Get a repository from the list of attached repositories<T> List<T> getRunningServices(Class<T> serviceClass) Returns all running services implementation of the passed service interfaceprotected voidinitializeServiceLocator(ServiceLocator serviceLocator) protected ModuleloadFromRepository(String name, String version) makeModuleFor(String packageName) Find and return a loaded Module that has the package name in its list of exported interfaces.makeModuleFor(String name, String version) Returns theModuleinstance giving a name and version constraints.makeModuleFor(String name, String version, boolean resolve) Returns theModuleinstance giving a name and version constraints.protected abstract ModulenewModule(ModuleDefinition moduleDef) Factory method for creating new instances of Module.Creates an uninitializedServiceLocatornewServiceLocator(ServiceLocator parent) Create a new ServiceLocator optionally providing a parent Servicesprotected abstract List<ActiveDescriptor> parseInhabitants(Module module, String name, ServiceLocator serviceLocator, List<PopulatorPostProcessor> postProcessors) voidpopulateConfig(ServiceLocator serviceLocator) voidpopulateServiceLocator(String name, ServiceLocator serviceLocator, List<PopulatorPostProcessor> postProcessors) Creates aServiceLocatorfrom all the modules in this registryvoidPrint a Registry dump to the logger<T> voidregisterRunningService(Class<T> serviceClass, T provider) Registers a running service, this is useful when other components need to have access to a provider of a service without having to create a new instance and initialize it.voidRemoves a module from the registry.voidremoveRepository(String name) Remove a repository from the list of attached repositories to this instances.private void<T> booleanunregisterRunningService(Class<T> serviceClass, T provider) Removes a running service, this is useful when a service instance is no longer available as a provider of a service.Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface ModulesRegistry
createChild, detachAll, find, getModulesClassLoader, getModulesClassLoader, getParentClassLoader, register, setParentClassLoader, shutdown, unregister
-
Field Details
-
parent
ModulesRegistrycan form a tree structure by using this pointer. It works in a way similar to the classloader tree. Modules defined in the parent are visible to children. -
modules
-
repositories
-
runningServices
-
providers
-
habitats
-
moduleDescriptors
Map<Module, Map<ServiceLocator, List<ActiveDescriptor>>> moduleDescriptors
-
-
Constructor Details
-
AbstractModulesRegistryImpl
-
-
Method Details
-
newServiceLocator
Creates an uninitializedServiceLocator- Specified by:
newServiceLocatorin interfaceModulesRegistry- Throws:
MultiException
-
newServiceLocator
Create a new ServiceLocator optionally providing a parent Services- Specified by:
newServiceLocatorin interfaceModulesRegistry- Throws:
MultiException
-
initializeServiceLocator
- Throws:
MultiException
-
populateServiceLocator
public void populateServiceLocator(String name, ServiceLocator serviceLocator, List<PopulatorPostProcessor> postProcessors) throws MultiException Creates aServiceLocatorfrom all the modules in this registry- Specified by:
populateServiceLocatorin interfaceModulesRegistry- Parameters:
name- Determines which descriptors are loaded.serviceLocator- Habitat to initialize, null if it should be createdpostProcessors-- Throws:
MultiException
-
populateConfig
- Specified by:
populateConfigin interfaceModulesRegistry
-
createServiceLocator
public ServiceLocator createServiceLocator(ServiceLocator parent, String name, List<PopulatorPostProcessor> postProcessors) throws MultiException Description copied from interface:ModulesRegistryCreates aServiceLocatorwith the provided parent.- Specified by:
createServiceLocatorin interfaceModulesRegistry- Parameters:
parent-name-postProcessors-- Returns:
- Throws:
MultiException
-
createServiceLocator
Description copied from interface:ModulesRegistryCreates aServiceLocatorfrom all the modules in this registry Cal;ling this method has the same effect of callingModulesRegistry.newServiceLocator()followed by}.invalid @link
{@link #populateServiceLocator(String, org.glassfish.hk2.api.ServiceLocator, java.util.List- Specified by:
createServiceLocatorin interfaceModulesRegistry- Parameters:
name- Determines which inhabitants descriptors are loaded. (so that different parallel habitats can be created over the same modules registry.)- Throws:
MultiException
-
createServiceLocator
Description copied from interface:ModulesRegistryCreates the defaultServiceLocatorfrom all the modules in this registry Calling this method has the same effect of calling}invalid @link
{@link #createServiceLocator("default")- Specified by:
createServiceLocatorin interfaceModulesRegistry- Throws:
MultiException
-
parseInhabitants
protected abstract List<ActiveDescriptor> parseInhabitants(Module module, String name, ServiceLocator serviceLocator, List<PopulatorPostProcessor> postProcessors) throws IOException, BootException - Throws:
IOExceptionBootException
-
addRepository
Add a newRepositoryto this registry. From now on the repository will be used to procure requested module not yet registered in this registry instance. Repository can be searched in a particular order (to accomodate performance requirements like looking at local repositories first), a search order (1 to 100) can be specified when adding a repository to the registry (1 is highest priority).- Specified by:
addRepositoryin interfaceModulesRegistry- Parameters:
repository- new repository to attach to this registryweight- int value from 1 to 100 to specify the search order
-
addRepository
Add a newRepositoryto this registry. From now on the repository will be used to procure requested nodule not registered in this instance.- Specified by:
addRepositoryin interfaceModulesRegistry- Parameters:
repository- new repository to attach to this registry
-
removeRepository
Remove a repository from the list of attached repositories to this instances. After this call, theRepositoryname will not be used to procure missing modules any longer- Specified by:
removeRepositoryin interfaceModulesRegistry- Parameters:
name- name of the repository to remove
-
getRepository
Get a repository from the list of attached repositories- Specified by:
getRepositoryin interfaceModulesRegistry- Parameters:
name- name of the repository to return- Returns:
- the repository or null if not found
-
makeModuleFor
Returns theModuleinstance giving a name and version constraints.- Specified by:
makeModuleForin interfaceModulesRegistry- Parameters:
name- the module nameversion- the module version.- Returns:
- the module instance or null if none can be found
- Throws:
ResolveError- if the module dependencies cannot be resolved
-
makeModuleFor
Description copied from interface:ModulesRegistryReturns theModuleinstance giving a name and version constraints.- Specified by:
makeModuleForin interfaceModulesRegistry- Parameters:
name- the module nameversion- the module version. Caller should specify a correct version.resolve- should the module be resolved or not- Returns:
- the module instance or null if none can be found
- Throws:
ResolveError- if the module dependencies cannot be resolved
-
makeModuleFor
Find and return a loaded Module that has the package name in its list of exported interfaces.- Specified by:
makeModuleForin interfaceModulesRegistry- Parameters:
packageName- the requested implementation package name.- Returns:
- the
Moduleinstance implementing the package name or null if not found. - Throws:
ResolveError- if the module dependencies cannot be resolved
-
loadFromRepository
-
newModule
Factory method for creating new instances of Module.- Parameters:
moduleDef- module definition of the new module to be created- Returns:
- a new Module instance
-
add
Add a new module to this registry. Once added, the module will be available through one of the getServiceImplementor methods.- Parameters:
newModule- the new module
-
removeShutdownLocators
private void removeShutdownLocators() -
remove
Removes a module from the registry. The module will not be accessible from this registry after this method returns. -
getAllServiceLocators
-
getModules
Returns the list of shared Modules registered in this instance.The returned list will not include the modules defined in the ancestor
AbstractModulesRegistryImpls.- Specified by:
getModulesin interfaceModulesRegistry- Returns:
- an umodifiable list of loaded modules
-
getModules
Description copied from interface:ModulesRegistryReturns the list of shared Modules registered in this instance whose name matches the given nameThe returned list will not include the modules defined in the ancestor
ModulesRegistrys.- Specified by:
getModulesin interfaceModulesRegistry- Returns:
- an umodifiable list of loaded modules having names that match the given name
-
changed
Modules can notify their registry that they have changed (classes, resources,etc...). Registries are requested to take appropriate action to make the new module available.- Specified by:
changedin interfaceModuleChangeListener
-
add
Registers a new DefaultModuleDefinition in this registry. Using this module definition, the registry will be capable of created shared and privateModuleinstances.- Specified by:
addin interfaceModulesRegistry- Throws:
ResolveError
-
add
Description copied from interface:ModulesRegistryRegisters a new DefaultModuleDefinition in this registry. Using this module definition, the registry will be capable of created shared and privateModuleinstances.- Specified by:
addin interfaceModulesRegistry- Parameters:
info- ModuleDefinition representing the new module contentresolve- should the new module be resolved or not- Throws:
ResolveError
-
print
Print a Registry dump to the logger- Specified by:
printin interfaceModulesRegistry- Parameters:
logger- the logger to dump on
-
getProvidersClass
- Specified by:
getProvidersClassin interfaceModulesRegistry
-
getModulesProvider
Returns a collection of Module containing at least one implementation of the passed service interface class.- Specified by:
getModulesProviderin interfaceModulesRegistry- Parameters:
serviceClass- the service interface class- Returns:
- a collection of module
-
registerRunningService
Registers a running service, this is useful when other components need to have access to a provider of a service without having to create a new instance and initialize it.- Specified by:
registerRunningServicein interfaceModulesRegistry- Parameters:
serviceClass- the service interfaceprovider- the provider of that service.
-
unregisterRunningService
Removes a running service, this is useful when a service instance is no longer available as a provider of a service.- Specified by:
unregisterRunningServicein interfaceModulesRegistry
-
getRunningServices
Returns all running services implementation of the passed service interface- Specified by:
getRunningServicesin interfaceModulesRegistry- Parameters:
serviceClass- the service interface- Returns:
- the list of providers of that service.
-
getProvidingModule
Description copied from interface:ModulesRegistryGets theModulethat provides the provider of the given name.- Specified by:
getProvidingModulein interfaceModulesRegistry
-
dumpState
- Specified by:
dumpStatein interfaceModulesRegistry
-