X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fspring%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fspring%2FSpringSystem.java;h=ba0ccf8833b673055fb70def5decf4a881429b53;hb=b6364aebdb15bb0648e8db2030d8ad793e209af6;hp=5de2a948fadbaca991425a4f9d18cb1945fdcf20;hpb=16504cb35c59542f7817abfe3c852e9fedd870a3;p=utils diff --git a/system/spring/src/main/java/org/wamblee/system/spring/SpringSystem.java b/system/spring/src/main/java/org/wamblee/system/spring/SpringSystem.java index 5de2a948..ba0ccf88 100644 --- a/system/spring/src/main/java/org/wamblee/system/spring/SpringSystem.java +++ b/system/spring/src/main/java/org/wamblee/system/spring/SpringSystem.java @@ -12,9 +12,12 @@ import org.springframework.context.support.ClassPathXmlApplicationContext; 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; /** @@ -28,8 +31,8 @@ public class SpringSystem extends AbstractSubSystem { static ThreadLocal REGISTRY = new ThreadLocal(); private String[] _configFiles; - private Map _provided; - private Map _required; + private Map _provided; + private Map _required; /** * Parent application context containing required services. */ @@ -57,8 +60,8 @@ public class SpringSystem extends AbstractSubSystem { * service. */ public SpringSystem(String aName, ServiceRegistry aRegistry, String[] aConfigFiles, - Map aProvided, - Map aRequired) { + Map aProvided, + Map aRequired) { super(aName, aRegistry, aProvided.values().toArray(new ServiceDescriptor[0]), aRequired.keySet().toArray(new ServiceDescriptor[0])); _configFiles = aConfigFiles; @@ -116,13 +119,17 @@ public class SpringSystem extends AbstractSubSystem { 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(); }