You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jm...@apache.org on 2006/12/30 22:42:28 UTC

svn commit: r491325 [2/6] - in /incubator/tuscany/java/sca: kernel/core/src/main/java/org/apache/tuscany/core/binding/ kernel/core/src/main/java/org/apache/tuscany/core/binding/local/ kernel/core/src/main/java/org/apache/tuscany/core/builder/ kernel/co...

Added: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/ServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/ServiceImpl.java?view=auto&rev=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/ServiceImpl.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/ServiceImpl.java Sat Dec 30 13:42:22 2006
@@ -0,0 +1,99 @@
+/*
+ * 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.core.implementation.composite;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.net.URI;
+
+import org.apache.tuscany.spi.component.AbstractSCAObject;
+import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.component.Service;
+import org.apache.tuscany.spi.component.ServiceBinding;
+import org.apache.tuscany.spi.model.Scope;
+import org.apache.tuscany.spi.model.ServiceContract;
+
+/**
+ * The default implementation of a {@link Service}
+ *
+ * @version $Rev$ $Date$
+ */
+public class ServiceImpl extends AbstractSCAObject implements Service {
+    private ServiceContract<?> serviceContract;
+    private List<ServiceBinding> bindings = new ArrayList<ServiceBinding>();
+    private boolean system;
+    private URI targetUri;
+
+    public ServiceImpl(String name, CompositeComponent parent, ServiceContract<?> contract) {
+        this(name, parent, contract, null, false);
+    }
+
+    public ServiceImpl(String name,
+                       CompositeComponent parent,
+                       ServiceContract<?> contract,
+                       URI targetUri,
+                       boolean system
+    ) {
+        super(name, parent);
+        this.serviceContract = contract;
+        this.system = system;
+        this.targetUri = targetUri;
+    }
+
+    public Scope getScope() {
+        return Scope.SYSTEM;
+    }
+
+    public ServiceContract<?> getServiceContract() {
+        return serviceContract;
+    }
+
+    public URI getTargetUri() {
+        return targetUri;
+    }
+
+    public List<ServiceBinding> getServiceBindings() {
+        return Collections.unmodifiableList(bindings);
+    }
+
+    public void addServiceBinding(ServiceBinding binding) {
+        binding.setService(this);
+        bindings.add(binding);
+    }
+
+    public void start() {
+        super.start();
+        for (ServiceBinding binding : bindings) {
+            binding.start();
+        }
+    }
+
+    public void stop() {
+        super.stop();
+        for (ServiceBinding binding : bindings) {
+            binding.stop();
+        }
+    }
+
+    @Override
+    public boolean isSystem() {
+        return system;
+    }
+}

Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/ServiceImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/ServiceImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemBindingBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemBindingBuilder.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemBindingBuilder.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemBindingBuilder.java Sat Dec 30 13:42:22 2006
@@ -25,7 +25,7 @@
 import org.apache.tuscany.spi.builder.MissingWireTargetException;
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.component.Reference;
-import org.apache.tuscany.spi.component.Service;
+import org.apache.tuscany.spi.component.ServiceBinding;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.extension.BindingBuilderExtension;
 import org.apache.tuscany.spi.model.BoundReferenceDefinition;
@@ -33,27 +33,28 @@
 import org.apache.tuscany.spi.model.ServiceContract;
 
 import org.apache.tuscany.core.implementation.system.component.SystemReferenceImpl;
