You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jb...@apache.org on 2007/02/18 01:12:34 UTC

svn commit: r508831 [1/2] - in /incubator/tuscany/java/sca: kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/ kernel/core/src/main/java/org/apache/tuscany/core/builder/ kernel/core/src/main/java/org/apache/tuscany/core/component/ kernel/core...

Author: jboynes
Date: Sat Feb 17 16:12:31 2007
New Revision: 508831

URL: http://svn.apache.org/viewvc?view=rev&rev=508831
Log:
refactor DeploymentContext to remove path names
fix ComponentManager to handle sparse trees of components by removing recurisve start/stop
defer registration with ComponentManager until all components are built
start all built components rather than relying on recursion by ComponentManager
remove unneeded system, root and runtime components (just use URIs)
separate component start() from publication of event
defer eager init until all component containers have been started

Removed:
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultRuntime.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeLifecycleTestCase.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/bootstrap/RuntimeComponent.java
Modified:
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentManagerImpl.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/AbstractDeploymentContext.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/AbstractCompositeComponent.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeComponentTypeLoader.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/loader/SystemCompositeComponentTypeLoader.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/IncludeLoader.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ServiceLoader.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/deployment/XMLChangeSetHandler.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryNoBindingsTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/ComponentManagerImplTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeBuilderTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeComponentImplTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderNoBindingTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderNoReferenceTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderRefTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/IncludeLoaderTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ReferenceLoaderTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ServiceLoaderReferenceTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ServiceLoaderTestCase.java
    incubator/tuscany/java/sca/kernel/host-api/src/main/java/org/apache/tuscany/host/RuntimeInfo.java
    incubator/tuscany/java/sca/kernel/host-api/src/main/java/org/apache/tuscany/host/runtime/TuscanyRuntime.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/QualifiedName.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/bootstrap/ComponentNames.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/deployer/Deployer.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/deployer/DeploymentContext.java
    incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/QualifiedNameTestCase.java
    incubator/tuscany/java/sca/runtime/itest/plugin/src/main/java/org/apache/tuscany/sca/plugin/itest/MavenEmbeddedRuntime.java
    incubator/tuscany/java/sca/runtime/itest/plugin/src/main/java/org/apache/tuscany/sca/plugin/itest/TuscanyITestMojo.java
    incubator/tuscany/java/sca/runtime/standalone/standalone-api/src/main/java/org/apache/tuscany/runtime/standalone/StandaloneRuntime.java
    incubator/tuscany/java/sca/runtime/standalone/standalone-host/src/main/java/org/apache/tuscany/runtime/standalone/host/StandaloneRuntimeImpl.java
    incubator/tuscany/java/sca/runtime/webapp/webapp-api/src/main/java/org/apache/tuscany/runtime/webapp/WebappRuntime.java
    incubator/tuscany/java/sca/runtime/webapp/webapp-api/src/main/java/org/apache/tuscany/runtime/webapp/WebappRuntimeInfo.java
    incubator/tuscany/java/sca/runtime/webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/WebappRuntimeImpl.java

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java?view=diff&rev=508831&r1=508830&r2=508831
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java Sat Feb 17 16:12:31 2007
@@ -18,7 +18,6 @@
  */
 package org.apache.tuscany.core.bootstrap;
 
-import org.apache.tuscany.spi.bootstrap.RuntimeComponent;
 import org.apache.tuscany.spi.builder.Connector;
 import org.apache.tuscany.spi.component.ScopeRegistry;
 import org.apache.tuscany.spi.component.WorkContext;
@@ -45,16 +44,6 @@
      * @return the MonitorFactory being used by the bootstrapper
      */
     MonitorFactory getMonitorFactory();
