org.dspace.kernel
Interface ServiceManager


public interface ServiceManager

Allows for non-specific access to the core services. No dependency on the underlying mechanism is exposed.

Author:
Aaron Zeckoski (azeckoski @ gmail.com)

Method Summary
<T> T
getServiceByName(String name, Class<T> type)
          Allows developers to get the desired service singleton by the provided name and type.
<T> List<T>
getServicesByType(Class<T> type)
          Allows developers to get the desired service singleton by the provided type.
 List<String> getServicesNames()
          Get the names of all registered service singletons.
 boolean isServiceExists(String name)
          Lookup to see if a service exists with the given name.
 void pushConfig(Map<String,String> settings)
          Allows new configuration settings to be pushed into the core DSpace configuration.
 void registerService(String name, Object service)
          Allows adding singleton services and providers in at runtime or after the service manager has started up.
<T> T
registerServiceClass(String name, Class<T> type)
          Allows adding singleton services and providers in at runtime or after the service manager has started up.
 void unregisterService(String name)
          Allows a service to be unregistered (which will only work if nothing depends on it).
 

Method Detail

getServicesByType

<T> List<T> getServicesByType(Class<T> type)
Allows developers to get the desired service singleton by the provided type.
This should return all instantiated objects of the type specified (may not all be singletons).

Type Parameters:
T -
Parameters:
type - the type for the requested service (this will typically be the interface class but can be concrete as well)
Returns:
the list of service singletons OR empty list if none is found

getServiceByName

<T> T getServiceByName(String name,
                       Class<T> type)
Allows developers to get the desired service singleton by the provided name and type. Provide null for the name if it is not known, but it is better to ensure it is set.

NOTE: This also allows special access to the underlying service manager objects. If using Spring this allows access to the underlying ApplicationContext object like so:

getServiceByName(ApplicationContext.class.getName(), ApplicationContext.class); If using Guice then the same applies like so: getServiceByName(Injector.class.getName(), Injector.class); It is also possible to register a module and cause Guice to fill in any injected core services (see register method).

Type Parameters:
T -
Parameters:
name - (optional) the unique name for this service. If null then the bean will be returned if there is only one service of this type.
type - the type for the requested service (this will typically be the interface class but can be concrete as well)
Returns:
the service singleton OR null if none is found

isServiceExists

boolean isServiceExists(String name)
Lookup to see if a service exists with the given name.

Parameters:
name - the unique name for this service
Returns:
true if it exists, false otherwise

getServicesNames

List<String> getServicesNames()
Get the names of all registered service singletons. By convention, the name typically matches the fully qualified class name).

Returns:
the list of all current registered services

registerService

void registerService(String name,
                     Object service)
Allows adding singleton services and providers in at runtime or after the service manager has started up. This is primarily useful for registering providers, filters, and plugins with the DSpace core.

NOTE: It is important that you also call unregisterService(String) if you are shutting down the context (webapp, etc.) that registered the service so that the full lifecycle completes correctly.

NOTE: if using Guice it is possible to register a Guice Module as a service, which will not actually register it but will cause anything in the Module to have existing core services injected into it. You can use anything as the name in this case.

Parameters:
name - the name of the service (must be unique)
service - the object to register as a singleton service
Throws:
IllegalArgumentException - if the service cannot be registered

registerServiceClass

<T> T registerServiceClass(String name,
                           Class<T> type)
Allows adding singleton services and providers in at runtime or after the service manager has started up. This is the same as registerService(String, Object) except that it allows the core service manager to startup your service for you instead of you providing a service to the core. In general, it is better if you use your own service manager (like Spring or Guice) to manage your services and simply inherit the core service beans from the DSpace core service manager using the special capabilities of getServiceByName(String, Class).

Parameters:
name - the name of the service (must be unique)
type - the class type of the service (must be in the current classloader)
Throws:
IllegalArgumentException - if the service cannot be registered because the name is taken or type is invalid or other
See Also:
getServiceByName(String, Class)

unregisterService

void unregisterService(String name)
Allows a service to be unregistered (which will only work if nothing depends on it). This is primarily used for providers, filters, plugins, etc. which were registered but are no longer available because the context they are running in is shutting down or restarting.
WARNING: This should not be used to attempt to unregister core services as that will fail.

Parameters:
name - the name of the service (must be unique)
Throws:
IllegalArgumentException - if the bean cannot be unregistered

pushConfig

void pushConfig(Map<String,String> settings)
Allows new configuration settings to be pushed into the core DSpace configuration. These will cause a settings refresh action to be called for all services which are listening and will cause any bean properties to be pushed into existing beans.

Parameters:
settings - a map of keys (names) and values


Copyright © Monday, September 1, 2008-2010 The DSpace Foundation. All Rights Reserved.