-import org.apache.tuscany.core.implementation.system.component.SystemServiceImpl;
+import org.apache.tuscany.core.implementation.system.component.SystemServiceBindingImpl;
 import org.apache.tuscany.core.implementation.system.model.SystemBindingDefinition;
 
 /**
- * Creates services and references confgured with the system binding
+ * Creates serviceBindings and references confgured with the system binding
  *
  * @version $$Rev$$ $$Date$$
  */
 public class SystemBindingBuilder extends BindingBuilderExtension<SystemBindingDefinition>
     implements BindingBuilder<SystemBindingDefinition> {
 
-    public Service build(CompositeComponent parent,
-                         BoundServiceDefinition<SystemBindingDefinition> definition,
-                         DeploymentContext deploymentContext) throws BuilderException {
+    public ServiceBinding build(CompositeComponent parent,
+                                BoundServiceDefinition definition,
+                                SystemBindingDefinition bindingDefinition,
+                                DeploymentContext deploymentContext) throws BuilderException {
 
         URI uri = definition.getTarget();
         if (uri == null) {
             throw new MissingWireTargetException("Target URI not specified", definition.getName());
         }
         ServiceContract<?> contract = definition.getServiceContract();
-        return new SystemServiceImpl(definition.getName(), parent, contract);
+        return new SystemServiceBindingImpl(definition.getName(), parent, contract);
     }
 
     public Reference build(CompositeComponent parent,

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemCompositeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemCompositeBuilder.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemCompositeBuilder.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemCompositeBuilder.java Sat Dec 30 13:42:22 2006
@@ -22,16 +22,15 @@
 import java.util.List;
 
 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.Connector;
-import org.apache.tuscany.spi.builder.BuilderInstantiationException;
 import org.apache.tuscany.spi.component.Component;
 import org.apache.tuscany.spi.component.ComponentRegistrationException;
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.component.SCAObject;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.extension.ComponentBuilderExtension;
-import org.apache.tuscany.spi.model.BindingDefinition;
 import org.apache.tuscany.spi.model.BoundServiceDefinition;
 import org.apache.tuscany.spi.model.ComponentDefinition;
 import org.apache.tuscany.spi.model.CompositeComponentType;
@@ -61,17 +60,15 @@
                            DeploymentContext deploymentContext) throws BuilderException {
         SystemCompositeImplementation impl = componentDefinition.getImplementation();
         CompositeComponentType<?, ?, ?> componentType = impl.getComponentType();
-        // create lists of all components and services in this composite
+        // create lists of all components and serviceBindings in this composite
         List<ComponentDefinition<? extends Implementation<?>>> allComponents =
             new ArrayList<ComponentDefinition<? extends Implementation<?>>>();
         allComponents.addAll(componentType.getComponents().values());
 
-        List<BoundServiceDefinition<? extends BindingDefinition>> allBoundServices =
-            new ArrayList<BoundServiceDefinition<? extends BindingDefinition>>();
+        List<BoundServiceDefinition> allBoundServices = new ArrayList<BoundServiceDefinition>();
         for (ServiceDefinition serviceDefinition : componentType.getServices().values()) {
             if (serviceDefinition instanceof BoundServiceDefinition) {
-                BoundServiceDefinition<? extends BindingDefinition> boundService =
-                    (BoundServiceDefinition<? extends BindingDefinition>) serviceDefinition;
+                BoundServiceDefinition boundService = (BoundServiceDefinition) serviceDefinition;
                 allBoundServices.add(boundService);
             }
         }
@@ -96,7 +93,7 @@
             }
         }
 
-        for (BoundServiceDefinition<? extends BindingDefinition> serviceDefinition : allBoundServices) {
+        for (BoundServiceDefinition serviceDefinition : allBoundServices) {
             SCAObject object;
             try {
                 object = builderRegistry.build(component, serviceDefinition, deploymentContext);

Copied: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceBindingImpl.java (from r490460, incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceImpl.java)
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceBindingImpl.java?view=diff&rev=491325&p1=incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceImpl.java&r1=490460&p2=incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceBindingImpl.java&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceBindingImpl.java Sat Dec 30 13:42:22 2006
@@ -22,6 +22,8 @@
 import org.apache.tuscany.spi.component.AbstractSCAObject;
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.component.Service;
+import org.apache.tuscany.spi.component.ServiceBinding;
+import org.apache.tuscany.spi.component.TargetInvokerCreationException;
 import org.apache.tuscany.spi.model.Operation;
 import org.apache.tuscany.spi.model.Scope;
 import org.apache.tuscany.spi.model.ServiceContract;
@@ -30,21 +32,34 @@
 import org.apache.tuscany.spi.wire.TargetInvoker;
 
 /**
- * Default implementation for services configured with the system binding
+ * Runtime artifact for the system binding
  *
  * @version $$Rev$$ $$Date$$
  */
-public class SystemServiceImpl extends AbstractSCAObject implements Service {
+public class SystemServiceBindingImpl extends AbstractSCAObject implements ServiceBinding {
+    protected Service service;
     protected InboundWire inboundWire;
     protected OutboundWire outboundWire;
     protected ServiceContract<?> serviceContract;
 
-    public SystemServiceImpl(String name, CompositeComponent parent, ServiceContract<?> serviceContract)
+    public SystemServiceBindingImpl(String name, CompositeComponent parent, ServiceContract<?> serviceContract)
         throws CoreRuntimeException {
         super(name, parent);
         this.serviceContract = serviceContract;
     }
 
+    public void setService(Service service) {
+        this.service = service;
+    }
+
+    public ServiceContract<?> getServiceContract() {
+        return serviceContract;
+    }
+
+    public void setServiceContract(ServiceContract<?> serviceContract) {
+        this.serviceContract = serviceContract;
+    }
+
     public Scope getScope() {
         return Scope.SYSTEM;
     }
@@ -65,6 +80,11 @@
         this.outboundWire = wire;
     }
 
+    public TargetInvoker createTargetInvoker(ServiceContract contract, Operation operation)
+        throws TargetInvokerCreationException {
+        throw new UnsupportedOperationException();
+    }
+
     public TargetInvoker createCallbackTargetInvoker(ServiceContract contract, Operation operation) {
         throw new UnsupportedOperationException();
     }
@@ -77,7 +97,8 @@
         throw new UnsupportedOperationException();
     }
 
+    @Override
     public boolean isSystem() {
-        return true;
+        return service != null && service.isSystem();
     }
 }

Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceBindingImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceBindingImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemSingletonAtomicComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemSingletonAtomicComponent.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemSingletonAtomicComponent.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemSingletonAtomicComponent.java Sat Dec 30 13:42:22 2006
@@ -22,6 +22,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Collection;
 
 import org.apache.tuscany.spi.ObjectCreationException;
 import org.apache.tuscany.spi.component.AtomicComponent;
@@ -116,8 +117,8 @@
         inboundWires.put(wire.getServiceName(), wire);
     }
 
-    public Map<String, InboundWire> getInboundWires() {
-        return inboundWires;
+    public Collection<InboundWire> getInboundWires() {
+        return Collections.unmodifiableCollection(inboundWires.values());
     }
 
     public InboundWire getInboundWire(String serviceName) {

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/launcher/CompositeContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/launcher/CompositeContextImpl.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/launcher/CompositeContextImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/launcher/CompositeContextImpl.java Sat Dec 30 13:42:22 2006
@@ -30,10 +30,17 @@
 import org.apache.tuscany.spi.component.Reference;
 import org.apache.tuscany.spi.component.SCAObject;
 import org.apache.tuscany.spi.component.Service;
+import org.apache.tuscany.spi.component.ServiceBinding;
 import org.apache.tuscany.spi.wire.InboundWire;
+import org.apache.tuscany.spi.wire.Wire;
 import org.apache.tuscany.spi.wire.WireService;
 
 
+/**
+ * Default implementation of the {@link org.osoa.sca.CompositeContext}
+ *
+ * @version $Rev$ $Date$
+ */
 public class CompositeContextImpl extends SCA implements CompositeContext {
     protected final CompositeComponent composite;
     protected final WireService wireService;
@@ -51,24 +58,12 @@
         setCompositeContext(null);
     }
 
-    public ServiceReference createServiceReferenceForSession(Object arg0) {
-        return null;
-    }
-
-    public ServiceReference createServiceReferenceForSession(Object arg0, String arg1) {
-        return null;
-    }
-
     public String getCompositeName() {
-        return null;
+        return composite.getName();
     }
 
     public String getCompositeURI() {
-        return null;
-    }
-
-    public RequestContext getRequestContext() {
-        return null;
+        throw new UnsupportedOperationException();
     }
 
     public <T> T locateService(Class<T> serviceInterface, String serviceName) throws ServiceRuntimeException {
@@ -89,8 +84,28 @@
         return wireService.createProxy(serviceInterface, wire);
     }
 
+    public ServiceReference createServiceReferenceForSession(Object arg0) {
+        throw new UnsupportedOperationException();
+    }
+
+    public ServiceReference createServiceReferenceForSession(Object arg0, String arg1) {
+        throw new UnsupportedOperationException();
+    }
+
+    public RequestContext getRequestContext() {
+        throw new UnsupportedOperationException();
+    }
+
+    public ServiceReference newSession(String arg0) {
+        throw new UnsupportedOperationException();
+    }
+
+    public ServiceReference newSession(String arg0, Object arg1) {
+        throw new UnsupportedOperationException();
+    }
+    
     private InboundWire getInboundWire(SCAObject child, String name, String serviceName) {
-        InboundWire wire;
+        InboundWire wire = null;
         if (child instanceof AtomicComponent) {
             wire = ((AtomicComponent) child).getInboundWire(name);
             if (wire == null) {
@@ -98,7 +113,16 @@
                 throw new ServiceRuntimeException("Service not found [" + qName + "]");
             }
         } else if (child instanceof Service) {
-            wire = ((Service) child).getInboundWire();
+            Service service = (Service) child;
+            for (ServiceBinding binding : service.getServiceBindings()) {
+                if (Wire.LOCAL_BINDING.equals(binding.getInboundWire().getBindingType())) {
+                    wire = binding.getInboundWire();
+                    break;
+                }
+            }
+            if (wire == null) {
+                throw new ServiceRuntimeException("Local binding for service not found [" + name + "]");
+            }
         } else if (child instanceof Reference) {
             wire = ((Reference) child).getInboundWire();
         } else if (child == null) {
@@ -107,14 +131,6 @@
             throw new ServiceRuntimeException("Invalid service type [" + child.getClass().getName() + "]");
         }
         return wire;
-    }
-
-    public ServiceReference newSession(String arg0) {
-        return null;
-    }
-
-    public ServiceReference newSession(String arg0, Object arg1) {
-        return null;
     }
 
 }

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=491325&r1=491324&r2=491325
==============================================================================
--- 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 Dec 30 13:42:22 2006
@@ -53,9 +53,11 @@
 import org.apache.tuscany.spi.loader.UndefinedPropertyException;
 import org.apache.tuscany.spi.loader.UndefinedReferenceException;
 import org.apache.tuscany.spi.loader.UnrecognizedElementException;
+import org.apache.tuscany.spi.model.BoundServiceDefinition;
 import org.apache.tuscany.spi.model.ComponentDefinition;
 import org.apache.tuscany.spi.model.ComponentType;
 import org.apache.tuscany.spi.model.Implementation;
+import org.apache.tuscany.core.binding.local.LocalBindingDefinition;
 import org.apache.tuscany.spi.model.ModelObject;
 import org.apache.tuscany.spi.model.OverrideOptions;
 import org.apache.tuscany.spi.model.Property;
@@ -83,7 +85,7 @@
 
     private PropertyObjectFactory propertyFactory;
 
-    @Constructor({"registry", "propertyFactory"})
+    @Constructor
     public ComponentLoader(@Autowire LoaderRegistry registry, @Autowire PropertyObjectFactory propertyFactory) {
         super(registry);
         this.propertyFactory = propertyFactory;
@@ -152,6 +154,18 @@
                                 }
                             }
 
+                            for (ServiceDefinition serviceDefinition : type.getServices().values()) {
+                                if (serviceDefinition instanceof BoundServiceDefinition) {
+                                    BoundServiceDefinition bsd = (BoundServiceDefinition) serviceDefinition;
+                                    if (bsd.getBindings().isEmpty()) {
+                                        if (bsd.getBindings().isEmpty()) {
+                                            // TODO implement a more advanced option that allows the runtime to
+                                            // choose a binding
+                                            bsd.addBinding(new LocalBindingDefinition());
+                                        }
+                                    }
+                                }
+                            }
                             validate(componentDefinition);
                             return componentDefinition;
                         }

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentTypeElementLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentTypeElementLoader.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentTypeElementLoader.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentTypeElementLoader.java Sat Dec 30 13:42:22 2006
@@ -45,7 +45,7 @@
 public class ComponentTypeElementLoader extends LoaderExtension<ComponentType> {
     public static final QName COMPONENT_TYPE = new QName(XML_NAMESPACE_1_0, "componentType");
 
-    @Constructor({"registry"})
+    @Constructor
     public ComponentTypeElementLoader(@Autowire LoaderRegistry registry) {
         super(registry);
     }
@@ -72,7 +72,7 @@
         while (true) {
             switch (reader.next()) {
                 case START_ELEMENT:
-                    ModelObject o = registry.load(parent, null, reader, deploymentContext);
+                    ModelObject o = registry.load(parent, componentType, reader, deploymentContext);
                     if (o instanceof ServiceDefinition) {
                         componentType.add((ServiceDefinition) o);
                     } else if (o instanceof ReferenceDefinition) {

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/LoaderRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/LoaderRegistryImpl.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/LoaderRegistryImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/LoaderRegistryImpl.java Sat Dec 30 13:42:22 2006
@@ -39,6 +39,7 @@
 import org.apache.tuscany.spi.loader.LoaderRegistry;
 import org.apache.tuscany.spi.loader.StAXElementLoader;
 import org.apache.tuscany.spi.loader.UnrecognizedElementException;
+import org.apache.tuscany.spi.loader.UnrecognizedComponentTypeException;
 import org.apache.tuscany.spi.model.Implementation;
 import org.apache.tuscany.spi.model.ModelObject;
 
@@ -163,7 +164,7 @@
         Class<I> key = (Class<I>) implementation.getClass();
         ComponentTypeLoader<I> loader = (ComponentTypeLoader<I>) componentTypeLoaders.get(key);
         if (loader == null) {
-            throw new UnsupportedOperationException();
+            throw new UnrecognizedComponentTypeException(key);
         }
         loader.load(parent, implementation, deploymentContext);
     }

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=491325&r1=491324&r2=491325
==============================================================================
--- 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 Dec 30 13:42:22 2006
@@ -48,7 +48,7 @@
 public class ReferenceLoader extends LoaderExtension<ReferenceDefinition> {
     public static final QName REFERENCE = new QName(XML_NAMESPACE_1_0, "reference");
 
-    @Constructor({"registry"})
+    @Constructor
     public ReferenceLoader(@Autowire LoaderRegistry registry) {
         super(registry);
     }
@@ -84,7 +84,8 @@
                         referenceDefinition.setMultiplicity(multiplicity);
                         return referenceDefinition;
                     } else {
-                        BoundReferenceDefinition<BindingDefinition> referenceDefinition = new BoundReferenceDefinition<BindingDefinition>();
+                        BoundReferenceDefinition<BindingDefinition> referenceDefinition =
+                            new BoundReferenceDefinition<BindingDefinition>();
                         referenceDefinition.setName(name);
                         referenceDefinition.setServiceContract(serviceContract);
                         referenceDefinition.setMultiplicity(multiplicity);

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=491325&r1=491324&r2=491325
==============================================================================
--- 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 Dec 30 13:42:22 2006
@@ -20,6 +20,8 @@
 
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.util.ArrayList;
+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;
@@ -36,9 +38,11 @@
 import org.apache.tuscany.spi.loader.InvalidReferenceException;
 import org.apache.tuscany.spi.loader.LoaderException;
 import org.apache.tuscany.spi.loader.LoaderRegistry;
+import org.apache.tuscany.spi.loader.UnrecognizedElementException;
 import org.apache.tuscany.spi.model.BindingDefinition;
-import org.apache.tuscany.spi.model.BindlessServiceDefinition;
 import org.apache.tuscany.spi.model.BoundServiceDefinition;
+import org.apache.tuscany.spi.model.ComponentType;
+import org.apache.tuscany.spi.model.CompositeComponentType;
 import org.apache.tuscany.spi.model.ModelObject;
 import org.apache.tuscany.spi.model.ServiceContract;
 import org.apache.tuscany.spi.model.ServiceDefinition;
@@ -52,7 +56,7 @@
     private static final QName SERVICE = new QName(XML_NAMESPACE_1_0, "service");
     private static final QName REFERENCE = new QName(XML_NAMESPACE_1_0, "reference");
 
-    @Constructor({"registry"})
+    @Constructor
     public ServiceLoader(@Autowire LoaderRegistry registry) {
         super(registry);
     }
@@ -68,7 +72,7 @@
         assert SERVICE.equals(reader.getName());
         String name = reader.getAttributeValue(null, "name");
         String target = null;
-        BindingDefinition binding = null;
+        List<BindingDefinition> bindings = new ArrayList<BindingDefinition>();
         ServiceContract serviceContract = null;
         while (true) {
             int i = reader.next();
@@ -79,42 +83,33 @@
                         String text = reader.getElementText();
                         target = text != null ? text.trim() : null;
                     } else {
-
                         ModelObject o = registry.load(parent, null, reader, deploymentContext);
                         if (o instanceof ServiceContract) {
                             serviceContract = (ServiceContract) o;
                         } else if (o instanceof BindingDefinition) {
-                            binding = (BindingDefinition) o;
+                            bindings.add((BindingDefinition) o);
+                        } else {
+                            throw new UnrecognizedElementException(reader.getName());
                         }
                     }
                     break;
                 case END_ELEMENT:
                     if (SERVICE.equals(reader.getName())) {
-                        if (binding != null) {
-                            URI targetURI = null;
-                            if (target != null) {
-                                try {
-                                    targetURI = new URI(target);
-                                } catch (URISyntaxException e) {
-                                    throw new InvalidReferenceException(target, name);
-                                }
-                            }
-
+                        if (object instanceof ComponentType && !(object instanceof CompositeComponentType)) {
+                            // the load is being done for an atomic component type
                             // FIXME need a way to specify "remotable" on a service
-                            return new BoundServiceDefinition<BindingDefinition>(name, serviceContract, false, binding,
-                                targetURI);
-                        } else if (target != null) {
-                            URI targetURI;
+                            return new ServiceDefinition(name, serviceContract, false);
+                        }
+                        URI targetURI = null;
+                        if (target != null) {
                             try {
                                 targetURI = new URI(target);
                             } catch (URISyntaxException e) {
                                 throw new InvalidReferenceException(target, name);
                             }
-                            return new BindlessServiceDefinition(name, serviceContract, false, targetURI);
-                        } else {
-                            // FIXME need a way to specify "remotable" on a service
-                            return new ServiceDefinition(name, serviceContract, false);
                         }
+                        // FIXME need a way to specify "remotable" on a service
+                        return new BoundServiceDefinition(name, serviceContract, bindings, false, targetURI);
                     }
                     break;
             }

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java Sat Dec 30 13:42:22 2006
@@ -20,6 +20,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+import javax.xml.namespace.QName;
 
 import org.apache.tuscany.spi.component.AtomicComponent;
 import org.apache.tuscany.spi.component.SCAObject;
@@ -38,6 +39,7 @@
  * @version $Rev$ $Date$
  */
 public class InboundWireImpl implements InboundWire {
+    private QName bindingType = LOCAL_BINDING;
     private String serviceName;
     private ServiceContract serviceContract;
     private OutboundWire targetWire;
@@ -47,6 +49,14 @@
         new HashMap<Object, Map<Operation<?>, OutboundInvocationChain>>();
     private SCAObject container;
     private AtomicComponent targetComponent;
+
+    public QName getBindingType() {
+        return bindingType;
+    }
+
+    public void setBindingType(QName bindingType) {
+        this.bindingType = bindingType;
+    }
 
     public Object getTargetService() throws TargetResolutionException {
         // JFM fixme hack

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/OutboundWireImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/OutboundWireImpl.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/OutboundWireImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/OutboundWireImpl.java Sat Dec 30 13:42:22 2006
@@ -21,6 +21,8 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.xml.namespace.QName;
+
 import org.apache.tuscany.spi.QualifiedName;
 import org.apache.tuscany.spi.component.SCAObject;
 import org.apache.tuscany.spi.component.TargetResolutionException;
@@ -38,6 +40,7 @@
  * @version $Rev$ $Date$
  */
 public class OutboundWireImpl implements OutboundWire {
+    private QName bindingType = LOCAL_BINDING;
     private ServiceContract serviceContract;
     private Class<?>[] callbackInterfaces;
     private Map<Operation<?>, OutboundInvocationChain> chains = new HashMap<Operation<?>, OutboundInvocationChain>();
@@ -48,6 +51,14 @@
     private InboundWire targetWire;
     private SCAObject container;
     private boolean autowire;
+
+    public QName getBindingType() {
+        return bindingType;
+    }
+
+    public void setBindingType(QName bindingType) {
+        this.bindingType = bindingType;
+    }
 
     public Object getTargetService() throws TargetResolutionException {
         assert targetWire != null;

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/WireServiceExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/WireServiceExtension.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/WireServiceExtension.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/WireServiceExtension.java Sat Dec 30 13:42:22 2006
@@ -20,34 +20,30 @@
 
 import java.util.Map;
 
-import org.apache.tuscany.spi.component.WorkContext;
+import org.apache.tuscany.spi.QualifiedName;
 import org.apache.tuscany.spi.component.Component;
 import org.apache.tuscany.spi.component.CompositeComponent;
-import org.apache.tuscany.spi.component.Service;
 import org.apache.tuscany.spi.component.Reference;
-import org.apache.tuscany.spi.model.Operation;
-import org.apache.tuscany.spi.model.ServiceContract;
-import org.apache.tuscany.spi.model.ReferenceTarget;
-import org.apache.tuscany.spi.model.ReferenceDefinition;
-import org.apache.tuscany.spi.model.ServiceDefinition;
-import org.apache.tuscany.spi.model.BindlessServiceDefinition;
+import org.apache.tuscany.spi.component.Service;
+import org.apache.tuscany.spi.component.ServiceBinding;
+import org.apache.tuscany.spi.component.WorkContext;
 import org.apache.tuscany.spi.model.ComponentDefinition;
-import org.apache.tuscany.spi.model.Implementation;
 import org.apache.tuscany.spi.model.ComponentType;
 import org.apache.tuscany.spi.model.CompositeComponentType;
-import org.apache.tuscany.spi.model.BoundServiceDefinition;
-import org.apache.tuscany.spi.model.BindingDefinition;
+import org.apache.tuscany.spi.model.Implementation;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.model.ReferenceDefinition;
+import org.apache.tuscany.spi.model.ReferenceTarget;
+import org.apache.tuscany.spi.model.ServiceContract;
+import org.apache.tuscany.spi.model.ServiceDefinition;
 import org.apache.tuscany.spi.policy.PolicyBuilderRegistry;
-import org.apache.tuscany.spi.wire.WireService;
+import org.apache.tuscany.spi.wire.InboundInvocationChain;
+import org.apache.tuscany.spi.wire.InboundWire;
 import org.apache.tuscany.spi.wire.IncompatibleServiceContractException;
 import org.apache.tuscany.spi.wire.OutboundInvocationChain;
-import org.apache.tuscany.spi.wire.InboundInvocationChain;
 import org.apache.tuscany.spi.wire.OutboundWire;
-import org.apache.tuscany.spi.wire.InboundWire;
-import org.apache.tuscany.spi.QualifiedName;
+import org.apache.tuscany.spi.wire.WireService;
 
-import org.apache.tuscany.core.implementation.system.model.SystemBindingDefinition;
-import org.apache.tuscany.core.implementation.composite.CompositeService;
 import org.apache.tuscany.core.implementation.composite.CompositeReference;
 
 /**
@@ -114,12 +110,7 @@
         for (Operation<?> operation : contract.getOperations().values()) {
             InboundInvocationChain chain = createInboundChain(operation);
             // TODO handle policy
-            //TODO statement below could be cleaner
-            if (service instanceof BindlessServiceDefinition) {
-                chain.addInterceptor(new SynchronousBridgingInterceptor());
-            } else {
-                chain.addInterceptor(new InvokerInterceptor());
-            }
+            chain.addInterceptor(new InvokerInterceptor());
             wire.addInvocationChain(operation, chain);
         }
         if (contract.getCallbackName() != null) {
@@ -132,28 +123,24 @@
         Implementation<?> implementation = definition.getImplementation();
         ComponentType<?, ?, ?> componentType = implementation.getComponentType();
         for (ServiceDefinition service : componentType.getServices().values()) {
-            InboundWire inboundWire = createWire(service);
-            inboundWire.setContainer(component);
             if (componentType instanceof CompositeComponentType<?, ?, ?>) {
                 // If this is the case, then it means that component has already been returned
                 // by CompositeBuilder and thus its children, in particular composite services,
                 // have been registered
                 CompositeComponent compositeComponent = (CompositeComponent) component;
-                if (service instanceof BoundServiceDefinition) {
-                    BindingDefinition binding = ((BoundServiceDefinition) service).getBinding();
-                    if (binding instanceof SystemBindingDefinition) {
-                        continue;
-                    }
+                Service serviceChild;
+                if (component.isSystem()) {
+                    // FIXME JFM test
+                    serviceChild = (Service) compositeComponent.getSystemChild(service.getName());
+                } else {
+                    serviceChild = (Service) compositeComponent.getChild(service.getName());
                 }
-                Service serviceChild = (Service) compositeComponent.getChild(service.getName());
                 assert serviceChild != null;
-                if (serviceChild instanceof CompositeService) {
-                    serviceChild.setInboundWire(inboundWire);
-                    // Notice that now the more immediate container of the wire is the composite service
-                    inboundWire.setContainer(serviceChild);
-                }
+            } else {
+                InboundWire wire = createWire(service);
+                wire.setContainer(component);
+                component.addInboundWire(wire);
             }
-            component.addInboundWire(inboundWire);
         }
 
         for (ReferenceTarget referenceTarget : definition.getReferenceTargets().values()) {
@@ -212,32 +199,34 @@
         reference.setOutboundWire(outboundWire);
     }
 
-    public void createWires(Service service, String targetName, ServiceContract<?> contract) {
+    public void createWires(ServiceBinding serviceBinding, String targetName, ServiceContract<?> contract) {
         InboundWire inboundWire = new InboundWireImpl();
 
-        // [rfeng] Check if the Reference has the binding contract
-        ServiceContract<?> bindingContract = service.getBindingServiceContract();
+        // [rfeng] Check if the Reference has the serviceBinding contract
+        ServiceContract<?> bindingContract = serviceBinding.getBindingServiceContract();
         if (bindingContract == null) {
             bindingContract = contract;
         }
         inboundWire.setServiceContract(bindingContract);
-        inboundWire.setContainer(service);
+        inboundWire.setContainer(serviceBinding);
         for (Operation<?> operation : bindingContract.getOperations().values()) {
             InboundInvocationChain inboundChain = createInboundChain(operation);
+            // TODO JFM remove need for this
+            inboundChain.addInterceptor(new SynchronousBridgingInterceptor());
             inboundWire.addInvocationChain(operation, inboundChain);
         }
 
         OutboundWire outboundWire = new OutboundWireImpl();
         outboundWire.setServiceContract(contract);
         outboundWire.setTargetName(new QualifiedName(targetName));
-        outboundWire.setContainer(service);
+        outboundWire.setContainer(serviceBinding);
 
         for (Operation<?> operation : contract.getOperations().values()) {
             OutboundInvocationChain outboundChain = createOutboundChain(operation);
             outboundWire.addInvocationChain(operation, outboundChain);
         }
 
-        // Add target callback chain to outbound wire, applicable to both bound and bindless services
+        // Add target callback chain to outbound wire
         if (contract.getCallbackName() != null) {
             outboundWire.setCallbackInterface(contract.getCallbackClass());
             for (Operation<?> operation : contract.getCallbackOperations().values()) {
@@ -248,13 +237,8 @@
                 outboundWire.addTargetCallbackInvocationChain(operation, callbackTargetChain);
             }
         }
-
-        // Not clear in any case why this is done here and at the parent composite level as well
-        // But for a composite service, make sure that the inbound wire comes from the parent
-        if (!(service instanceof CompositeService)) {
-            service.setInboundWire(inboundWire);
-        }
-        service.setOutboundWire(outboundWire);
+        serviceBinding.setInboundWire(inboundWire);
+        serviceBinding.setOutboundWire(outboundWire);
     }
 
     /**

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java Sat Dec 30 13:42:22 2006
@@ -132,6 +132,6 @@
         if (owner == null) {
             throw new ReactivationException("Current atomic component not set on work context");
         }
-        wire = owner.getInboundWires().get(serviceName);
+        wire = owner.getInboundWire(serviceName);
     }
 }

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKInboundInvocationHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKInboundInvocationHandler.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKInboundInvocationHandler.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKInboundInvocationHandler.java Sat Dec 30 13:42:22 2006
@@ -143,7 +143,7 @@
         if (owner == null) {
             throw new ReactivationException("Current atomic component not set on work context");
         }
-        InboundWire wire = owner.getInboundWires().get(serviceName);
+        InboundWire wire = owner.getInboundWire(serviceName);
         init(interfaze, wire);
     }
 
@@ -161,7 +161,6 @@
      * the chain master
      */
     private class ChainHolder {
-
         InboundInvocationChain chain;
         TargetInvoker cachedInvoker;
 

Added: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/AbstractCompositeTargetInvokerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/AbstractCompositeTargetInvokerTestCase.java?view=auto&rev=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/AbstractCompositeTargetInvokerTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/AbstractCompositeTargetInvokerTestCase.java Sat Dec 30 13:42:22 2006
@@ -0,0 +1,77 @@
+/*
+ * 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.core.binding.local;
+
+import org.apache.tuscany.spi.wire.Interceptor;
+import org.apache.tuscany.spi.wire.InvocationRuntimeException;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.MessageImpl;
+import org.apache.tuscany.spi.wire.OutboundInvocationChain;
+import org.apache.tuscany.spi.wire.TargetInvoker;
+
+import junit.framework.TestCase;
+import org.easymock.EasyMock;
+import org.easymock.IAnswer;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class AbstractCompositeTargetInvokerTestCase extends TestCase {
+
+    public void testInvokerWithInterceptor() throws Throwable {
+        AbstractCompositeTargetInvoker invoker = new MockTargetInvoker();
+        Interceptor interceptor = EasyMock.createMock(Interceptor.class);
+        interceptor.invoke(EasyMock.isA(Message.class));
+        EasyMock.expectLastCall().andStubAnswer(new IAnswer<Object>() {
+            public Object answer() throws Throwable {
+                Message msg = (Message) EasyMock.getCurrentArguments()[0];
+                if (msg.getTargetInvoker() == null) {
+                    fail("Target invoker not set");
+                }
+                return null;
+            }
+        });
+        EasyMock.replay(interceptor);
+        OutboundInvocationChain chain = EasyMock.createMock(OutboundInvocationChain.class);
+        EasyMock.expect(chain.getHeadInterceptor()).andReturn(interceptor);
+        EasyMock.replay(chain);
+        invoker.invoke(chain, EasyMock.createNiceMock(TargetInvoker.class), new MessageImpl());
+        EasyMock.verify(chain);
+        EasyMock.verify(interceptor);
+    }
+
+    public void testShortCircuitInvoke() throws Throwable {
+        AbstractCompositeTargetInvoker invoker = new MockTargetInvoker();
+        TargetInvoker targetInvoker = EasyMock.createMock(TargetInvoker.class);
+        EasyMock.expect(targetInvoker.invoke(EasyMock.isA(Message.class))).andReturn(new MessageImpl());
+        EasyMock.replay(targetInvoker);
+        OutboundInvocationChain chain = EasyMock.createMock(OutboundInvocationChain.class);
+        EasyMock.expect(chain.getHeadInterceptor()).andReturn(null);
+        EasyMock.replay(chain);
+        invoker.invoke(chain, targetInvoker, new MessageImpl());
+        EasyMock.verify(chain);
+        EasyMock.verify(targetInvoker);
+    }
+
+    private class MockTargetInvoker extends AbstractCompositeTargetInvoker {
+        public Message invoke(Message msg) throws InvocationRuntimeException {
+            return null;
+        }
+    }
+}

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/AbstractCompositeTargetInvokerTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/AbstractCompositeTargetInvokerTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingBuilderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingBuilderTestCase.java?view=auto&rev=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingBuilderTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingBuilderTestCase.java Sat Dec 30 13:42:22 2006
@@ -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.core.binding.local;
+
+import org.apache.tuscany.spi.component.ServiceBinding;
+import org.apache.tuscany.spi.model.BoundServiceDefinition;
+
+import junit.framework.TestCase;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class LocalBindingBuilderTestCase extends TestCase {
+
+    public void testBuild() throws Exception {
+        LocalBindingBuilder builder = new LocalBindingBuilder();
+        BoundServiceDefinition def = new BoundServiceDefinition();
+        def.setName("foo");
+        ServiceBinding binding = builder.build(null, def, null, null);
+        assertEquals(LocalServiceBinding.class, binding.getClass());
+    }
+}

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingBuilderTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingBuilderTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingLoaderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingLoaderTestCase.java?view=auto&rev=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingLoaderTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingLoaderTestCase.java Sat Dec 30 13:42:22 2006
@@ -0,0 +1,35 @@
+/*
+ * 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.core.binding.local;
+
+import org.apache.tuscany.spi.model.ModelObject;
+
+import junit.framework.TestCase;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class LocalBindingLoaderTestCase extends TestCase {
+
+    public void testLoader() throws Exception {
+        LocalBindingLoader loader = new LocalBindingLoader();
+        ModelObject o = loader.load(null, null, null, null);
+        assertEquals(LocalBindingDefinition.class, o.getClass());
+    }
+}

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingLoaderTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingLoaderTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

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=491325&r1=491324&r2=491325
==============================================================================
--- 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 Dec 30 13:42:22 2006
@@ -18,14 +18,26 @@
  */
 package org.apache.tuscany.core.builder;
 
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tuscany.spi.builder.BindingBuilder;
 import org.apache.tuscany.spi.builder.BuilderConfigException;
 import org.apache.tuscany.spi.builder.ComponentBuilder;
 import org.apache.tuscany.spi.component.Component;
 import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.component.Service;
+import org.apache.tuscany.spi.component.ServiceBinding;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.model.BindingDefinition;
+import org.apache.tuscany.spi.model.BoundServiceDefinition;
 import org.apache.tuscany.spi.model.ComponentDefinition;
+import org.apache.tuscany.spi.model.ComponentType;
 import org.apache.tuscany.spi.model.CompositeComponentType;
 import org.apache.tuscany.spi.model.CompositeImplementation;
+import org.apache.tuscany.spi.model.Implementation;
+import org.apache.tuscany.spi.model.ServiceContract;
 import org.apache.tuscany.spi.wire.WireService;
 
 import junit.framework.TestCase;
@@ -38,38 +50,93 @@
 public class BuilderRegistryTestCase extends TestCase {
     private DeploymentContext deploymentContext;
     private BuilderRegistryImpl registry;
+    private CompositeComponent parent;
 
-    public void testRegistrationWithoutGenerics() throws Exception {
-        RawBuilder builder = new RawBuilder();
+    public void testRegistration() throws Exception {
+        MockBuilder builder = new MockBuilder();
         registry.register(CompositeImplementation.class, builder);
         CompositeImplementation implementation = new CompositeImplementation();
         ComponentDefinition<CompositeImplementation> componentDefinition =
             new ComponentDefinition<CompositeImplementation>(implementation);
         componentDefinition.getImplementation().setComponentType(new CompositeComponentType());
-        registry.build(null, componentDefinition, deploymentContext);
+        registry.build(parent, componentDefinition, deploymentContext);
+    }
+
+    @SuppressWarnings({"unchecked"})
+    public void testBindingBuilderDispatch() throws Exception {
+        WireService wireService = EasyMock.createMock(WireService.class);
+        wireService.createWires(EasyMock.isA(ServiceBinding.class),
+            EasyMock.isA(String.class),
+            (ServiceContract) EasyMock.isNull());
+        EasyMock.expectLastCall().times(2);
+        EasyMock.replay(wireService);
+        registry.setWireService(wireService);
+        ServiceBinding binding = EasyMock.createNiceMock(ServiceBinding.class);
+        EasyMock.replay(binding);
+        BindingBuilder<MockBindingDefinition> builder = EasyMock.createMock(BindingBuilder.class);
+        EasyMock.expect(builder.build(EasyMock.isA(CompositeComponent.class),
+            EasyMock.isA(BoundServiceDefinition.class),
+            EasyMock.isA(MockBindingDefinition.class),
+            EasyMock.isA(DeploymentContext.class))).andReturn(binding).times(2);
+        EasyMock.replay(builder);
+        registry.register(MockBindingDefinition.class, builder);
+        List<BindingDefinition> bindingDefs = new ArrayList<BindingDefinition>();
+        bindingDefs.add(new MockBindingDefinition());
+        bindingDefs.add(new MockBindingDefinition());
+        BoundServiceDefinition definition = new BoundServiceDefinition("foo", null, bindingDefs, false, new URI("foo"));
+        Service service = registry.build(parent, definition, deploymentContext);
+        assertEquals(2, service.getServiceBindings().size());
+        EasyMock.verify(wireService);
+    }
+
+    @SuppressWarnings({"unchecked"})
+    public void testComponentImplementationDispatch() throws Exception {
+        WireService wireService = EasyMock.createMock(WireService.class);
+        wireService.createWires(EasyMock.isA(Component.class),
+            EasyMock.isA(ComponentDefinition.class));
+        EasyMock.replay(wireService);
+        registry.setWireService(wireService);
+
+        Component component = EasyMock.createNiceMock(Component.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());
+        ComponentDefinition<FooImplementation> definition = new ComponentDefinition<FooImplementation>("foo", impl);
+        Component ret = registry.build(parent, definition, deploymentContext);
+        assertNotNull(ret);
+        EasyMock.verify(wireService);
     }
 
     protected void setUp() throws Exception {
         super.setUp();
         registry = new BuilderRegistryImpl();
-        WireService service = EasyMock.createNiceMock(WireService.class);
-        registry.setWireService(service);
         deploymentContext = new RootDeploymentContext(null, null, null, null);
+        parent = EasyMock.createNiceMock(CompositeComponent.class);
+        EasyMock.replay(parent);
     }
 
-    public static class GenerifiedBuilder implements ComponentBuilder<CompositeImplementation> {
-        public Component build(CompositeComponent parent,
-                               ComponentDefinition<CompositeImplementation> componentDefinition,
-                               DeploymentContext deploymentContext) {
-            return null;
-        }
-    }
-
-    public static class RawBuilder implements ComponentBuilder<CompositeImplementation> {
+    private class MockBuilder implements ComponentBuilder<CompositeImplementation> {
         public Component build(CompositeComponent parent,
                                ComponentDefinition componentDefinition,
                                DeploymentContext deploymentContext) throws BuilderConfigException {
             return null;
         }
     }
+
+    private class MockBindingDefinition extends BindingDefinition {
+
+    }
+
+    private class FooImplementation extends Implementation<ComponentType> {
+
+    }
+
+
 }



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