import org.springframework.context.support.GenericApplicationContext;
import org.wamblee.system.AbstractSubSystem;
import org.wamblee.system.CompositeSystem;
+import org.wamblee.system.ProvidedServiceDescriptor;
+import org.wamblee.system.RequiredServiceDescriptor;
import org.wamblee.system.Service;
import org.wamblee.system.ServiceDescriptor;
import org.wamblee.system.ServiceRegistry;
+import org.wamblee.system.SystemAssembler;
import org.wamblee.system.SystemAssemblyException;
/**
static ThreadLocal<ServiceRegistry> REGISTRY = new ThreadLocal<ServiceRegistry>();
private String[] _configFiles;
- private Map<String, ServiceDescriptor> _provided;
- private Map<ServiceDescriptor, String> _required;
+ private Map<String, ProvidedServiceDescriptor> _provided;
+ private Map<RequiredServiceDescriptor, String> _required;
/**
* Parent application context containing required services.
*/
* service.
*/
public SpringSystem(String aName, ServiceRegistry aRegistry, String[] aConfigFiles,
- Map<String, ServiceDescriptor> aProvided,
- Map<ServiceDescriptor, String> aRequired) {
+ Map<String, ProvidedServiceDescriptor> aProvided,
+ Map<RequiredServiceDescriptor, String> aRequired) {
super(aName, aRegistry, aProvided.values().toArray(new ServiceDescriptor[0]),
aRequired.keySet().toArray(new ServiceDescriptor[0]));
_configFiles = aConfigFiles;
for (Service svc: aRequiredServices) {
String id = svc.getId();
- ServiceDescriptor descriptor = svc.getDescriptor();
- String beanName = _required.get(descriptor);
- ConstructorArgumentValues cargs = new ConstructorArgumentValues();
- cargs.addGenericArgumentValue(id);
- BeanDefinition definition = new RootBeanDefinition(ProvidedServiceBean.class, cargs,
- new MutablePropertyValues());
- _parentContext.registerBeanDefinition(beanName, definition);
+ ProvidedServiceDescriptor descriptor = svc.getDescriptor();
+ RequiredServiceDescriptor[] requiredServices = SystemAssembler.filterRequiredServices(descriptor,
+ _required.keySet());
+ for (RequiredServiceDescriptor required: requiredServices) {
+ String beanName = _required.get(required);
+ ConstructorArgumentValues cargs = new ConstructorArgumentValues();
+ cargs.addGenericArgumentValue(id);
+ BeanDefinition definition = new RootBeanDefinition(ProvidedServiceBean.class, cargs,
+ new MutablePropertyValues());
+ _parentContext.registerBeanDefinition(beanName, definition);
+ }
}
_parentContext.refresh();
}