X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fspring%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fspring%2FSpringSystem.java;h=7a8b513ee7b318129f1b643c89a9096d3d7e30fa;hb=6f277575685808a5c5a76555dd3e839dc5255031;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..7a8b513e 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 @@ -10,17 +10,22 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.context.support.GenericApplicationContext; -import org.wamblee.system.AbstractSubSystem; +import org.wamblee.system.AbstractComponent; import org.wamblee.system.CompositeSystem; +import org.wamblee.system.ProvidedInterfaceDescriptor; +import org.wamblee.system.RequiredInterfaceDescriptor; import org.wamblee.system.Service; -import org.wamblee.system.ServiceDescriptor; +import org.wamblee.system.InterfaceDescriptor; import org.wamblee.system.ServiceRegistry; +import org.wamblee.system.SystemAssembler; import org.wamblee.system.SystemAssemblyException; /** * Represents a system configured based on spring. + * + * @author Erik Brakkee */ -public class SpringSystem extends AbstractSubSystem { +public class SpringSystem extends AbstractComponent { /** * Singleton access to the service registry. Required while starting up. @@ -28,8 +33,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,10 +62,10 @@ public class SpringSystem extends AbstractSubSystem { * service. */ public SpringSystem(String aName, ServiceRegistry aRegistry, String[] aConfigFiles, - Map aProvided, - Map aRequired) { - super(aName, aRegistry, aProvided.values().toArray(new ServiceDescriptor[0]), - aRequired.keySet().toArray(new ServiceDescriptor[0])); + Map aProvided, + Map aRequired) { + super(aName, aRegistry, aProvided.values().toArray(new InterfaceDescriptor[0]), + aRequired.keySet().toArray(new InterfaceDescriptor[0])); _configFiles = aConfigFiles; _provided = aProvided; _required = aRequired; @@ -116,13 +121,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); + ProvidedInterfaceDescriptor descriptor = svc.getDescriptor(); + RequiredInterfaceDescriptor[] requiredServices = SystemAssembler.filterRequiredServices(descriptor, + _required.keySet()); + for (RequiredInterfaceDescriptor 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(); }