import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
private static final Log LOG = LogFactory.getLog(AbstractSubSystem.class);
private String _name;
+ private ServiceRegistry _registry;
private List<ServiceDescriptor> _provided;
private List<ServiceDescriptor> _required;
private Map<ServiceDescriptor, Service> _running;
* @param aRequired
* Required services.
*/
- protected AbstractSubSystem(String aName, ServiceDescriptor[] aProvided,
+ protected AbstractSubSystem(String aName, ServiceRegistry aRegistry, ServiceDescriptor[] aProvided,
ServiceDescriptor[] aRequired) {
_name = aName;
+ _registry = aRegistry;
_provided = new ArrayList<ServiceDescriptor>();
_provided.addAll(Arrays.asList(aProvided));
_required = new ArrayList<ServiceDescriptor>();
public final String getName() {
return _name;
}
+
+ public ServiceRegistry getRegistry() {
+ return _registry;
+ }
@Override
- public final ServiceDescriptor[] getProvidedServices() {
- return _provided.toArray(new ServiceDescriptor[0]);
+ public final ProvidedServiceDescriptor[] getProvidedServices() {
+ return _provided.toArray(new ProvidedServiceDescriptor[0]);
}
@Override
- public final ServiceDescriptor[] getRequiredServices() {
- return _required.toArray(new ServiceDescriptor[0]);
+ public final RequiredServiceDescriptor[] getRequiredServices() {
+ return _required.toArray(new RequiredServiceDescriptor[0]);
}
@Override
- public final Service[] start(String aContext, ServiceRegistry aRegistry,
+ public final Service[] start(String aContext,
Service[] aRequiredServices) {
LOG.info("Initializing '" + aContext + "." + _name + "' with "
+ Arrays.asList(aRequiredServices));
- doStart(aContext + "." + getName(), aRegistry, aRequiredServices);
+ doStart(aContext + "." + getName(), aRequiredServices);
return _running.values().toArray(new Service[0]);
}
/**
* Must be implemented for initializing the subsystem. The implementation
* must call {@link #addService(Service)} for each service that is started.
- *
- * @param aRegistry Service registry.
+ *
* @param aRequiredServices
* Services that are already running from other subsystems that
* may be used.
*/
protected abstract void doStart(String aContext,
- ServiceRegistry aRegistry,
Service[] aRequiredServices);
/**
* Service.
*/
protected final void addService(String aContext,
- ServiceRegistry aRegistry,
- ServiceDescriptor aDescriptor, Object aService) {
+ ProvidedServiceDescriptor aDescriptor, Object aService) {
LOG.info(aContext + ": service '" + aService + "' started.");
- Service svc = aRegistry.register(aDescriptor, aService);
+ Service svc = getRegistry().register(aDescriptor, aService);
_running.put(svc.getDescriptor(), svc);
}
}
@Override
- public void stop(String aContext, ServiceRegistry aRegistry) {
- doStop(aContext);
+ public void stop() {
+ doStop();
for (Service svc: _running.values()) {
- aRegistry.remove(svc);
+ getRegistry().remove(svc);
}
}
- protected abstract void doStop(String aContext);
+ protected abstract void doStop();
@Override
public String toString() {