Module org.glassfish.hk2.core
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.
- Author:
- Jerome Dochez, Sanjeeb.Sahoo@Sun.COM
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final ConcurrentMap<ModuleId,HK2Module> 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> -
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...).org.glassfish.hk2.api.ServiceLocatorCreates the defaultServiceLocatorfrom all the modules in this registry Calling this method has the same effect of calling {@link #createServiceLocator("default")}org.glassfish.hk2.api.ServiceLocatorcreateServiceLocator(String name) Creates aServiceLocatorfrom all the modules in this registry Cal;ling this method has the same effect of callingModulesRegistry.newServiceLocator()followed by {@link #populateServiceLocator(String, org.glassfish.hk2.api.ServiceLocator, java.util.List}.org.glassfish.hk2.api.ServiceLocatorcreateServiceLocator(org.glassfish.hk2.api.ServiceLocator parent, String name, List<org.glassfish.hk2.api.PopulatorPostProcessor> postProcessors) Creates aServiceLocatorwith the provided parent.voiddumpState(PrintStream writer) protected Set<org.glassfish.hk2.api.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 HK2Module containing at least one implementation of the passed service interface class.getProvidersClass(Class<T> serviceClass) getProvidingModule(String providerClassName) Gets theHK2Modulethat 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(org.glassfish.hk2.api.ServiceLocator serviceLocator) protected HK2ModuleloadFromRepository(String name, String version) makeModuleFor(String packageName) Find and return a loaded HK2Module that has the package name in its list of exported interfaces.makeModuleFor(String name, String version) Returns theHK2Moduleinstance giving a name and version constraints.makeModuleFor(String name, String version, boolean resolve) Returns theHK2Moduleinstance giving a name and version constraints.protected abstract HK2ModulenewModule(ModuleDefinition moduleDef) Factory method for creating new instances of HK2Module.org.glassfish.hk2.api.ServiceLocatorCreates an uninitializedServiceLocatororg.glassfish.hk2.api.ServiceLocatornewServiceLocator(org.glassfish.hk2.api.ServiceLocator parent) Create a new ServiceLocator optionally providing a parent Servicesprotected abstract List<org.glassfish.hk2.api.ActiveDescriptor>parseInhabitants(HK2Module module, String name, org.glassfish.hk2.api.ServiceLocator serviceLocator, List<org.glassfish.hk2.api.PopulatorPostProcessor> postProcessors) voidpopulateConfig(org.glassfish.hk2.api.ServiceLocator serviceLocator) voidpopulateServiceLocator(String name, org.glassfish.hk2.api.ServiceLocator serviceLocator, List<org.glassfish.hk2.api.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.<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 java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface com.sun.enterprise.module.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
-
providers
Service provider class names and which modules they are in.This is used for the classloader punch-in hack — to work nicely with classic service loader implementation, we need to be able to allow any modules to see these classes.
-
-
Constructor Details
-
AbstractModulesRegistryImpl
-
-
Method Details
-
newServiceLocator
public org.glassfish.hk2.api.ServiceLocator newServiceLocator() throws org.glassfish.hk2.api.MultiExceptionCreates an uninitializedServiceLocator- Specified by:
newServiceLocatorin interfaceModulesRegistry- Throws:
org.glassfish.hk2.api.MultiException
-
newServiceLocator
public org.glassfish.hk2.api.ServiceLocator newServiceLocator(org.glassfish.hk2.api.ServiceLocator parent) throws org.glassfish.hk2.api.MultiException Create a new ServiceLocator optionally providing a parent Services- Specified by:
newServiceLocatorin interfaceModulesRegistry- Throws:
org.glassfish.hk2.api.MultiException
-
initializeServiceLocator
protected void initializeServiceLocator(org.glassfish.hk2.api.ServiceLocator serviceLocator) throws org.glassfish.hk2.api.MultiException - Throws:
org.glassfish.hk2.api.MultiException
-
populateServiceLocator
public void populateServiceLocator(String name, org.glassfish.hk2.api.ServiceLocator serviceLocator, List<org.glassfish.hk2.api.PopulatorPostProcessor> postProcessors) throws org.glassfish.hk2.api.MultiException Creates aServiceLocatorfrom all the modules in this registry- Specified by:
populateServiceLocatorin interfaceModulesRegistry- Parameters:
name- Determines which descriptors are loaded.postProcessors-serviceLocator- Habitat to initialize, null if it should be created- Throws:
org.glassfish.hk2.api.MultiException
-
populateConfig
public void populateConfig(org.glassfish.hk2.api.ServiceLocator serviceLocator) - Specified by:
populateConfigin interfaceModulesRegistry
-
createServiceLocator
public org.glassfish.hk2.api.ServiceLocator createServiceLocator(org.glassfish.hk2.api.ServiceLocator parent, String name, List<org.glassfish.hk2.api.PopulatorPostProcessor> postProcessors) throws org.glassfish.hk2.api.MultiException Description copied from interface:ModulesRegistryCreates aServiceLocatorwith the provided parent.- Specified by:
createServiceLocatorin interfaceModulesRegistry- Returns:
- Throws:
org.glassfish.hk2.api.MultiException
-
createServiceLocator
public org.glassfish.hk2.api.ServiceLocator createServiceLocator(String name) throws org.glassfish.hk2.api.MultiException 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 {@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:
org.glassfish.hk2.api.MultiException
-
createServiceLocator
public org.glassfish.hk2.api.ServiceLocator createServiceLocator() throws org.glassfish.hk2.api.MultiExceptionDescription copied from interface:ModulesRegistryCreates the defaultServiceLocatorfrom all the modules in this registry Calling this method has the same effect of calling {@link #createServiceLocator("default")}- Specified by:
createServiceLocatorin interfaceModulesRegistry- Throws:
org.glassfish.hk2.api.MultiException
-
parseInhabitants
protected abstract List<org.glassfish.hk2.api.ActiveDescriptor> parseInhabitants(HK2Module module, String name, org.glassfish.hk2.api.ServiceLocator serviceLocator, List<org.glassfish.hk2.api.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 theHK2Moduleinstance 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 theHK2Moduleinstance 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 HK2Module that has the package name in its list of exported interfaces.- Specified by:
makeModuleForin interfaceModulesRegistry- Parameters:
packageName- the requested implementation package name.- Returns:
- the
HK2Moduleinstance 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 HK2Module.- Parameters:
moduleDef- module definition of the new module to be created- Returns:
- a new HK2Module 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
-
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 privateHK2Moduleinstances.- 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 privateHK2Moduleinstances.- 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 HK2Module 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 theHK2Modulethat provides the provider of the given name.- Specified by:
getProvidingModulein interfaceModulesRegistry
-
dumpState
- Specified by:
dumpStatein interfaceModulesRegistry
-