From 8f71d2976eee4419a62bde486b8f21931654c0b0 Mon Sep 17 00:00:00 2001 From: Erik Brakkee Date: Mon, 12 May 2008 22:50:00 +0000 Subject: [PATCH] Started work on componentizing the current user management. Also fixed several bugs in SpringComponent. --- .../wamblee/system/spring/PropertySetter.java | 13 ++++++--- .../system/spring/SpringComponent.java | 13 ++++----- .../wamblee/system/spring/HelloService.java | 3 ++- .../system/spring/SpringComponentTest.java | 27 +++++++++++++++---- 4 files changed, 38 insertions(+), 18 deletions(-) diff --git a/system/spring/src/main/java/org/wamblee/system/spring/PropertySetter.java b/system/spring/src/main/java/org/wamblee/system/spring/PropertySetter.java index 00b9f307..a53dab51 100644 --- a/system/spring/src/main/java/org/wamblee/system/spring/PropertySetter.java +++ b/system/spring/src/main/java/org/wamblee/system/spring/PropertySetter.java @@ -34,13 +34,18 @@ class PropertySetter extends PropertyPlaceholderConfigurer { * @param aProps Properties. */ public PropertySetter(Properties aProps) { - StringBuffer buf = new StringBuffer(); + String propFile = createPropertyFile(aProps); + setLocation(new StringResource(propFile)); + } + + private static String createPropertyFile(Properties aProps) { + StringBuffer buf = new StringBuffer(); for (Object key: aProps.keySet()) { buf.append(key); buf.append("="); buf.append(aProps.get(key)); buf.append("\n"); - } - setLocation(new StringResource(buf.toString())); - } + } + return buf.toString(); + } } diff --git a/system/spring/src/main/java/org/wamblee/system/spring/SpringComponent.java b/system/spring/src/main/java/org/wamblee/system/spring/SpringComponent.java index aea9b15a..657d11e4 100644 --- a/system/spring/src/main/java/org/wamblee/system/spring/SpringComponent.java +++ b/system/spring/src/main/java/org/wamblee/system/spring/SpringComponent.java @@ -94,10 +94,6 @@ public class SpringComponent extends AbstractComponent { setProperty((String) key, aProperties.getProperty((String) key)); } } - - public Scope start() { - return super.start(new DefaultScope(new ProvidedInterface[0])); - } @Override protected Scope doStart(Scope aExternalScope) { @@ -113,14 +109,16 @@ public class SpringComponent extends AbstractComponent { registerRequiredServices(parentContext); parentContext.refresh(); - + + System.out.println("Parent context " + parentContext); + AbstractApplicationContext context = parseConfigFiles(parentContext); context .addBeanFactoryPostProcessor(new PropertySetter(_properties)); context.refresh(); - exposeProvidedServices(context, scope); + exposeProvidedServices(context, aExternalScope); scope.put(CONTEXT_KEY, context); return scope; @@ -144,7 +142,6 @@ public class SpringComponent extends AbstractComponent { } addInterface(_provided.get(name), svc, aScope); System.out.println("addService " + _provided.get(name) + " " + svc); - aScope.publishInterface(_provided.get(name), svc); } } @@ -152,7 +149,7 @@ public class SpringComponent extends AbstractComponent { // Parse spring config files return new ClassPathXmlApplicationContext((String[]) _configFiles, - aParentContext); + false, aParentContext); } private void registerRequiredServices(GenericApplicationContext aParentContext) { diff --git a/system/spring/src/test/java/org/wamblee/system/spring/HelloService.java b/system/spring/src/test/java/org/wamblee/system/spring/HelloService.java index 622b420d..cfa5bae6 100644 --- a/system/spring/src/test/java/org/wamblee/system/spring/HelloService.java +++ b/system/spring/src/test/java/org/wamblee/system/spring/HelloService.java @@ -19,7 +19,8 @@ public class HelloService { private String _msg; - public HelloService(String aMsg) { + public HelloService(String aMsg) { + SpringComponentTest.EVENT_TRACKER.eventOccurred(aMsg); _msg = aMsg; } diff --git a/system/spring/src/test/java/org/wamblee/system/spring/SpringComponentTest.java b/system/spring/src/test/java/org/wamblee/system/spring/SpringComponentTest.java index c63916f5..170297fa 100644 --- a/system/spring/src/test/java/org/wamblee/system/spring/SpringComponentTest.java +++ b/system/spring/src/test/java/org/wamblee/system/spring/SpringComponentTest.java @@ -30,6 +30,7 @@ import org.wamblee.system.core.ProvidedInterface; import org.wamblee.system.core.RequiredInterface; import org.wamblee.system.core.Scope; import org.wamblee.system.core.SystemAssemblyException; +import org.wamblee.test.EventTracker; public class SpringComponentTest extends TestCase { @@ -37,10 +38,16 @@ public class SpringComponentTest extends TestCase { private static final String HELLO_SERVICE_SPRING_WITH_REQS_XML = "test.org.wamblee.system.springWithRequirements.xml"; private static final String HELLO_SERVICE_SPRING_WITH_PROPERTIES_XML = "test.org.wamblee.system.springWithProperties.xml"; private static final String PROPERTY_FILE = "test.org.wamblee.system.spring.properties"; + + public static EventTracker EVENT_TRACKER; + + private Scope _externalScope; @Override protected void setUp() throws Exception { super.setUp(); + EVENT_TRACKER = new EventTracker(); + _externalScope = new DefaultScope(new ProvidedInterface[0]); } public void testBlackboxSystem() { @@ -48,8 +55,9 @@ public class SpringComponentTest extends TestCase { new String[] { HELLO_SERVICE_SPRING_XML }, new HashMap(), new HashMap()); - Scope runtime = system.start(); - assertEquals(0, runtime.getProvidedInterfaces().length); + + Scope runtime = system.start(_externalScope); + assertEquals(0, _externalScope.getProvidedInterfaces().length); system.stop(runtime); } @@ -62,11 +70,17 @@ public class SpringComponentTest extends TestCase { SpringComponent system = new SpringComponent("system", new String[] { HELLO_SERVICE_SPRING_XML }, provided, new HashMap()); - Scope runtime = system.start(); + Scope runtime = system.start(_externalScope); ProvidedInterface[] services = runtime.getProvidedInterfaces(); + assertEquals(1, services.length); Object service = runtime.getInterfaceImplementation(services[0], Object.class); assertTrue(service instanceof HelloService); + + // BUG; Provided services should be made available in the external scope. + Object service2 = _externalScope.getInterfaceImplementation(provided.get("helloService"), Object.class); + assertSame(service, service2); + assertEquals("Hello world!", ((HelloService) service).say()); system.stop(runtime); } @@ -82,7 +96,10 @@ public class SpringComponentTest extends TestCase { props.load(new ClassPathResource(PROPERTY_FILE).getInputStream()); system.addProperties(props); - Scope scope = system.start(); + Scope scope = system.start(_externalScope); + // BUG: Hello service was constructed multiple times. Once with the unprocessed property + // and another time with the processed property. + assertEquals(1, EVENT_TRACKER.getEventCount()); ProvidedInterface[] services = scope.getProvidedInterfaces(); assertEquals("Property Value", scope.getInterfaceImplementation(services[0], HelloService.class).say()); } @@ -93,7 +110,7 @@ public class SpringComponentTest extends TestCase { new String[] { HELLO_SERVICE_SPRING_WITH_REQS_XML }, new HashMap(), new HashMap()); - system.start(); + system.start(_externalScope); } catch (SystemAssemblyException e) { // e.printStackTrace(); return; -- 2.31.1