You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2007/04/13 22:12:14 UTC

svn commit: r528640 - in /incubator/tuscany/java/sca/modules: contribution/src/main/java/org/apache/tuscany/services/spi/contribution/ core-spi/src/main/java/org/apache/tuscany/spi/component/ core/src/main/java/org/apache/tuscany/core/binding/local/ co...

Author: rfeng
Date: Fri Apr 13 13:12:12 2007
New Revision: 528640

URL: http://svn.apache.org/viewvc?view=rev&rev=528640
Log:
More fix to the DeployerImpl to handle recursive composites

Added:
    incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/services/spi/contribution/ContributionPostProcessor.java   (with props)
    incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/services/spi/contribution/ContributionPostProcessorRegistry.java   (with props)
Modified:
    incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/component/ComponentManager.java
    incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/binding/local/LocalBindingBuilder.java
    incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/binding/local/LocalBindingDefinition.java
    incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java
    incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java
    incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/component/ComponentManagerImpl.java
    incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java
    incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingBuilderTestCase.java
    incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryNoBindingsTestCase.java
    incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java
    incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/context/PojoAtomicComponent.java

Added: incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/services/spi/contribution/ContributionPostProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/services/spi/contribution/ContributionPostProcessor.java?view=auto&rev=528640
==============================================================================
--- incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/services/spi/contribution/ContributionPostProcessor.java (added)
+++ incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/services/spi/contribution/ContributionPostProcessor.java Fri Apr 13 13:12:12 2007
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.services.spi.contribution;
+
+import org.apache.tuscany.contribution.Contribution;
+
+/**
+ * A processor invoked after the contribution is loaded 
+ * 
+ * @version $Rev$ $Date$
+ */
+public interface ContributionPostProcessor {
+    void visit(Contribution contribution);
+}

Propchange: incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/services/spi/contribution/ContributionPostProcessor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/services/spi/contribution/ContributionPostProcessor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/services/spi/contribution/ContributionPostProcessorRegistry.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/services/spi/contribution/ContributionPostProcessorRegistry.java?view=auto&rev=528640
==============================================================================
--- incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/services/spi/contribution/ContributionPostProcessorRegistry.java (added)
+++ incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/services/spi/contribution/ContributionPostProcessorRegistry.java Fri Apr 13 13:12:12 2007
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.services.spi.contribution;
+
+/**
+ * The registry to host all the contribution post processors
+ * 
+ * @version $Rev$ $Date$
+ */
+public interface ContributionPostProcessorRegistry {
+    /**
+     * Add a ContributionPostProcessor
+     * @param processor
+     */
+    void register(ContributionPostProcessor processor);
+    /**
+     * Remove a ContributionPostProcessor
+     * @param processor
+     */
+    void unregister(ContributionPostProcessor processor);
+}

Propchange: incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/services/spi/contribution/ContributionPostProcessorRegistry.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/services/spi/contribution/ContributionPostProcessorRegistry.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/component/ComponentManager.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/component/ComponentManager.java?view=diff&rev=528640&r1=528639&r2=528640
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/component/ComponentManager.java (original)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/component/ComponentManager.java Fri Apr 13 13:12:12 2007
@@ -20,6 +20,7 @@
 
 import java.net.URI;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.tuscany.assembly.ComponentService;
 import org.apache.tuscany.assembly.Contract;
@@ -81,5 +82,11 @@
      * @return the component or null if not found
      */
     Component getComponent(URI uri);