-
-    /**
-     * Create the RuntimeComponent that forms the fundamental root of the component assembly. This component has two
-     * children: a {@link org.apache.tuscany.spi.component.CompositeComponent} that is the root for all system
-     * components, and a {@link org.apache.tuscany.spi.component.CompositeComponent} that is the root for all
-     * application components.
-     *
-     * @return a new RuntimeComponent; basically a new Tuscany instance
-     */
-    RuntimeComponent createRuntime();
 
     /**
      * Create a Deployer that can be used to deploy the system definition. This will most likely only support a small

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java?view=diff&rev=508831&r1=508830&r2=508831
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java Sat Feb 17 16:12:31 2007
@@ -20,11 +20,8 @@
 
 import javax.xml.stream.XMLInputFactory;
 
-import org.apache.tuscany.spi.bootstrap.ComponentNames;
-import org.apache.tuscany.spi.bootstrap.RuntimeComponent;
 import org.apache.tuscany.spi.builder.Builder;
 import org.apache.tuscany.spi.builder.Connector;
-import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.component.ScopeContainerMonitor;
 import org.apache.tuscany.spi.component.ScopeRegistry;
 import org.apache.tuscany.spi.component.WorkContext;
@@ -48,7 +45,6 @@
 import org.apache.tuscany.core.idl.java.InterfaceJavaLoader;
 import org.apache.tuscany.core.idl.java.JavaInterfaceProcessorRegistryImpl;
 import org.apache.tuscany.core.implementation.IntrospectionRegistryImpl;
-import org.apache.tuscany.core.implementation.composite.CompositeComponentImpl;
 import org.apache.tuscany.core.implementation.composite.CompositeLoader;
 import org.apache.tuscany.core.implementation.composite.SystemCompositeBuilder;
 import org.apache.tuscany.core.implementation.processor.ConstructorProcessor;
@@ -125,23 +121,6 @@
     }
 
     /**
-     * Create the RuntimeComponent that will form the root of the component tree. Returns an new instance of a {@link
-     * DefaultRuntime} with the system and application root components initialized with default composite components.
-     *
-     * @return a newly created root for the component tree
-     */
-    public RuntimeComponent createRuntime() {
-        DefaultRuntime runtime = new DefaultRuntime();
-        CompositeComponent systemComponent =
-            new CompositeComponentImpl(ComponentNames.TUSCANY_SYSTEM_ROOT, null);
-        runtime.setSystemComponent(systemComponent);
-        CompositeComponent rootComponent =
-            new CompositeComponentImpl(ComponentNames.TUSCANY_APPLICATION_ROOT, null);
-        runtime.setRootComponent(rootComponent);
-        return runtime;
-    }
-
-    /**
      * Create primordial deployer that can be used to load the system definition.
      *
      * @return the primordial deployer
@@ -152,7 +131,7 @@
         JavaInterfaceProcessorRegistry interfaceIntrospector = new JavaInterfaceProcessorRegistryImpl();
         Introspector introspector = createIntrospector(interfaceIntrospector);
         LoaderRegistry loader = createLoader(new PropertyObjectFactoryImpl(), introspector);
-        DeployerImpl deployer = new DeployerImpl(xmlFactory, loader, builder, resolver, connector);
+        DeployerImpl deployer = new DeployerImpl(xmlFactory, loader, builder, componentManager, resolver, connector);
         deployer.setMonitor(getMonitorFactory().getMonitor(ScopeContainerMonitor.class));
         return deployer;
     }
@@ -263,7 +242,7 @@
      */
     private Builder createBuilder(ScopeRegistry scopeRegistry) {
         BuilderRegistryImpl builderRegistry =
-            new BuilderRegistryImpl(scopeRegistry, componentManager);
+            new BuilderRegistryImpl(scopeRegistry);
         SystemCompositeBuilder builder = new SystemCompositeBuilder(builderRegistry);
         builderRegistry.register(SystemCompositeImplementation.class, builder);
         builderRegistry.register(SystemImplementation.class, new SystemComponentBuilder());

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java?view=diff&rev=508831&r1=508830&r2=508831
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java Sat Feb 17 16:12:31 2007
@@ -27,7 +27,6 @@
 import org.apache.tuscany.spi.annotation.Autowire;
 import org.apache.tuscany.spi.builder.BindingBuilder;
 import org.apache.tuscany.spi.builder.BuilderException;
-import org.apache.tuscany.spi.builder.BuilderInstantiationException;
 import org.apache.tuscany.spi.builder.BuilderRegistry;
 import org.apache.tuscany.spi.builder.ComponentBuilder;
 import org.apache.tuscany.spi.builder.ScopeNotFoundException;
@@ -35,7 +34,6 @@
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.component.Reference;
 import org.apache.tuscany.spi.component.ReferenceBinding;
-import org.apache.tuscany.spi.component.RegistrationException;
 import org.apache.tuscany.spi.component.ScopeContainer;
 import org.apache.tuscany.spi.component.ScopeRegistry;
 import org.apache.tuscany.spi.component.Service;
@@ -63,7 +61,6 @@
 @EagerInit
 public class BuilderRegistryImpl implements BuilderRegistry {
     private ScopeRegistry scopeRegistry;
-    private ComponentManager componentManager;
 
     private final Map<Class<? extends Implementation<?>>, ComponentBuilder<? extends Implementation<?>>>
         componentBuilders =
@@ -71,9 +68,8 @@
     private final Map<Class<? extends BindingDefinition>, BindingBuilder<? extends BindingDefinition>> bindingBuilders =
         new HashMap<Class<? extends BindingDefinition>, BindingBuilder<? extends BindingDefinition>>();
 
-    public BuilderRegistryImpl(@Autowire ScopeRegistry scopeRegistry, @Autowire ComponentManager componentManager) {
+    public BuilderRegistryImpl(@Autowire ScopeRegistry scopeRegistry) {
         this.scopeRegistry = scopeRegistry;
-        this.componentManager = componentManager;
     }
 
     public <I extends Implementation<?>> void register(Class<I> implClass, ComponentBuilder<I> builder) {
@@ -102,54 +98,49 @@
             }
 
             Component component = componentBuilder.build(parent, componentDefinition, context);
-            if (component != null) {
-                component.setDefaultPropertyValues(componentDefinition.getPropertyValues());
-                Scope scope = componentDefinition.getImplementation().getComponentType().getImplementationScope();
-                if (scope == Scope.SYSTEM || scope == Scope.COMPOSITE) {
-                    component.setScopeContainer(context.getCompositeScope());
-                } else {
-                    // Check for conversational contract if conversational scope
-                    if (scope == Scope.CONVERSATION) {
-                        boolean hasConversationalContract = false;
-                        ComponentType<ServiceDefinition, ReferenceDefinition, ?> componentType =
-                            componentDefinition.getImplementation().getComponentType();
-                        Map<String, ServiceDefinition> services = componentType.getServices();
-                        for (ServiceDefinition serviceDef : services.values()) {
-                            ServiceContract<?> contract = serviceDef.getServiceContract();
-                            if (contract.isConversational()) {
-                                hasConversationalContract = true;
-                                break;
-                            }
-                        }
-                        if (!hasConversationalContract) {
-                            String name = implClass.getName();
-                            throw new NoConversationalContractException(
-                                "No conversational contract for conversational implementation", name);
+            assert component != null;
+            component.setDefaultPropertyValues(componentDefinition.getPropertyValues());
+            Scope scope = componentDefinition.getImplementation().getComponentType().getImplementationScope();
+            if (scope == Scope.SYSTEM || scope == Scope.COMPOSITE) {
+                component.setScopeContainer(context.getCompositeScope());
+            } else {
+                // Check for conversational contract if conversational scope
+                if (scope == Scope.CONVERSATION) {
+                    boolean hasConversationalContract = false;
+                    ComponentType<ServiceDefinition, ReferenceDefinition, ?> componentType =
+                        componentDefinition.getImplementation().getComponentType();
+                    Map<String, ServiceDefinition> services = componentType.getServices();
+                    for (ServiceDefinition serviceDef : services.values()) {
+                        ServiceContract<?> contract = serviceDef.getServiceContract();
+                        if (contract.isConversational()) {
+                            hasConversationalContract = true;
+                            break;
                         }
                     }
-                    // Now it's ok to set the scope container
-                    ScopeContainer scopeContainer = scopeRegistry.getScopeContainer(scope);
-                    if (scopeContainer == null) {
-                        throw new ScopeNotFoundException(scope.toString());
+                    if (!hasConversationalContract) {
+                        String name = implClass.getName();
+                        throw new NoConversationalContractException(
+                            "No conversational contract for conversational implementation", name);
                     }
-                    component.setScopeContainer(scopeContainer);
                 }
+                // Now it's ok to set the scope container
+                ScopeContainer scopeContainer = scopeRegistry.getScopeContainer(scope);
+                if (scopeContainer == null) {
+                    throw new ScopeNotFoundException(scope.toString());
+                }
+                component.setScopeContainer(scopeContainer);
             }
+            context.getComponents().put(component.getUri(), component);
             ComponentType<?, ?, ?> componentType = componentDefinition.getImplementation().getComponentType();
             assert componentType != null : "Component type must be set";
             // create wires for the component
 //            if (wireService != null && component instanceof AtomicComponent) {
 //                wireService.createWires((AtomicComponent) component, componentDefinition);
 //            }
-            componentManager.register(component);
             return component;
         } catch (BuilderException e) {
             e.addContextName(componentDefinition.getUri().toString());
             throw e;
-        } catch (RegistrationException e) {
-            BuilderInstantiationException bie = new BuilderInstantiationException("Error registering component", e);
-            bie.addContextName(componentDefinition.getUri().toString());
-            throw bie;
         }
     }
 

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentManagerImpl.java?view=diff&rev=508831&r1=508830&r2=508831
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentManagerImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentManagerImpl.java Sat Feb 17 16:12:31 2007
@@ -19,25 +19,19 @@
 package org.apache.tuscany.core.component;
 
 import java.net.URI;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
+import org.apache.tuscany.core.implementation.composite.SystemSingletonAtomicComponent;
+import org.apache.tuscany.core.resolver.AutowireResolver;
 import org.apache.tuscany.spi.component.AtomicComponent;
 import org.apache.tuscany.spi.component.Component;
-import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.component.DuplicateNameException;
 import org.apache.tuscany.spi.component.RegistrationException;
 import org.apache.tuscany.spi.event.Event;
 import org.apache.tuscany.spi.model.ServiceContract;
 import org.apache.tuscany.spi.services.management.TuscanyManagementService;
-import org.apache.tuscany.spi.util.UriHelper;
-
-import org.apache.tuscany.core.component.event.ComponentStart;
-import org.apache.tuscany.core.component.event.ComponentStop;
-import org.apache.tuscany.core.implementation.composite.SystemSingletonAtomicComponent;
-import org.apache.tuscany.core.resolver.AutowireResolver;
 
 /**
  * Default implementation of the component manager
@@ -48,11 +42,9 @@
     private TuscanyManagementService managementService;
     private AutowireResolver resolver;
     private Map<URI, Component> components;
-    private Map<URI, List<URI>> parentToChildren;
 
     public ComponentManagerImpl() {
         components = new ConcurrentHashMap<URI, Component>();
-        parentToChildren = new ConcurrentHashMap<URI, List<URI>>();
     }
 
     public ComponentManagerImpl(TuscanyManagementService managementService, AutowireResolver resolver) {
@@ -61,30 +53,19 @@
         this.resolver = resolver;
     }
 
-    public void register(Component component) throws RegistrationException {
+    public synchronized void register(Component component) throws RegistrationException {
         URI uri = component.getUri();
         assert uri != null;
+        assert !uri.toString().endsWith("/");
         if (components.containsKey(uri)) {
             throw new DuplicateNameException(uri.toString());
         }
         components.put(uri, component);
-        URI parentUri = UriHelper.getParentNameAsUri(uri);
-        List<URI> children = parentToChildren.get(parentUri);
-        if (children == null) {
-            children = new ArrayList<URI>();
-            parentToChildren.put(parentUri, children);
-        }
-        // the parent may not be registered in this VM
-        synchronized (children) {
-            children.add(uri);
-        }
+
         if (managementService != null && component instanceof AtomicComponent) {
             // FIXME shouldn't it take the canonical name and also not distinguish atomic components?
             managementService.registerComponent(component.getUri().toString(), component);
         }
-        if (component instanceof CompositeComponent) {
-            component.addListener(this);
-        }
     }
 
     public <S, I extends S> void registerJavaObject(URI uri, Class<S> service, I instance)
@@ -111,11 +92,9 @@
         }
     }
 
-    public void unregister(Component component) throws RegistrationException {
+    public synchronized void unregister(Component component) throws RegistrationException {
         URI uri = component.getUri();
         components.remove(uri);
-        parentToChildren.remove(uri);
-        component.removeListener(this);
     }
 
     public Component getComponent(URI name) {
@@ -123,33 +102,6 @@
     }
 
     public void onEvent(Event event) {
-        // This could be faster but it is not an operation that is performed often
-        if (event instanceof ComponentStart) {
-            URI uri = ((ComponentStart) event).getComponentUri();
-            List<URI> children = parentToChildren.get(uri);
-            if (children != null) {
-                synchronized (children) {
-                    for (URI childUri : children) {
-                        // performs a depth-first traversal as the children will recursively fire start events
-                        Component child = components.get(childUri);
-                        assert child != null;
-                        child.start();
-                    }
-                }
-            }
-        } else if (event instanceof ComponentStop) {
-            URI uri = ((ComponentStop) event).getComponentUri();
-            List<URI> children = parentToChildren.get(uri);
-            if (children != null) {
-                synchronized (children) {
-                    for (URI childUri : children) {
-                        // performs a depth-first traversal as the children will recursively fire stop events
-                        Component child = components.get(childUri);
-                        assert child != null;
-                        child.stop();
-                    }
-                }
-            }
-        }
+        throw new UnsupportedOperationException();
     }
 }

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/AbstractDeploymentContext.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/AbstractDeploymentContext.java?view=diff&rev=508831&r1=508830&r2=508831
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/AbstractDeploymentContext.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/AbstractDeploymentContext.java Sat Feb 17 16:12:31 2007
@@ -26,6 +26,7 @@
 import java.util.Map;
 
 import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.component.Component;
 
 /**
  * Base class for DeploymentContext implementations.
@@ -37,7 +38,7 @@
     private final ClassLoader classLoader;
     private final URL scdlLocation;
     private final Map<String, Object> properties = new HashMap<String, Object>();
-    private List<String> pathNames = new ArrayList<String>();
+    private final Map<URI, Component> components = new HashMap<URI, Component>();
 
     /**
      * Constructor defining properties of this context.
@@ -60,10 +61,6 @@
         return scdlLocation;
     }
 
-    public List<String> getPathNames() {
-        return pathNames;
-    }
-
     public Object getExtension(String name) {
         return properties.get(name);
     }
@@ -78,5 +75,10 @@
 
     public URI getComponentId() {
         return componentId;
+    }
+
+    @Deprecated
+    public Map<URI, Component> getComponents() {
+        return components;
     }
 }

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java?view=diff&rev=508831&r1=508830&r2=508831
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java Sat Feb 17 16:12:31 2007
@@ -18,6 +18,7 @@
  */
 package org.apache.tuscany.core.deployer;
 
+import java.util.Collection;
 import javax.xml.stream.XMLInputFactory;
 
 import org.apache.tuscany.spi.annotation.Autowire;
@@ -25,11 +26,13 @@
 import org.apache.tuscany.spi.builder.BuilderException;
 import org.apache.tuscany.spi.builder.BuilderRegistry;
 import org.apache.tuscany.spi.builder.Connector;
+import org.apache.tuscany.spi.builder.BuilderInstantiationException;
 import org.apache.tuscany.spi.component.Component;
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.component.SCAObject;
 import org.apache.tuscany.spi.component.ScopeContainer;
 import org.apache.tuscany.spi.component.ScopeContainerMonitor;
+import org.apache.tuscany.spi.component.RegistrationException;
 import org.apache.tuscany.spi.deployer.Deployer;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.event.Event;
@@ -44,6 +47,7 @@
 import org.apache.tuscany.api.annotation.Monitor;
 import org.apache.tuscany.core.component.event.ComponentStop;
 import org.apache.tuscany.core.component.scope.CompositeScopeContainer;
+import org.apache.tuscany.core.component.ComponentManager;
 import org.apache.tuscany.core.resolver.AutowireResolver;
 
 /**
@@ -58,15 +62,18 @@
     private Loader loader;
     private AutowireResolver resolver;
     private Connector connector;
+    private ComponentManager componentManager;
 
     public DeployerImpl(XMLInputFactory xmlFactory,
                         Loader loader,
                         Builder builder,
+                        ComponentManager componentManager,
                         AutowireResolver resolver,
                         Connector connector) {
         this.xmlFactory = xmlFactory;
         this.loader = loader;
         this.builder = builder;
+        this.componentManager = componentManager;
         this.resolver = resolver;
         this.connector = connector;
     }
@@ -100,14 +107,18 @@
         this.connector = connector;
     }
 
-    public <I extends Implementation<?>> Component deploy(CompositeComponent parent,
+    @Autowire
+    public void setComponentManager(ComponentManager componentManager) {
+        this.componentManager = componentManager;
+    }
+
+    public <I extends Implementation<?>> Collection<Component> deploy(CompositeComponent parent,
                                                           ComponentDefinition<I> componentDefinition)
         throws LoaderException, BuilderException, ResolutionException {
         final ScopeContainer scopeContainer = new CompositeScopeContainer(monitor);
         scopeContainer.start();
         DeploymentContext deploymentContext =
             new RootDeploymentContext(null, null, componentDefinition.getUri(), xmlFactory, scopeContainer);
-        deploymentContext.getPathNames().add(componentDefinition.getUri().toString());
         // load the model
         load(parent, componentDefinition, deploymentContext);
         // resolve autowires
@@ -124,8 +135,19 @@
             }
         };
         component.addListener(listener);
+
+        Collection<Component> components = deploymentContext.getComponents().values();
+        for (Component toRegister : components) {
+            try {
+                componentManager.register(toRegister);
+            } catch (RegistrationException e) {
+                BuilderInstantiationException bie = new BuilderInstantiationException("Error registering component", e);
+                bie.addContextName(componentDefinition.getUri().toString());
+                throw bie;
+            }
+        }
         connector.connect(componentDefinition);
-        return component;
+        return components;
     }
 
     /**

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/AbstractCompositeComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/AbstractCompositeComponent.java?view=diff&rev=508831&r1=508830&r2=508831
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/AbstractCompositeComponent.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/AbstractCompositeComponent.java Sat Feb 17 16:12:31 2007
@@ -64,7 +64,7 @@
             initialized = true;
             lifecycleState = INITIALIZED;
         }
-        publish(new ComponentStart(this, getUri()));
+//        publish(new ComponentStart(this, getUri()));
     }
 
     public void stop() {

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeComponentTypeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeComponentTypeLoader.java?view=diff&rev=508831&r1=508830&r2=508831
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeComponentTypeLoader.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeComponentTypeLoader.java Sat Feb 17 16:12:31 2007
@@ -19,6 +19,7 @@
 package org.apache.tuscany.core.implementation.composite;
 
 import java.net.URL;
+import java.net.URI;
 
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.deployer.CompositeClassLoader;
@@ -53,8 +54,8 @@
         throws LoaderException {
         URL scdlLocation = implementation.getScdlLocation();
         ClassLoader cl = new CompositeClassLoader(implementation.getClassLoader());
-        DeploymentContext childContext = new ChildDeploymentContext(deploymentContext, cl, scdlLocation, null);
-        childContext.getPathNames().addAll(deploymentContext.getPathNames());
+        URI componentId = URI.create(deploymentContext.getComponentId().toString()+'/');
+        DeploymentContext childContext = new ChildDeploymentContext(deploymentContext, cl, scdlLocation, componentId);
         CompositeComponentType componentType = loadFromSidefile(parent, scdlLocation, childContext);
         implementation.setComponentType(componentType);
     }

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/loader/SystemCompositeComponentTypeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/loader/SystemCompositeComponentTypeLoader.java?view=diff&rev=508831&r1=508830&r2=508831
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/loader/SystemCompositeComponentTypeLoader.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/loader/SystemCompositeComponentTypeLoader.java Sat Feb 17 16:12:31 2007
@@ -19,6 +19,7 @@
 package org.apache.tuscany.core.implementation.system.loader;
 
 import java.net.URL;
+import java.net.URI;
 
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
@@ -56,8 +57,8 @@
             throw new LoaderException("SCDL location not found");
         }
         ClassLoader cl = implementation.getClassLoader();
-        DeploymentContext childContext = new ChildDeploymentContext(deploymentContext, cl, scdlLocation, null);
-        childContext.getPathNames().addAll(deploymentContext.getPathNames());
+        URI componentId = deploymentContext.getComponentId();
+        DeploymentContext childContext = new ChildDeploymentContext(deploymentContext, cl, scdlLocation, componentId);
         CompositeComponentType componentType = loadFromSidefile(parent, scdlLocation, childContext);
         implementation.setComponentType(componentType);
     }

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java?view=diff&rev=508831&r1=508830&r2=508831
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java Sat Feb 17 16:12:31 2007
@@ -75,6 +75,7 @@
 import org.apache.tuscany.core.binding.local.LocalBindingDefinition;
 import org.apache.tuscany.core.implementation.system.model.SystemImplementation;
 import org.apache.tuscany.core.property.SimplePropertyObjectFactory;
+import org.apache.tuscany.core.deployer.ChildDeploymentContext;
 
 /**
  * Loads a component definition from an XML-based assembly file
@@ -112,26 +113,16 @@
         String initLevel = reader.getAttributeValue(null, "initLevel");
 
         try {
-            Implementation<?> impl = loadImplementation(parent, reader, deploymentContext);
-            deploymentContext.getPathNames().add(name);
-            registry.loadComponentType(parent, impl, deploymentContext);
-            deploymentContext.getPathNames().remove(deploymentContext.getPathNames().size() - 1);
+            URI componentId = URI.create(deploymentContext.getComponentId()+"/").resolve(name);
+            DeploymentContext childContext = new ChildDeploymentContext(deploymentContext,
+                                                                        deploymentContext.getClassLoader(),
+                                                                        deploymentContext.getScdlLocation(),
+                                                                        componentId);
+            Implementation<?> impl = loadImplementation(parent, reader, childContext);
+            registry.loadComponentType(parent, impl, childContext);
 
-            URI uri;
-            try {
-                StringBuilder buf = new StringBuilder();
-                for (String path : deploymentContext.getPathNames()) {
-                    buf.append(path);
-                    if (path.charAt(path.length() - 1) != '/') {
-                        buf.append('/');
-                    }
-                }
-                uri = new URI(buf + name);
-            } catch (URISyntaxException e) {
-                throw new IllegalSCDLNameException(e);
-            }
             ComponentDefinition<Implementation<?>> componentDefinition =
-                new ComponentDefinition<Implementation<?>>(uri, impl);
+                new ComponentDefinition<Implementation<?>>(componentId, impl);
 
             if (initLevel != null) {
                 if (initLevel.length() == 0) {
@@ -150,9 +141,9 @@
                     case START_ELEMENT:
                         QName qname = reader.getName();
                         if (PROPERTY.equals(qname)) {
-                            loadProperty(reader, deploymentContext, componentDefinition);
+                            loadProperty(reader, childContext, componentDefinition);
                         } else if (REFERENCE.equals(qname)) {
-                            loadReference(reader, deploymentContext, componentDefinition);
+                            loadReference(reader, childContext, componentDefinition);
                         } else {
                             throw new UnrecognizedElementException(qname);
                         }
@@ -242,39 +233,18 @@
                                  ComponentDefinition<?> componentDefinition) throws XMLStreamException,
                                                                                     LoaderException {
         String name = reader.getAttributeValue(null, "name");
-        String text = reader.getElementText();
-        String target = text != null ? text.trim() : null;
         if (name == null) {
             throw new InvalidReferenceException("No name specified");
-        } else if (target == null) {
-            throw new InvalidReferenceException("No target specified", name);
         }
-        URI targetURI;
-        QualifiedName qName = new QualifiedName(target);
-        List<String> names = deploymentContext.getPathNames();
-        String path;
-        if (names.size() == 0) {
-            path = "/";
-        } else {
-            StringBuilder buf = new StringBuilder();
-            for (int i = 0; i < names.size() - 1; i++) {
-                buf.append(names.get(i)).append("/");
-            }
-            buf.append(names.get(names.size() - 1));
-            if (buf.charAt(buf.length() - 1) != '/') {
-                buf.append('/');
-            }
-            path = buf.toString();
-        }
-        try {
-            URI uri = new URI(path);
-            targetURI = uri.resolve(qName.getPartName());
-            if (qName.getPortName() != null) {
-                targetURI = targetURI.resolve('#' + qName.getPortName());
-            }
-        } catch (URISyntaxException e) {
-            throw new InvalidReferenceException("Illegal URI", name, e);
+
+        String target = reader.getElementText();
+        if (target == null) {
+            throw new InvalidReferenceException("No target specified", name);
         }
+        QualifiedName qName = new QualifiedName(target.trim());
+
+        URI componentId = deploymentContext.getComponentId();
+        URI targetURI  = componentId.resolve(qName.getFragment());
         Implementation<?> impl = componentDefinition.getImplementation();
         ComponentType<?, ?, ?> componentType = impl.getComponentType();
         if (!componentType.getReferences().containsKey(name)) {
@@ -296,11 +266,7 @@
             ReferenceTarget referenceTarget = componentDefinition.getReferenceTargets().get(name);
             if (referenceTarget == null) {
                 referenceTarget = new ReferenceTarget();
-                try {
-                    referenceTarget.setReferenceName(new URI(path + "#" + name));
-                } catch (URISyntaxException e) {
-                    throw new IllegalSCDLNameException(e);
-                }
+                referenceTarget.setReferenceName(componentId.resolve('#' + name));
                 componentDefinition.add(referenceTarget);
             }
             referenceTarget.addTarget(targetURI);

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/IncludeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/IncludeLoader.java?view=diff&rev=508831&r1=508830&r2=508831
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/IncludeLoader.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/IncludeLoader.java Sat Feb 17 16:12:31 2007
@@ -20,6 +20,7 @@
 
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.net.URI;
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
@@ -86,8 +87,9 @@
             throw new MissingIncludeException("No SCDL location or resource specified", name);
         }
 
-        DeploymentContext childContext = new ChildDeploymentContext(deploymentContext, cl, url, null);
-        childContext.getPathNames().addAll(deploymentContext.getPathNames());
+        // when we include, the componentId remains that of the parent
+        URI componentId = deploymentContext.getComponentId();
+        DeploymentContext childContext = new ChildDeploymentContext(deploymentContext, cl, url, componentId);
         CompositeComponentType composite;
         try {
             composite = loadFromSidefile(parent, url, childContext);

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java?view=diff&rev=508831&r1=508830&r2=508831
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java Sat Feb 17 16:12:31 2007
@@ -72,19 +72,7 @@
         Multiplicity multiplicity = StaxUtil.multiplicity(multiplicityVal, Multiplicity.ONE_ONE);
         ReferenceDefinition referenceDefinition = new ReferenceDefinition();
         referenceDefinition.setMultiplicity(multiplicity);
-        try {
-            StringBuilder buf = new StringBuilder();
-            List<String> names = deploymentContext.getPathNames();
-            for (int i = 0; i < names.size() - 1; i++) {
-                buf.append("/");
-            }
-            if (names.size() > 0) {
-                buf.append(names.get(names.size() - 1));
-            }
-            referenceDefinition.setUri(new URI(buf + "#" + name));
-        } catch (URISyntaxException e) {
-            throw new IllegalSCDLNameException(e);
-        }
+        referenceDefinition.setUri(deploymentContext.getComponentId().resolve('#' + name));
         while (true) {
             switch (reader.next()) {
                 case START_ELEMENT:

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ServiceLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ServiceLoader.java?view=diff&rev=508831&r1=508830&r2=508831
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ServiceLoader.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ServiceLoader.java Sat Feb 17 16:12:31 2007
@@ -19,8 +19,6 @@
 package org.apache.tuscany.core.loader;
 
 import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.List;
 import javax.xml.namespace.QName;
 import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
 import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
@@ -35,7 +33,6 @@
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.extension.LoaderExtension;
-import org.apache.tuscany.spi.loader.IllegalSCDLNameException;
 import org.apache.tuscany.spi.loader.LoaderException;
 import org.apache.tuscany.spi.loader.LoaderRegistry;
 import org.apache.tuscany.spi.loader.UnrecognizedElementException;
@@ -69,21 +66,11 @@
         assert SERVICE.equals(reader.getName());
         String name = reader.getAttributeValue(null, "name");
         URI targetUri = null;
+        URI compositeId = deploymentContext.getComponentId();
+        URI componentBase = URI.create(compositeId +"/");
         ServiceDefinition def = new ServiceDefinition();
-        StringBuilder buf = new StringBuilder();
-        List<String> names = deploymentContext.getPathNames();
-        int len = names.size();
-        if (len > 0) {
-            for (int i = 0; i < len - 1; i++) {
-                buf.append(names.get(i)).append("/");
-            }
-            buf.append(names.get(len - 1));
-        }
-        try {
-            def.setUri(new URI(buf + "#" + name));
-        } catch (URISyntaxException e) {
-            throw new IllegalSCDLNameException(e);
-        }
+        def.setUri(compositeId.resolve('#' + name));
+
         while (true) {
             int i = reader.next();
             switch (i) {
@@ -93,16 +80,7 @@
                         String text = reader.getElementText();
                         String target = text != null ? text.trim() : null;
                         QualifiedName qName = new QualifiedName(target);
-                        try {
-                            if (qName.getPortName() == null) {
-                                targetUri = new URI(buf + "/" + target);
-                            } else {
-                                targetUri =
-                                    new URI(buf + "/" + qName.getPartName() + "#" + qName.getPortName());
-                            }
-                        } catch (URISyntaxException e) {
-                            throw new IllegalSCDLNameException(e);
-                        }
+                        targetUri = componentBase.resolve(qName.getFragment());
                     } else {
                         ModelObject o = registry.load(parent, null, reader, deploymentContext);
                         if (o instanceof ServiceContract) {

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java?view=diff&rev=508831&r1=508830&r2=508831
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java Sat Feb 17 16:12:31 2007
@@ -20,12 +20,12 @@
 
 import java.net.URI;
 import java.net.URL;
+import java.util.Collection;
 import javax.xml.stream.XMLInputFactory;
 
 import org.osoa.sca.ComponentContext;
 
 import org.apache.tuscany.spi.bootstrap.ComponentNames;
-import org.apache.tuscany.spi.bootstrap.RuntimeComponent;
 import org.apache.tuscany.spi.builder.BuilderException;
 import org.apache.tuscany.spi.builder.Connector;
 import org.apache.tuscany.spi.component.AtomicComponent;
@@ -45,6 +45,7 @@
 import org.apache.tuscany.core.builder.ConnectorImpl;
 import org.apache.tuscany.core.component.ComponentManager;
 import org.apache.tuscany.core.component.ComponentManagerImpl;
+import org.apache.tuscany.core.component.event.ComponentStart;
 import org.apache.tuscany.core.implementation.system.model.SystemCompositeImplementation;
 import org.apache.tuscany.core.monitor.NullMonitorFactory;
 import org.apache.tuscany.core.resolver.AutowireResolver;
@@ -58,16 +59,14 @@
 /**
  * @version $Rev$ $Date$
  */
-public abstract class AbstractRuntime implements TuscanyRuntime {
-    private static final URI MONITOR_URI =
-        URI.create(ComponentNames.TUSCANY_SYSTEM_ROOT.toString() + "/MonitorFactory");
-    private static final URI COMPONENT_MGR_URI =
-        URI.create(ComponentNames.TUSCANY_SYSTEM_ROOT.toString() + "/ComponentManager");
+public abstract class AbstractRuntime<I extends RuntimeInfo> implements TuscanyRuntime<I> {
+    private static final URI MONITOR_URI = ComponentNames.TUSCANY_SYSTEM_ROOT.resolve("MonitorFactory");
 
-    private static final URI AUTOWIRE_RESOLVER_URI =
-        URI.create(ComponentNames.TUSCANY_SYSTEM_ROOT.toString() + "/AutowireResolver");
+    private static final URI COMPONENT_MGR_URI = ComponentNames.TUSCANY_SYSTEM_ROOT.resolve("ComponentManager");
 
-    private static final URI DEPLOYER_URI = URI.create("sca://root.system/main/deployer");
+    private static final URI AUTOWIRE_RESOLVER_URI = ComponentNames.TUSCANY_SYSTEM_ROOT.resolve("AutowireResolver");
+
+    private static final URI RUNTIME_INFO_URI = ComponentNames.TUSCANY_SYSTEM_ROOT.resolve("RuntimeInfo");
 
     private final XMLInputFactory xmlFactory;
     private URL systemScdl;
@@ -75,21 +74,22 @@
     private URL applicationScdl;
     private ClassLoader hostClassLoader;
     private ClassLoader applicationClassLoader;
-    private RuntimeInfo runtimeInfo;
+    private Class<I> runtimeInfoType;
+    private I runtimeInfo;
     private MonitorFactory monitorFactory;
     private ManagementService<?> managementService;
     private ComponentManager componentManager;
 
-    private RuntimeComponent runtime;
     private CompositeComponent systemComponent;
     private CompositeComponent tuscanySystem;
     private AutowireResolver resolver;
 
-    protected AbstractRuntime() {
-        this(new NullMonitorFactory());
+    protected AbstractRuntime(Class<I> runtimeInfoType) {
+        this(runtimeInfoType, new NullMonitorFactory());
     }
 
-    protected AbstractRuntime(MonitorFactory monitorFactory) {
+    protected AbstractRuntime(Class<I> runtimeInfoType, MonitorFactory monitorFactory) {
+        this.runtimeInfoType = runtimeInfoType;
         this.monitorFactory = monitorFactory;
         xmlFactory = XMLInputFactory.newInstance("javax.xml.stream.XMLInputFactory", getClass().getClassLoader());
     }
@@ -134,11 +134,11 @@
         this.hostClassLoader = hostClassLoader;
     }
 
-    public RuntimeInfo getRuntimeInfo() {
+    public I getRuntimeInfo() {
         return runtimeInfo;
     }
 
-    public void setRuntimeInfo(RuntimeInfo runtimeInfo) {
+    public void setRuntimeInfo(I runtimeInfo) {
         this.runtimeInfo = runtimeInfo;
     }
 
@@ -159,25 +159,17 @@
     }
 
     public void initialize() throws InitializationException {
+        URI name = ComponentNames.TUSCANY_SYSTEM_ROOT.resolve("main");
         Bootstrapper bootstrapper = createBootstrapper();
-        runtime = bootstrapper.createRuntime();
-        runtime.start();
 
-        systemComponent = runtime.getSystemComponent();
         registerSystemComponents();
-        try {
-            componentManager.register(systemComponent);
-            componentManager.register(runtime.getRootComponent());
-        } catch (RegistrationException e) {
-            throw new InitializationException(e);
-        }
-        systemComponent.start();
 
         // deploy the system scdl
+        Collection<Component> components;
         try {
-            tuscanySystem = deploySystemScdl(bootstrapper.createDeployer(),
+            components = deploySystemScdl(bootstrapper.createDeployer(),
                 systemComponent,
-                ComponentNames.TUSCANY_SYSTEM,
+                name,
                 getSystemScdl(),
                 getClass().getClassLoader());
         } catch (LoaderException e) {
@@ -189,7 +181,11 @@
         } catch (ResolutionException e) {
             throw new InitializationException(e);
         }
-        tuscanySystem.start();
+        for (Component component : components) {
+            component.start();
+        }
+        CompositeComponent composite = (CompositeComponent) componentManager.getComponent(name);
+        composite.onEvent(new ComponentStart(this, name));
     }
 
     public void destroy() {
@@ -201,10 +197,6 @@
             systemComponent.stop();
             systemComponent = null;
         }
-        if (runtime != null) {
-            runtime.stop();
-            runtime = null;
-        }
     }
 
 
@@ -226,7 +218,7 @@
 
     protected void registerSystemComponents() throws InitializationException {
         try {
-            componentManager.registerJavaObject(RuntimeInfo.COMPONENT_URI, RuntimeInfo.class, runtimeInfo);
+            componentManager.registerJavaObject(RUNTIME_INFO_URI, runtimeInfoType, runtimeInfo);
             componentManager.registerJavaObject(MONITOR_URI, MonitorFactory.class, getMonitorFactory());
             // register the component manager with itself so it can be autowired
             componentManager.registerJavaObject(COMPONENT_MGR_URI, ComponentManager.class, componentManager);
@@ -236,7 +228,7 @@
         }
     }
 
-    protected CompositeComponent deploySystemScdl(Deployer deployer,
+    protected Collection<Component> deploySystemScdl(Deployer deployer,
                                                   CompositeComponent parent,
                                                   URI name,
                                                   URL systemScdl,
@@ -249,7 +241,7 @@
         ComponentDefinition<SystemCompositeImplementation> definition =
             new ComponentDefinition<SystemCompositeImplementation>(name, impl);
 
-        return (CompositeComponent) deployer.deploy(parent, definition);
+        return deployer.deploy(parent, definition);
     }
 
 
@@ -260,7 +252,8 @@
 
     protected Deployer getDeployer() {
         try {
-            AtomicComponent component = (AtomicComponent) getComponentManager().getComponent(DEPLOYER_URI);
+            AtomicComponent component =
+                (AtomicComponent) getComponentManager().getComponent(ComponentNames.TUSCANY_DEPLOYER);
             return (Deployer) component.getTargetInstance();
         } catch (TargetResolutionException e) {
             throw new AssertionError(e);

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/deployment/XMLChangeSetHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/deployment/XMLChangeSetHandler.java?view=diff&rev=508831&r1=508830&r2=508831
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/deployment/XMLChangeSetHandler.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/deployment/XMLChangeSetHandler.java Sat Feb 17 16:12:31 2007
@@ -28,10 +28,8 @@
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
-import org.apache.tuscany.spi.bootstrap.RuntimeComponent;
 import org.apache.tuscany.spi.builder.Builder;
 import org.apache.tuscany.spi.builder.BuilderException;
-import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.deployer.ChangeSetHandler;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.loader.Loader;
@@ -50,13 +48,11 @@
     private static final QName CHANGESET = new QName(NS, "changeSet");
     private static final QName CREATECOMPONENT = new QName(NS, "createComponent");
 
-    private final RuntimeComponent runtime;
     private final Builder builder;
     private final Loader loader;
     private final XMLInputFactory xmlFactory;
 
-    public XMLChangeSetHandler(RuntimeComponent runtime, Loader loader, Builder builder) {
-        this.runtime = runtime;
+    public XMLChangeSetHandler(Loader loader, Builder builder) {
         this.loader = loader;
         this.builder = builder;
         xmlFactory = XMLInputFactory.newInstance("javax.xml.stream.XMLInputFactory", getClass().getClassLoader());
@@ -105,11 +101,10 @@
 
     public void createComponent(XMLStreamReader xmlReader) throws XMLStreamException {
         DeploymentContext deploymentContext = new RootDeploymentContext(null, null, null, xmlFactory, null);
-        CompositeComponent parent = runtime.getRootComponent();
         try {
             ComponentDefinition<?> componentDefinition =
-                (ComponentDefinition<?>) loader.load(parent, null, xmlReader, deploymentContext);
-            builder.build(parent, componentDefinition, deploymentContext);
+                (ComponentDefinition<?>) loader.load(null, null, xmlReader, deploymentContext);
+            builder.build(null, componentDefinition, deploymentContext);
         } catch (LoaderException e) {
             // FIXME throw something appropriate
             throw new AssertionError("FIXME");

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryNoBindingsTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryNoBindingsTestCase.java?view=diff&rev=508831&r1=508830&r2=508831
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryNoBindingsTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryNoBindingsTestCase.java Sat Feb 17 16:12:31 2007
@@ -81,7 +81,7 @@
         super.setUp();
         deploymentContext = EasyMock.createMock(DeploymentContext.class);
         parent = EasyMock.createNiceMock(CompositeComponent.class);
-        registry = new BuilderRegistryImpl(null, null);
+        registry = new BuilderRegistryImpl(null);
         registry.register(LocalBindingDefinition.class, new LocalBindingBuilder());
     }
 

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java?view=diff&rev=508831&r1=508830&r2=508831
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java Sat Feb 17 16:12:31 2007
@@ -19,6 +19,7 @@
 package org.apache.tuscany.core.builder;
 
 import java.net.URI;
+import java.util.Map;
 
 import org.apache.tuscany.spi.builder.BindingBuilder;
 import org.apache.tuscany.spi.builder.BuilderConfigException;
@@ -54,24 +55,47 @@
  */
 public class BuilderRegistryTestCase extends TestCase {
     private DeploymentContext deploymentContext;
+    private ScopeContainer scopeContainer;
+    private Map<URI, Component> components;
+
     //private BuilderRegistryImpl registry;
     private CompositeComponent parent;
 
+    @SuppressWarnings({"unchecked"})
     public void testRegistration() throws Exception {
-        MockBuilder builder = new MockBuilder();
-        ComponentManager componentManager = EasyMock.createNiceMock(ComponentManager.class);
-        BuilderRegistry registry = new BuilderRegistryImpl(null, componentManager);
-        registry.register(CompositeImplementation.class, builder);
+        URI componentId = URI.create("sca://localhost/component");
         CompositeImplementation implementation = new CompositeImplementation();
         ComponentDefinition<CompositeImplementation> componentDefinition =
             new ComponentDefinition<CompositeImplementation>(implementation);
         componentDefinition.getImplementation().setComponentType(new CompositeComponentType());
-        registry.build(parent, componentDefinition, deploymentContext);
+
+        CompositeComponent component = EasyMock.createMock(CompositeComponent.class);
+        component.setDefaultPropertyValues(componentDefinition.getPropertyValues());
+        component.setScopeContainer(scopeContainer);
+        EasyMock.expect(component.getUri()).andReturn(componentId);
+        EasyMock.replay(component);
+
+        EasyMock.expect(deploymentContext.getCompositeScope()).andReturn(scopeContainer);
+        EasyMock.expect(deploymentContext.getComponents()).andReturn(components);
+        EasyMock.replay(deploymentContext);
+
+        EasyMock.expect(components.put(componentId, component)).andReturn(null);
+        EasyMock.replay(components);
+        
+        ComponentBuilder builder = EasyMock.createMock(ComponentBuilder.class);
+        EasyMock.expect(builder.build(parent, componentDefinition, deploymentContext)).andReturn(component);
+        EasyMock.replay(builder);
+
+        BuilderRegistry registry = new BuilderRegistryImpl(null);
+        registry.register(CompositeImplementation.class, builder);
+
+        assertSame(component, registry.build(parent, componentDefinition, deploymentContext));
+        EasyMock.verify(builder);
     }
 
     @SuppressWarnings({"unchecked"})
     public void testServiceBindingBuilderDispatch() throws Exception {
-        BuilderRegistry registry = new BuilderRegistryImpl(null, null);
+        BuilderRegistry registry = new BuilderRegistryImpl(null);
         ServiceBinding binding = EasyMock.createNiceMock(ServiceBinding.class);
         EasyMock.replay(binding);
         BindingBuilder<MockBindingDefinition> builder = EasyMock.createMock(BindingBuilder.class);
@@ -91,7 +115,7 @@
 
     @SuppressWarnings({"unchecked"})
     public void testReferenceBindingBuilderDispatch() throws Exception {
-        BuilderRegistry registry = new BuilderRegistryImpl(null, null);
+        BuilderRegistry registry = new BuilderRegistryImpl(null);
         ReferenceBinding binding = EasyMock.createNiceMock(ReferenceBinding.class);
         EasyMock.replay(binding);
         BindingBuilder<MockBindingDefinition> builder = EasyMock.createMock(BindingBuilder.class);
@@ -109,38 +133,12 @@
     }
 
     @SuppressWarnings({"unchecked"})
-    public void testComponentImplementationDispatch() throws Exception {
-        ScopeRegistry scopeRegistry = EasyMock.createMock(ScopeRegistry.class);
-        ScopeContainer scopeContainer = EasyMock.createNiceMock(ScopeContainer.class);
-        EasyMock.expect(scopeRegistry.getScopeContainer(EasyMock.isA(Scope.class))).andReturn(scopeContainer);
-        EasyMock.replay(scopeRegistry);
-        ComponentManager componentManager = EasyMock.createNiceMock(ComponentManager.class);
-        BuilderRegistry registry = new BuilderRegistryImpl(scopeRegistry, componentManager);
-
-        AtomicComponent component = EasyMock.createNiceMock(AtomicComponent.class);
-        EasyMock.replay(component);
-        ComponentBuilder<FooImplementation> builder = EasyMock.createMock(ComponentBuilder.class);
-        EasyMock.expect(builder.build(EasyMock.isA(CompositeComponent.class),
-            EasyMock.isA(ComponentDefinition.class),
-            EasyMock.isA(DeploymentContext.class))).andReturn(component);
-        EasyMock.replay(builder);
-        registry.register(FooImplementation.class, builder);
-
-        FooImplementation impl = new FooImplementation();
-        impl.setComponentType(new ComponentType());
-        URI uri = URI.create("foo");
-        ComponentDefinition<FooImplementation> definition = new ComponentDefinition<FooImplementation>(uri, impl);
-        Component ret = registry.build(parent, definition, deploymentContext);
-        assertNotNull(ret);
-    }
-
-    @SuppressWarnings({"unchecked"})
     public void testNoConversationalContract() throws Exception {
         ScopeRegistry scopeRegistry = EasyMock.createMock(ScopeRegistry.class);
         ScopeContainer scopeContainer = EasyMock.createNiceMock(ScopeContainer.class);
         EasyMock.expect(scopeRegistry.getScopeContainer(EasyMock.isA(Scope.class))).andReturn(scopeContainer);
         EasyMock.replay(scopeRegistry);
-        BuilderRegistry registry = new BuilderRegistryImpl(scopeRegistry, null);
+        BuilderRegistry registry = new BuilderRegistryImpl(scopeRegistry);
 
         AtomicComponent component = EasyMock.createNiceMock(AtomicComponent.class);
         EasyMock.replay(component);
@@ -169,7 +167,8 @@
         super.setUp();
         deploymentContext = EasyMock.createMock(DeploymentContext.class);
         parent = EasyMock.createNiceMock(CompositeComponent.class);
-        EasyMock.replay(parent);
+        scopeContainer = EasyMock.createMock(ScopeContainer.class);
+        components = EasyMock.createMock(Map.class);
     }
 
     private class MockBuilder implements ComponentBuilder<CompositeImplementation> {

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/ComponentManagerImplTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/ComponentManagerImplTestCase.java?view=diff&rev=508831&r1=508830&r2=508831
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/ComponentManagerImplTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/ComponentManagerImplTestCase.java Sat Feb 17 16:12:31 2007
@@ -20,246 +20,67 @@
 
 import java.net.URI;
 
-import org.apache.tuscany.spi.component.Component;
-import org.apache.tuscany.spi.component.DuplicateNameException;
-
 import junit.framework.TestCase;
-import org.apache.tuscany.core.component.event.ComponentStart;
-import org.apache.tuscany.core.component.event.ComponentStop;
 import org.easymock.EasyMock;
-import org.easymock.IAnswer;
+
+import org.apache.tuscany.spi.component.Component;
+import org.apache.tuscany.spi.component.DuplicateNameException;
 
 /**
  * @version $Rev$ $Date$
  */
 public class ComponentManagerImplTestCase extends TestCase {
-    private ComponentManager manager;
+    private static final URI DOMAIN = URI.create("sca://localhost/");
+    private static final URI ROOT1 = DOMAIN.resolve("root1");
+    private static final URI GRANDCHILD = DOMAIN.resolve("parent/child2/grandchild");
+
+    private ComponentManagerImpl manager;
 
     public void testRegister() throws Exception {
-        Component child = EasyMock.createMock(Component.class);
-        URI name = URI.create("child");
-        EasyMock.expect(child.getUri()).andReturn(name).atLeastOnce();
-        EasyMock.replay(child);
-        manager.register(child);
-        assertEquals(child, manager.getComponent(name));
+        Component root = EasyMock.createMock(Component.class);
+        EasyMock.expect(root.getUri()).andReturn(ROOT1);
+        EasyMock.replay(root);
+        manager.register(root);
+        assertEquals(root, manager.getComponent(ROOT1));
+        EasyMock.verify(root);
+
+        EasyMock.reset(root);
+        EasyMock.expect(root.getUri()).andReturn(ROOT1);
+        EasyMock.replay(root);
+        manager.unregister(root);
+        EasyMock.verify(root);
+        assertEquals(null, manager.getComponent(ROOT1));
+    }
+
+    public void testRegisterGrandchild() throws Exception {
+        Component root = EasyMock.createMock(Component.class);
+        EasyMock.expect(root.getUri()).andReturn(GRANDCHILD);
+        EasyMock.replay(root);
+        manager.register(root);
+        assertEquals(root, manager.getComponent(GRANDCHILD));
+        EasyMock.verify(root);
     }
 
     public void testRegisterDuplicate() throws Exception {
-        Component component1 = EasyMock.createMock(Component.class);
-        URI name = URI.create("child");
-        EasyMock.expect(component1.getUri()).andReturn(name).atLeastOnce();
-        EasyMock.replay(component1);
-
-        Component component2 = EasyMock.createMock(Component.class);
-        EasyMock.expect(component2.getUri()).andReturn(name).atLeastOnce();
-        EasyMock.replay(component2);
+        Component root = EasyMock.createMock(Component.class);
+        EasyMock.expect(root.getUri()).andReturn(ROOT1);
+        EasyMock.replay(root);
+
+        Component duplicate = EasyMock.createMock(Component.class);
+        EasyMock.expect(duplicate.getUri()).andReturn(ROOT1);
+        EasyMock.replay(duplicate);
 
-        manager.register(component1);
+        manager.register(root);
+        assertEquals(root, manager.getComponent(ROOT1));
         try {
-            manager.register(component2);
+            manager.register(duplicate);
             fail();
         } catch (DuplicateNameException e) {
             // expected
         }
-    }
-
-    public void testRegisterSameNameDifferentSchemes() throws Exception {
-        Component component1 = EasyMock.createMock(Component.class);
-        URI name = URI.create("foo://component");
-        EasyMock.expect(component1.getUri()).andReturn(name).atLeastOnce();
-        EasyMock.replay(component1);
-
-        Component component2 = EasyMock.createMock(Component.class);
-        URI name2 = URI.create("bar://component");
-        EasyMock.expect(component2.getUri()).andReturn(name2).atLeastOnce();
-        EasyMock.replay(component2);
-
-        manager.register(component1);
-        manager.register(component2);
-    }
-
-    public void testUnRegister() throws Exception {
-        Component component = EasyMock.createMock(Component.class);
-        URI name = URI.create("component");
-        EasyMock.expect(component.getUri()).andReturn(name).atLeastOnce();
-        component.removeListener(EasyMock.isA(ComponentManager.class));
-        EasyMock.replay(component);
-        manager.register(component);
-        manager.unregister(component);
-        assertNull(manager.getComponent(name));
-    }
-
-    public void testStartNotification() throws Exception {
-        Component child1 = EasyMock.createMock(Component.class);
-        URI name1 = URI.create("sca://foo/child1");
-        EasyMock.expect(child1.getUri()).andReturn(name1).atLeastOnce();
-        child1.start();
-        EasyMock.replay(child1);
-
-        Component child2 = EasyMock.createMock(Component.class);
-        URI name2 = URI.create("sca://bar/child2");
-        EasyMock.expect(child2.getUri()).andReturn(name2).atLeastOnce();
-        EasyMock.replay(child2);
-
-        manager.register(child1);
-        manager.register(child2);
-        ComponentStart event = new ComponentStart(this, URI.create("sca://foo"));
-        manager.onEvent(event);
-        EasyMock.verify(child1);
-        EasyMock.verify(child2);
-    }
-
-    public void testChildStartNotification() throws Exception {
-        URI parentUri = URI.create("foo://foo");
-        Component child1 = EasyMock.createMock(Component.class);
-        URI name = URI.create("foo://foo/child1");
-        EasyMock.expect(child1.getUri()).andReturn(name).atLeastOnce();
-        child1.start();
-        EasyMock.replay(child1);
-
-        Component child2 = EasyMock.createMock(Component.class);
-        URI name2 = URI.create("foo://foo/child2");
-        EasyMock.expect(child2.getUri()).andReturn(name2).atLeastOnce();
-        child2.start();
-        EasyMock.replay(child2);
-
-        manager.register(child1);
-        manager.register(child2);
-        ComponentStart event = new ComponentStart(this, parentUri);
-        manager.onEvent(event);
-        EasyMock.verify(child2);
-        EasyMock.verify(child2);
-    }
-
-    public void testStopNotification() throws Exception {
-        Component child1 = EasyMock.createMock(Component.class);
-        URI name = URI.create("foo://foo/child1");
-        EasyMock.expect(child1.getUri()).andReturn(name).atLeastOnce();
-        child1.stop();
-        EasyMock.replay(child1);
-
-        Component child2 = EasyMock.createMock(Component.class);
-        URI name2 = URI.create("foo://bar/child2");
-        EasyMock.expect(child2.getUri()).andReturn(name2).atLeastOnce();
-        EasyMock.replay(child2);
-
-        manager.register(child1);
-        manager.register(child2);
-        ComponentStop event = new ComponentStop(this,  URI.create("foo://foo"));
-        manager.onEvent(event);
-        EasyMock.verify(child1);
-        EasyMock.verify(child2);
-    }
-
-    public void testChildStartStopNotification() throws Exception {
-        URI parentUri = URI.create("foo://foo");
-
-        Component child1 = EasyMock.createMock(Component.class);
-        URI name = URI.create("foo://foo/child1");
-        EasyMock.expect(child1.getUri()).andReturn(name).atLeastOnce();
-        child1.start();
-        child1.stop();
-        EasyMock.replay(child1);
-
-        Component child2 = EasyMock.createMock(Component.class);
-        URI name2 = URI.create("foo://foo/child2");
-        EasyMock.expect(child2.getUri()).andReturn(name2).atLeastOnce();
-        child2.start();
-        child2.stop();
-        EasyMock.replay(child2);
-
-        manager.register(child1);
-        manager.register(child2);
-        manager.onEvent(new ComponentStart(this, parentUri));
-        manager.onEvent(new ComponentStop(this, parentUri));
-        EasyMock.verify(child2);
-        EasyMock.verify(child2);
-    }
-
-    public void testChildRestart() throws Exception {
-        URI parentUri = URI.create("foo://foo");
-
-        Component child1 = EasyMock.createMock(Component.class);
-        URI name = URI.create("foo://foo/child1");
-        EasyMock.expect(child1.getUri()).andReturn(name).atLeastOnce();
-        child1.start();
-        child1.stop();
-        child1.start();
-        EasyMock.replay(child1);
-
-        Component child2 = EasyMock.createMock(Component.class);
-        URI name2 = URI.create("foo://foo/child2");
-        EasyMock.expect(child2.getUri()).andReturn(name2).atLeastOnce();
-        child2.start();
-        child2.stop();
-        child2.start();
-        EasyMock.replay(child2);
-
-        manager.register(child1);
-        manager.register(child2);
-        manager.onEvent(new ComponentStart(this, parentUri));
-        manager.onEvent(new ComponentStop(this, parentUri));
-        manager.onEvent(new ComponentStart(this, parentUri));
-        EasyMock.verify(child2);
-        EasyMock.verify(child2);
-    }
-
-    public void testMutiLevelChildStopNotification() throws Exception {
-        URI parentUri = URI.create("foo://foo");
-
-        Component child1 = EasyMock.createMock(Component.class);
-        URI name = URI.create("foo://foo/child");
-        EasyMock.expect(child1.getUri()).andReturn(name).atLeastOnce();
-        child1.stop();
-        EasyMock.replay(child1);
-
-        Component child2 = EasyMock.createMock(Component.class);
-        final URI name2 = URI.create("foo://foo/bar/child");
-        EasyMock.expect(child2.getUri()).andReturn(name2).atLeastOnce();
-        child2.stop();
-        EasyMock.expectLastCall().andStubAnswer(new IAnswer<Object>() {
-            public Object answer() throws Throwable {
-                manager.onEvent(new ComponentStop(this, name2));
-                return null;
-            }
-        });
-        EasyMock.replay(child2);
-
-        manager.register(child1);
-        manager.register(child2);
-        ComponentStop event = new ComponentStop(this, parentUri);
-        manager.onEvent(event);
-        EasyMock.verify(child1);
-        EasyMock.verify(child2);
-    }
-
-    public void testRegisterParentAfterChildStopNotification() throws Exception {
-        URI parentUri = URI.create("foo://foo");
-        final URI name1 = URI.create("foo://foo/child");
-        Component child1 = EasyMock.createMock(Component.class);
-        EasyMock.expect(child1.getUri()).andReturn(name1).atLeastOnce();
-        child1.stop();
-        EasyMock.expectLastCall().andStubAnswer(new IAnswer<Object>() {
-            public Object answer() throws Throwable {
-                manager.onEvent(new ComponentStop(this, name1));
-                return null;
-            }
-        });
-        EasyMock.replay(child1);
-
-        final URI name2 = URI.create("foo://foo/child/child");
-        Component child2 = EasyMock.createMock(Component.class);
-        EasyMock.expect(child2.getUri()).andReturn(name2).atLeastOnce();
-        child2.stop();
-        EasyMock.replay(child2);
-
-        // register child2 before child1
-        manager.register(child2);
-        manager.register(child1);
-        ComponentStop event = new ComponentStop(this, parentUri);
-        manager.onEvent(event);
-        EasyMock.verify(child1);
-        EasyMock.verify(child2);
+        assertEquals(root, manager.getComponent(ROOT1));
+        EasyMock.verify(root);
+        EasyMock.verify(duplicate);
     }
 
     protected void setUp() throws Exception {

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java?view=diff&rev=508831&r1=508830&r2=508831
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java Sat Feb 17 16:12:31 2007
@@ -66,12 +66,12 @@
     private ComponentDefinition<SystemCompositeImplementation> componentDefinition;
     private SystemCompositeImplementation implementation;
     private ComponentManager manager;
+    private URI componentId;
 
     @SuppressWarnings("unchecked")
     public void testBoot1Load() throws LoaderException {
         CompositeComponent parent = createNiceMock(CompositeComponent.class);
         URI uri = URI.create("sca://parent");
-        deploymentContext.getPathNames().add("sca://parent");
         EasyMock.expect(parent.getUri()).andReturn(uri).atLeastOnce();
         EasyMock.replay(parent);
         URL scdl = BootstrapDeployerTestCase.class.getResource("boot1.scdl");
@@ -89,7 +89,7 @@
         assertEquals(2, services.size()); // included counts
         ServiceDefinition serviceDefinition = services.get("service");
         assertNotNull(serviceDefinition);
-        assertEquals("sca://parent#service", serviceDefinition.getUri().toString());
+        assertEquals(componentId.resolve("#service"), serviceDefinition.getUri());
         assertEquals(BasicInterface.class, serviceDefinition.getServiceContract().getInterfaceClass());
         Collection<BindingDefinition> bindings = serviceDefinition.getBindings();
         assertTrue(bindings.isEmpty());
@@ -127,8 +127,8 @@
         replay(parent);
         // load the boot1 file using the bootstrap deployer
         componentDefinition.setUri(URI.create("sca://parent/simple"));
-        Component component = deployer.deploy(parent, componentDefinition);
-        assertNotNull(component);
+        Collection<Component> components = deployer.deploy(parent, componentDefinition);
+        assertFalse(components.isEmpty());
         verify(parent);
     }
 
@@ -139,14 +139,17 @@
         replay(parent);
         // load the boot2 file using the bootstrap deployer
         componentDefinition.setUri(URI.create("newDeployer"));
-        CompositeComponent component = (CompositeComponent) deployer.deploy(parent, componentDefinition);
-        assertNotNull(component);
+        Collection<Component> components = deployer.deploy(parent, componentDefinition);
+        assertFalse(components.isEmpty());
         verify(parent);
-        component.start();
+        for (Component component : components) {
+            component.start();
+        }
     }
 
     protected void setUp() throws Exception {
         super.setUp();
+        componentId = URI.create("sca://localhost/parent");
         XMLInputFactory xmlFactory = XMLInputFactory.newInstance();
         DefaultAutowireResolver resolver = new DefaultAutowireResolver();
         manager = new ComponentManagerImpl(null, resolver);
@@ -156,7 +159,7 @@
         Bootstrapper bootstrapper =
             new DefaultBootstrapper(monitorFactory, xmlFactory, manager, resolver, connector);
         deployer = (DeployerImpl) bootstrapper.createDeployer();
-        deploymentContext = new RootDeploymentContext(null, null, null, xmlFactory, null);
+        deploymentContext = new RootDeploymentContext(null, null, componentId, xmlFactory, null);
         implementation = new SystemCompositeImplementation();
         implementation.setClassLoader(getClass().getClassLoader());
         componentDefinition = new ComponentDefinition<SystemCompositeImplementation>(implementation);

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeBuilderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeBuilderTestCase.java?view=diff&rev=508831&r1=508830&r2=508831
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeBuilderTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeBuilderTestCase.java Sat Feb 17 16:12:31 2007
@@ -19,10 +19,12 @@
 package org.apache.tuscany.core.implementation.composite;
 
 import java.net.URI;
+import java.util.Map;
 
 import org.apache.tuscany.spi.component.AtomicComponent;
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.component.ScopeContainerMonitor;
+import org.apache.tuscany.spi.component.Component;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.idl.java.JavaInterfaceProcessorRegistry;
 import org.apache.tuscany.spi.idl.java.JavaServiceContract;
@@ -72,22 +74,19 @@
     @SuppressWarnings("unchecked")
     public void testBuild() throws Exception {
         CompositeBuilder builder = new CompositeBuilder();
-        ComponentManagerImpl mgr = new ComponentManagerImpl();
-        BuilderRegistryImpl builderRegistry = new BuilderRegistryImpl(null, mgr);
+        BuilderRegistryImpl builderRegistry = new BuilderRegistryImpl(null);
         JavaComponentBuilder jBuilder = new JavaComponentBuilder();
         builderRegistry.register(JavaImplementation.class, jBuilder);
         builderRegistry.register(CompositeImplementation.class, builder);
         builderRegistry.register(LocalBindingDefinition.class, new LocalBindingBuilder());
         builder.setBuilderRegistry(builderRegistry);
 
-        CompositeComponent parent = new CompositeComponentImpl(PARENT_COMPONENT, null);
-        mgr.register(parent);
         CompositeComponent component =
-            (CompositeComponent) builder.build(parent, createTopComponentDef(), deploymentContext);
-        mgr.register(component); // manually register this
-        CompositeComponent sourceComponent = (CompositeComponent) mgr.getComponent(SOURCE_COMPONENT);
+            (CompositeComponent) builder.build(null, createTopComponentDef(), deploymentContext);
+        Map<URI,Component> components = deploymentContext.getComponents();
+        CompositeComponent sourceComponent = (CompositeComponent) components.get(SOURCE_COMPONENT);
         assertNotNull(sourceComponent.getService("InnerSourceService"));
-        AtomicComponent innerSourceComponent = (AtomicComponent) mgr.getComponent(INNER_SOURCE_COMPONENT);
+        AtomicComponent innerSourceComponent = (AtomicComponent) components.get(INNER_SOURCE_COMPONENT);
         assertNotNull(innerSourceComponent);
     }
 
@@ -96,7 +95,7 @@
         ScopeContainerMonitor monitor = EasyMock.createNiceMock(ScopeContainerMonitor.class);
         CompositeScopeContainer container = new CompositeScopeContainer(monitor);
         container.start();
-        deploymentContext = new RootDeploymentContext(null, null, null, null, container);
+        deploymentContext = new RootDeploymentContext(null, null, TOP_COMPONENT, null, container);
     }
 
     private ComponentDefinition createTopComponentDef() throws Exception {

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeComponentImplTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeComponentImplTestCase.java?view=diff&rev=508831&r1=508830&r2=508831
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeComponentImplTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeComponentImplTestCase.java Sat Feb 17 16:12:31 2007
@@ -69,7 +69,6 @@
             }
         };
         RuntimeEventListener listener = createMock(RuntimeEventListener.class);
-        listener.onEvent(isA(ComponentStart.class));
         listener.onEvent(eq(event));
         expectLastCall();
         replay(listener);

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderNoBindingTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderNoBindingTestCase.java?view=diff&rev=508831&r1=508830&r2=508831
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderNoBindingTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderNoBindingTestCase.java Sat Feb 17 16:12:31 2007
@@ -65,6 +65,7 @@
 
     protected void setUp() throws Exception {
         super.setUp();
+        URI componentId = URI.create("sca://localhost/parent/");
         parent = EasyMock.createMock(CompositeComponent.class);
         EasyMock.expect(parent.getUri()).andReturn(URI.create("parent"));
         EasyMock.replay(parent);
@@ -96,7 +97,9 @@
         EasyMock.replay(reader);
         ctx = EasyMock.createMock(DeploymentContext.class);
         List<String> names = new ArrayList<String>();
-        EasyMock.expect(ctx.getPathNames()).andReturn(names).atLeastOnce();
+        EasyMock.expect(ctx.getClassLoader()).andReturn(null);
+        EasyMock.expect(ctx.getScdlLocation()).andReturn(null);
+        EasyMock.expect(ctx.getComponentId()).andReturn(componentId);
         EasyMock.replay(ctx);
 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org