+    
+    List<SCAObject> getSCAObjects();
+    List<Object> getModelObjects();
+    void add(SCAObject object, Object model);
+    <T extends SCAObject> T getSCAObject(Class<T> objectType, Object model);
+    <T> T getModelObject(Class<T> modelType, SCAObject object);
 
 }

Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/binding/local/LocalBindingBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/binding/local/LocalBindingBuilder.java?view=diff&rev=528640&r1=528639&r2=528640
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/binding/local/LocalBindingBuilder.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/binding/local/LocalBindingBuilder.java Fri Apr 13 13:12:12 2007
@@ -44,14 +44,14 @@
     public ServiceBinding build(CompositeService serviceDefinition,
                                 LocalBindingDefinition bindingDefinition,
                                 DeploymentContext context) throws BuilderException {
-        return new LocalServiceBinding(URI.create("#" + serviceDefinition.getName()));
+        return new LocalServiceBinding(URI.create(context.getComponentId() + "#" + serviceDefinition.getName()));
     }
 
     @Override
     public ReferenceBinding build(CompositeReference referenceDefinition,
                                   LocalBindingDefinition bindingDefinition,
                                   DeploymentContext context) throws BuilderException {
-        return new LocalReferenceBinding(URI.create("#" + referenceDefinition.getName()), URI.create(bindingDefinition
-            .getURI()));
+        return new LocalReferenceBinding(URI.create(context.getComponentId() + "#" + referenceDefinition.getName()),
+                                         URI.create(bindingDefinition.getURI()));
     }
 }

Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/binding/local/LocalBindingDefinition.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/binding/local/LocalBindingDefinition.java?view=diff&rev=528640&r1=528639&r2=528640
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/binding/local/LocalBindingDefinition.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/binding/local/LocalBindingDefinition.java Fri Apr 13 13:12:12 2007
@@ -32,7 +32,6 @@
 
     public LocalBindingDefinition() {
         super();
-        setURI("default");
     }
 
     public LocalBindingDefinition(URI targetUri) {

Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java?view=diff&rev=528640&r1=528639&r2=528640
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java Fri Apr 13 13:12:12 2007
@@ -144,7 +144,7 @@
      * @return a new Builder
      */
     private BuilderRegistry createBuilder(ScopeRegistry scopeRegistry) {
-        BuilderRegistryImpl builderRegistry = new BuilderRegistryImpl(scopeRegistry);
+        BuilderRegistryImpl builderRegistry = new BuilderRegistryImpl(componentManager, scopeRegistry);
         CompositeBuilder compositeBuilder = new CompositeBuilder();
         compositeBuilder.setBuilderRegistry(builderRegistry);
         compositeBuilder.setScopeRegistry(scopeRegistry);

Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java?view=diff&rev=528640&r1=528639&r2=528640
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java Fri Apr 13 13:12:12 2007
@@ -23,11 +23,13 @@
 import java.util.Map;
 
 import org.apache.tuscany.assembly.Binding;
+import org.apache.tuscany.assembly.ComponentReference;
 import org.apache.tuscany.assembly.ComponentType;
 import org.apache.tuscany.assembly.CompositeReference;
 import org.apache.tuscany.assembly.CompositeService;
 import org.apache.tuscany.assembly.Implementation;
 import org.apache.tuscany.assembly.Property;
+import org.apache.tuscany.assembly.SCABinding;
 import org.apache.tuscany.assembly.Service;
 import org.apache.tuscany.core.binding.local.LocalBindingDefinition;
 import org.apache.tuscany.core.implementation.composite.ReferenceImpl;
@@ -59,14 +61,13 @@
 public class BuilderRegistryImpl implements BuilderRegistry {
     private ScopeRegistry scopeRegistry;
     private ComponentManager componentManager;
-    private Map<SCAObject, Object> models = new HashMap<SCAObject, Object>();
 
     private final Map<Class<? extends Implementation>, ComponentBuilder> componentBuilders = new HashMap<Class<? extends Implementation>, ComponentBuilder>();
     private final Map<Class<? extends Binding>, BindingBuilder<? extends Binding>> bindingBuilders = new HashMap<Class<? extends Binding>, BindingBuilder<? extends Binding>>();
 
-    public BuilderRegistryImpl(@org.osoa.sca.annotations.Reference
-    ScopeRegistry scopeRegistry) {
+    public BuilderRegistryImpl(ComponentManager componentManager, ScopeRegistry scopeRegistry) {
         this.scopeRegistry = scopeRegistry;
+        this.componentManager = componentManager;
     }
 
     public <I extends Implementation> void register(Class<I> implClass, ComponentBuilder builder) {
@@ -111,7 +112,7 @@
             throw new NoRegisteredBuilderException("No builder registered for implementation", name);
         }
         Component component = componentBuilder.build(componentDef, context);
-        models.put(component, componentDef);
+        componentManager.add(component, componentDef);
         assert component != null;
         Map<String, Property> properties = new HashMap<String, Property>();
         for (Property p : componentDef.getProperties()) {
@@ -159,14 +160,20 @@
     @SuppressWarnings( {"unchecked"})
     public org.apache.tuscany.spi.component.Service build(CompositeService serviceDefinition, DeploymentContext context)
         throws BuilderException {
-        URI uri = URI.create("#" + serviceDefinition.getName());
+        if (serviceDefinition.getPromotedService() == null) {
+            return null;
+        }
+        URI uri = URI.create(context.getComponentId() + "#" + serviceDefinition.getName());
         if (serviceDefinition.getBindings().isEmpty()) {
             // if no bindings are configured, default to the local binding.
             // this should be changed to allow runtime selection
             if (serviceDefinition.getBindings().isEmpty()) {
                 // TODO JFM implement capability for the runtime to choose a
                 // binding
-                serviceDefinition.getBindings().add(new LocalBindingDefinition());
+                org.apache.tuscany.assembly.Component component = serviceDefinition.getPromotedService()
+                    .getBinding(SCABinding.class).getComponent();
+                URI targetURI = URI.create(context.getComponentId() + component.getName());
+                serviceDefinition.getBindings().add(new LocalBindingDefinition(targetURI));
             }
         }
         // FIXME:
@@ -182,20 +189,27 @@
             ServiceBinding binding = bindingBuilder.build(serviceDefinition, definition, context);
             service.addServiceBinding(binding);
         }
-        models.put(service, serviceDefinition);
+        componentManager.add(service, serviceDefinition);
         return service;
     }
 
     @SuppressWarnings("unchecked")
     public Reference build(CompositeReference referenceDefinition, DeploymentContext context) throws BuilderException {
-        URI uri = URI.create("#" + referenceDefinition.getName());
+        if (referenceDefinition.getPromotedReferences().isEmpty()) {
+            return null;
+        }
+        URI uri = URI.create(context.getComponentId() + "#" + referenceDefinition.getName());
         if (referenceDefinition.getBindings().isEmpty()) {
             // if no bindings are configured, default to the local binding.
             // this should be changed to allow runtime selection
             if (referenceDefinition.getBindings().isEmpty()) {
                 // TODO JFM implement capability for the runtime to choose a
                 // binding
-                referenceDefinition.getBindings().add(new LocalBindingDefinition());
+                ComponentReference componentReference = referenceDefinition.getPromotedReferences().get(0);
+                org.apache.tuscany.assembly.Component component = componentReference.getBinding(SCABinding.class)
+                    .getComponent();
+                URI targetURI = URI.create(context.getComponentId() + component.getName());
+                referenceDefinition.getBindings().add(new LocalBindingDefinition(targetURI));
             }
         }
 
@@ -208,15 +222,8 @@
             reference.addReferenceBinding(binding);
 
         }
-        models.put(reference, referenceDefinition);
+        componentManager.add(reference, referenceDefinition);
         return reference;
-    }
-
-    /**
-     * @return the models
-     */
-    public Map<SCAObject, Object> getModels() {
-        return models;
     }
 
 }

Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/component/ComponentManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/component/ComponentManagerImpl.java?view=diff&rev=528640&r1=528639&r2=528640
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/component/ComponentManagerImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/component/ComponentManagerImpl.java Fri Apr 13 13:12:12 2007
@@ -19,6 +19,7 @@
 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;
@@ -29,6 +30,7 @@
 import org.apache.tuscany.spi.component.ComponentManager;
 import org.apache.tuscany.spi.component.DuplicateNameException;
 import org.apache.tuscany.spi.component.RegistrationException;
+import org.apache.tuscany.spi.component.SCAObject;
 import org.apache.tuscany.spi.event.Event;
 import org.apache.tuscany.spi.services.management.TuscanyManagementService;
 
@@ -40,6 +42,10 @@
 public class ComponentManagerImpl implements ComponentManager {
     private TuscanyManagementService managementService;
     private Map<URI, Component> components;
+    
+    private List<SCAObject> scaObjects = new ArrayList<SCAObject>();
+    private List<Object> modelObjects = new ArrayList<Object>();
+    
 
     public ComponentManagerImpl() {
         components = new ConcurrentHashMap<URI, Component>();
@@ -87,5 +93,36 @@
 
     public void onEvent(Event event) {
         throw new UnsupportedOperationException();
+    }
+
+    public void add(SCAObject object, Object model) {
+        scaObjects.add(object);
+        modelObjects.add(model);
+    }
+
+    public <T> T getModelObject(Class<T> modelType, SCAObject object) {
+        for(int i=0; i<scaObjects.size(); i++) {
+            if(scaObjects.get(i) == object) {
+                return modelType.cast(modelObjects.get(i));
+            }
+        }
+        return null;
+    }
+
+    public List<Object> getModelObjects() {
+        return modelObjects;
+    }
+
+    public <T extends SCAObject> T getSCAObject(Class<T> objectType, Object model) {
+        for(int i=0; i<modelObjects.size(); i++) {
+            if(modelObjects.get(i) == model) {
+                return objectType.cast(scaObjects.get(i));
+            }
+        }
+        return null;
+    }
+
+    public List<SCAObject> getSCAObjects() {
+        return scaObjects;
     }
 }

Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java?view=diff&rev=528640&r1=528639&r2=528640
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java Fri Apr 13 13:12:12 2007
@@ -125,35 +125,39 @@
 
         // build runtime artifacts
         build(componentDef, deploymentContext);
-
-        Map<SCAObject, Object> models = ((BuilderRegistryImpl)builder).getModels();
-        for (Map.Entry<SCAObject, Object> entry : models.entrySet()) {
-            Object model = entry.getValue();
+        
+        Collection<Component> components = deploymentContext.getComponents().values();
+        for (Component toRegister : components) {
+            try {
+                componentManager.register(toRegister);
+            } catch (RegistrationException e) {
+                throw new BuilderInstantiationException("Error registering component", e);
+            }
+        }
+        
+        List<SCAObject> scaObjects = componentManager.getSCAObjects();
+        List<Object> modelObjects = componentManager.getModelObjects();
+        for (int i = 0; i < scaObjects.size(); i++) {
+            Object model = modelObjects.get(i);
+            SCAObject scaObject = scaObjects.get(i);
             if (model instanceof org.apache.tuscany.assembly.Component) {
-                connect(models, (Component)entry.getKey(), (org.apache.tuscany.assembly.Component)model);
+                connect((Component)scaObject, (org.apache.tuscany.assembly.Component)model);
             } else if (model instanceof CompositeReference) {
                 try {
-                    connect(models, (Reference)entry.getKey(), (CompositeReference)model);
+                    connect((Reference)scaObject, (CompositeReference)model);
                 } catch (IncompatibleInterfaceContractException e) {
                     throw new IllegalStateException(e);
                 }
             } else if (model instanceof CompositeService) {
                 try {
-                    connect(models, (Service)entry.getKey(), (CompositeService)model);
+                    connect((Service)scaObject, (CompositeService)model);
                 } catch (IncompatibleInterfaceContractException e) {
                     throw new IllegalStateException(e);
                 }
             }
         }
 
-        Collection<Component> components = deploymentContext.getComponents().values();
-        for (Component toRegister : components) {
-            try {
-                componentManager.register(toRegister);
-            } catch (RegistrationException e) {
-                throw new BuilderInstantiationException("Error registering component", e);
-            }
-        }
+
         return components;
     }
 
@@ -179,9 +183,7 @@
         return null;
     }
 
-    public void connect(Map<SCAObject, Object> models,
-                        Component source,
-                        org.apache.tuscany.assembly.Component definition) throws WiringException {
+    public void connect(Component source, org.apache.tuscany.assembly.Component definition) throws WiringException {
 
         if (definition.getImplementation() instanceof Composite) {
             // FIXME: Should we connect recusively?
@@ -198,7 +200,7 @@
                 // TODO: Assume a component reference can only be promoted by at
                 // most one composite reference
                 CompositeReference compositeReference = promoted.get(0);
-                Reference target = (Reference)getSCAObject(models, compositeReference);
+                Reference target = componentManager.getSCAObject(Reference.class, compositeReference);
                 // FIXME: Assume we only have one binding
                 ReferenceBinding binding = target.getReferenceBindings().get(0);
                 URI targetUri = binding.getTargetUri();
@@ -216,7 +218,7 @@
                 }
                 binding.setWire(wire);
                 try {
-                    attachInvokers(targetUri.getFragment(), wire, binding, binding);
+                    attachInvokers(targetUri.getFragment(), wire, source, binding);
                 } catch (TargetInvokerCreationException e) {
                     throw new WireCreationException("Error creating invoker", sourceUri, targetUri, e);
                 }
@@ -226,7 +228,7 @@
                 for (ComponentService service : services) {
                     org.apache.tuscany.assembly.Component targetCompoent = service.getBinding(SCABinding.class)
                         .getComponent();
-                    Component target = (Component)getSCAObject(models, targetCompoent);
+                    Component target = componentManager.getSCAObject(Component.class, targetCompoent);
                     URI targetUri = URI.create(target.getUri() + "#" + service.getName());
                     if (target == null && (refDefinition.getMultiplicity() == Multiplicity.ZERO_ONE || refDefinition
                             .getMultiplicity() == Multiplicity.ZERO_N)) {
@@ -272,18 +274,12 @@
         }
     }
 
-    protected void connect(Map<SCAObject, Object> models, Service service, CompositeService definition)
-        throws WiringException, IncompatibleInterfaceContractException {
+    protected void connect(Service service, CompositeService definition) throws WiringException,
+        IncompatibleInterfaceContractException {
         SCABinding scaBinding = definition.getPromotedService().getBinding(SCABinding.class);
         org.apache.tuscany.assembly.Component targetComponent = scaBinding.getComponent();
 
-        Component target = null;
-        for (Map.Entry<SCAObject, Object> entry : models.entrySet()) {
-            if (entry.getValue() == targetComponent) {
-                target = (Component)entry.getKey();
-                break;
-            }
-        }
+        Component target = componentManager.getSCAObject(Component.class, targetComponent);
         if (target == null) {
             throw new ComponentNotFoundException("Target not found", URI.create(targetComponent.getName()));
         }
@@ -305,16 +301,17 @@
         }
     }
 
-    protected void connect(Map<SCAObject, Object> models,
-                           org.apache.tuscany.spi.component.Reference reference,
-                           CompositeReference definition) throws WiringException,
-        IncompatibleInterfaceContractException {
+    protected void connect(org.apache.tuscany.spi.component.Reference reference, CompositeReference definition)
+        throws WiringException, IncompatibleInterfaceContractException {
         URI sourceUri = reference.getUri();
         for (ReferenceBinding binding : reference.getReferenceBindings()) {
             // create wire
             if (Wire.LOCAL_BINDING.equals(binding.getBindingType())) {
                 URI targetUri = binding.getTargetUri();
                 InterfaceContract contract = binding.getBindingInterfaceContract();
+                if (contract == null) {
+                    contract = definition.getInterfaceContract();
+                }
                 QName type = binding.getBindingType();
                 Wire wire = createWire(sourceUri, targetUri, definition.getInterfaceContract(), contract, type);
                 binding.setWire(wire);

Modified: incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingBuilderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingBuilderTestCase.java?view=diff&rev=528640&r1=528639&r2=528640
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingBuilderTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingBuilderTestCase.java Fri Apr 13 13:12:12 2007
@@ -18,11 +18,15 @@
  */
 package org.apache.tuscany.core.binding.local;
 
+import java.net.URI;
+
 import junit.framework.TestCase;
 
 import org.apache.tuscany.assembly.CompositeService;
 import org.apache.tuscany.assembly.impl.CompositeServiceImpl;
+import org.apache.tuscany.core.deployer.RootDeploymentContext;
 import org.apache.tuscany.spi.component.ServiceBinding;
+import org.apache.tuscany.spi.deployer.DeploymentContext;
 
 /**
  * @version $Rev$ $Date$
@@ -33,7 +37,9 @@
         LocalBindingBuilder builder = new LocalBindingBuilder();
         CompositeService def = new CompositeServiceImpl();
         def.setName("foo");
-        ServiceBinding binding = builder.build(def, null, null);
+        DeploymentContext context = new RootDeploymentContext(null, URI.create("default"), URI.create("/default/"),
+                                                              null, null);
+        ServiceBinding binding = builder.build(def, null, context);
         assertEquals(LocalServiceBinding.class, binding.getClass());
     }
 }

Modified: incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryNoBindingsTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryNoBindingsTestCase.java?view=diff&rev=528640&r1=528639&r2=528640
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryNoBindingsTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryNoBindingsTestCase.java Fri Apr 13 13:12:12 2007
@@ -18,19 +18,27 @@
  */
 package org.apache.tuscany.core.builder;
 
+import java.net.URI;
+
 import junit.framework.TestCase;
 
+import org.apache.tuscany.assembly.ComponentReference;
 import org.apache.tuscany.assembly.ComponentService;
 import org.apache.tuscany.assembly.CompositeReference;
 import org.apache.tuscany.assembly.CompositeService;
 import org.apache.tuscany.assembly.Multiplicity;
+import org.apache.tuscany.assembly.SCABinding;
+import org.apache.tuscany.assembly.impl.ComponentImpl;
+import org.apache.tuscany.assembly.impl.ComponentReferenceImpl;
 import org.apache.tuscany.assembly.impl.ComponentServiceImpl;
 import org.apache.tuscany.assembly.impl.CompositeReferenceImpl;
 import org.apache.tuscany.assembly.impl.CompositeServiceImpl;
+import org.apache.tuscany.assembly.impl.SCABindingImpl;
 import org.apache.tuscany.core.binding.local.LocalBindingBuilder;
 import org.apache.tuscany.core.binding.local.LocalBindingDefinition;
 import org.apache.tuscany.core.binding.local.LocalReferenceBinding;
 import org.apache.tuscany.core.binding.local.LocalServiceBinding;
+import org.apache.tuscany.core.component.ComponentManagerImpl;
 import org.apache.tuscany.spi.builder.BuilderRegistry;
 import org.apache.tuscany.spi.component.Component;
 import org.apache.tuscany.spi.component.Reference;
@@ -56,6 +64,9 @@
         ComponentService componentService = new ComponentServiceImpl();
         componentService.setName("foo");
         definition.setPromotedService(componentService);
+        SCABinding binding2 = new SCABindingImpl();
+        binding2.setComponent(new ComponentImpl());
+        componentService.getBindings().add(binding2);
         EasyMock.replay(deploymentContext);
         EasyMock.replay(parent);
 
@@ -71,6 +82,12 @@
         ReferenceBinding binding = EasyMock.createNiceMock(ReferenceBinding.class);
         EasyMock.replay(binding);
         CompositeReference definition = new CompositeReferenceImpl();
+        ComponentReference componentReference = new ComponentReferenceImpl();
+        componentReference.setName("foo");
+        definition.getPromotedReferences().add(componentReference);
+        SCABinding binding2 = new SCABindingImpl();
+        binding2.setComponent(new ComponentImpl());
+        componentReference.getBindings().add(binding2);
         definition.setName("foo");
         definition.setMultiplicity(Multiplicity.ONE_ONE);
         EasyMock.replay(deploymentContext);
@@ -87,8 +104,9 @@
     protected void setUp() throws Exception {
         super.setUp();
         deploymentContext = EasyMock.createMock(DeploymentContext.class);
+        EasyMock.expect(deploymentContext.getComponentId()).andReturn(URI.create("/default/")).anyTimes();
         parent = EasyMock.createNiceMock(Component.class);
-        registry = new BuilderRegistryImpl(null);
+        registry = new BuilderRegistryImpl(new ComponentManagerImpl(), null);
         registry.register(LocalBindingDefinition.class, new LocalBindingBuilder());
     }
 

Modified: incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java?view=diff&rev=528640&r1=528639&r2=528640
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java Fri Apr 13 13:12:12 2007
@@ -24,6 +24,7 @@
 
 import junit.framework.TestCase;
 
+import org.apache.tuscany.assembly.ComponentReference;
 import org.apache.tuscany.assembly.ComponentService;
 import org.apache.tuscany.assembly.Composite;
 import org.apache.tuscany.assembly.CompositeReference;
@@ -31,13 +32,17 @@
 import org.apache.tuscany.assembly.Implementation;
 import org.apache.tuscany.assembly.Multiplicity;
 import org.apache.tuscany.assembly.Property;
+import org.apache.tuscany.assembly.SCABinding;
 import org.apache.tuscany.assembly.impl.BindingImpl;
 import org.apache.tuscany.assembly.impl.ComponentImpl;
+import org.apache.tuscany.assembly.impl.ComponentReferenceImpl;
 import org.apache.tuscany.assembly.impl.ComponentServiceImpl;
 import org.apache.tuscany.assembly.impl.ComponentTypeImpl;
 import org.apache.tuscany.assembly.impl.CompositeImpl;
 import org.apache.tuscany.assembly.impl.CompositeReferenceImpl;
 import org.apache.tuscany.assembly.impl.CompositeServiceImpl;
+import org.apache.tuscany.assembly.impl.SCABindingImpl;
+import org.apache.tuscany.core.component.ComponentManagerImpl;
 import org.apache.tuscany.core.component.scope.ScopeRegistryImpl;
 import org.apache.tuscany.core.component.scope.StatelessScopeContainer;
 import org.apache.tuscany.spi.Scope;
@@ -99,7 +104,7 @@
 
         ScopeRegistry scopeRegistry = new ScopeRegistryImpl();
         scopeRegistry.register(scopeContainer);
-        BuilderRegistry registry = new BuilderRegistryImpl(scopeRegistry);
+        BuilderRegistry registry = new BuilderRegistryImpl(new ComponentManagerImpl(), scopeRegistry);
         registry.register(Composite.class, builder);
 
         assertSame(component, registry.build(componentDefinition, deploymentContext));
@@ -108,7 +113,7 @@
 
     @SuppressWarnings({"unchecked"})
     public void testServiceBindingBuilderDispatch() throws Exception {
-        BuilderRegistry registry = new BuilderRegistryImpl(null);
+        BuilderRegistry registry = new BuilderRegistryImpl(new ComponentManagerImpl(), null);
         ServiceBinding binding = EasyMock.createNiceMock(ServiceBinding.class);
         EasyMock.replay(binding);
         BindingBuilder<MockBindingDefinition> builder = EasyMock.createMock(BindingBuilder.class);
@@ -124,6 +129,9 @@
         definition.getBindings().add(new MockBindingDefinition());
         ComponentService target = new ComponentServiceImpl();
         target.setName("foo");
+        SCABinding binding2 = new SCABindingImpl();
+        binding2.setComponent(new ComponentImpl());
+        target.getBindings().add(binding2);
         definition.setPromotedService(target);
         Service service = registry.build(definition, deploymentContext);
         assertEquals(2, service.getServiceBindings().size());
@@ -131,7 +139,7 @@
 
     @SuppressWarnings({"unchecked"})
     public void testReferenceBindingBuilderDispatch() throws Exception {
-        BuilderRegistry registry = new BuilderRegistryImpl(null);
+        BuilderRegistry registry = new BuilderRegistryImpl(new ComponentManagerImpl(), null);
         ReferenceBinding binding = EasyMock.createNiceMock(ReferenceBinding.class);
         EasyMock.replay(binding);
         BindingBuilder<MockBindingDefinition> builder = EasyMock.createMock(BindingBuilder.class);
@@ -146,6 +154,14 @@
         definition.setMultiplicity(Multiplicity.ONE_ONE);
         definition.getBindings().add(new MockBindingDefinition());
         definition.getBindings().add(new MockBindingDefinition());
+        
+        ComponentReference componentReference = new ComponentReferenceImpl();
+        componentReference.setName("foo");
+        definition.getPromotedReferences().add(componentReference);
+        SCABinding binding2 = new SCABindingImpl();
+        binding2.setComponent(new ComponentImpl());
+        componentReference.getBindings().add(binding2);
+        
         Reference reference = registry.build(definition, deploymentContext);
         assertEquals(2, reference.getReferenceBindings().size());
     }

Modified: incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/context/PojoAtomicComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/context/PojoAtomicComponent.java?view=diff&rev=528640&r1=528639&r2=528640
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/context/PojoAtomicComponent.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/context/PojoAtomicComponent.java Fri Apr 13 13:12:12 2007
@@ -219,8 +219,13 @@
                     }
                     configuration.setObjectFactories(element, factories);
                 } else {
-                    ObjectFactory<?> factory = createWireFactory(element.getType(), wireList.get(0));
-                    configuration.setObjectFactory(element, factory);
+                    if (wireList == null && ref.getMultiplicity() == Multiplicity.ONE_ONE) {
+                        throw new IllegalStateException("Required reference is missing: " + ref.getName());
+                    }
+                    if (wireList != null && !wireList.isEmpty()) {
+                        ObjectFactory<?> factory = createWireFactory(element.getType(), wireList.get(0));
+                        configuration.setObjectFactory(element, factory);
+                    }
                 }
             }
         }



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