Author: rfeng
Date: Fri Nov 20 00:51:09 2009
New Revision: 882371

URL: http://svn.apache.org/viewvc?rev=882371&view=rev
Log:
Use binding name to look up services

Modified:
    
tuscany/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java
    
tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java

Modified: 
tuscany/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java?rev=882371&r1=882370&r2=882371&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java
 (original)
+++ 
tuscany/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java
 Fri Nov 20 00:51:09 2009
@@ -86,7 +86,7 @@
         Class<?> serviceInterface = 
getTargetJavaClass(serviceContract.getInterface());
 
         // Create a Java proxy to the target service
-        Object proxy = 
component.getComponentContext().createSelfReference(serviceInterface, 
service).getService();
+        Object proxy = 
component.getComponentContext().getServiceReference(serviceInterface, 
endpoint).getService();
 
         // Create and register a Servlet for this service
         JSONRPCServiceServlet serviceServlet =

Modified: 
tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java?rev=882371&r1=882370&r2=882371&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java
 (original)
+++ 
tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java
 Fri Nov 20 00:51:09 2009
@@ -23,10 +23,12 @@
 import java.util.List;
 
 import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.Binding;
 import org.apache.tuscany.sca.assembly.Component;
 import org.apache.tuscany.sca.assembly.ComponentProperty;
 import org.apache.tuscany.sca.assembly.ComponentReference;
 import org.apache.tuscany.sca.assembly.ComponentService;
+import org.apache.tuscany.sca.assembly.CompositeService;
 import org.apache.tuscany.sca.assembly.Endpoint;
 import org.apache.tuscany.sca.assembly.EndpointReference;
 import org.apache.tuscany.sca.assembly.Multiplicity;
@@ -148,28 +150,36 @@
             return eprs.get(0);
         }
     }
-    
+
     /**
      * Select an endpoint reference from the component reference
      * @param ref
      * @return
      */
-    private Endpoint getEndpoint(ComponentService service) {
+    private Endpoint getEndpoint(ComponentService service, String bindingName) 
{
+        if (bindingName == null) {
+            // The default binding name is the name of the promoted service
+            bindingName = getPromotedService(service).getName();
+        }
         List<Endpoint> eps = service.getEndpoints();
-        if (eps.size() == 1) {
-            // Return 1st one
-            return eps.get(0);
-        } else {
-            for (Endpoint ep : eps) {
-                // Try to see if there is an EPR using binding.sca
-                if (ep.getBinding().getType().equals(SCABinding.TYPE)) {
-                    return ep;
-                }
+        for (Endpoint ep : eps) {
+            Binding binding = ep.getBinding();
+            if (bindingName.equals(binding.getName()) || binding.getName() == 
null) {
+                return ep;
             }
-            return eps.get(0);
         }
+        return null;
     }
 
+    private ComponentService getPromotedService(ComponentService 
componentService) {
+        Service service = componentService.getService();
+        if (service instanceof CompositeService) {
+            return 
getPromotedService(((CompositeService)service).getPromotedService());
+        } else {
+            return componentService;
+        }
+
+    }
 
     /**
      * Gets the value for the specified property with the specified type.
@@ -229,10 +239,23 @@
     }
 
     public <B> ServiceReference<B> createSelfReference(Class<B> 
businessInterface, String serviceName) {
+        if (serviceName == null) {
+            return createSelfReference(businessInterface);
+        }
         try {
+            String bindingName = null;
+            int index = serviceName.indexOf('/');
+            if (index != -1) {
+                serviceName = serviceName.substring(0, index);
+                bindingName = serviceName.substring(index + 1);
+            }
             for (ComponentService service : component.getServices()) {
                 if (serviceName.equals(service.getName())) {
-                    return createSelfReference(businessInterface, service);
+                    Endpoint endpoint = getEndpoint(service, bindingName);
+                    if (endpoint == null) {
+                        break;
+                    }
+                    return getServiceReference(businessInterface, 
(RuntimeEndpoint)endpoint);
                 }
             }
             throw new ServiceRuntimeException("Service not found: " + 
serviceName);
@@ -252,7 +275,7 @@
     public <B> ServiceReference<B> createSelfReference(Class<B> 
businessInterface, ComponentService service) {
         try {
             RuntimeEndpointReference ref =
-                (RuntimeEndpointReference)createSelfReference(component, 
service, businessInterface);
+                (RuntimeEndpointReference)createEndpointReference(component, 
service, null, businessInterface);
             ref.setComponent(component);
             return getServiceReference(businessInterface, ref);
         } catch (Exception e) {
@@ -294,22 +317,21 @@
                 }
             }
             ref.setComponent(component);
-            return new ServiceReferenceImpl<B>(businessInterface, 
endpointReference, component
-                .getComponentContext().getCompositeContext());
+            return new ServiceReferenceImpl<B>(businessInterface, 
endpointReference, component.getComponentContext()
+                .getCompositeContext());
         } catch (Exception e) {
             throw new ServiceRuntimeException(e);
         }
     }
 
-    public <B> ServiceReference<B> getServiceReference(Class<B> 
businessInterface,
-                                                       RuntimeEndpoint 
endpoint) {
+    public <B> ServiceReference<B> getServiceReference(Class<B> 
businessInterface, RuntimeEndpoint endpoint) {
         try {
             if (businessInterface == null) {
                 InterfaceContract contract = 
endpoint.getComponentTypeServiceInterfaceContract();
                 businessInterface = 
(Class<B>)((JavaInterface)contract.getInterface()).getJavaClass();
             }
             RuntimeEndpointReference ref =
-                (RuntimeEndpointReference)createSelfReference(component, 
endpoint.getService(), businessInterface);
+                (RuntimeEndpointReference)createEndpointReference(endpoint, 
businessInterface);
             ref.setComponent(component);
             return new ServiceReferenceImpl<B>(businessInterface, ref, 
compositeContext);
         } catch (Exception e) {
@@ -324,29 +346,23 @@
      * @throws CloneNotSupportedException 
      * @throws InvalidInterfaceException 
      */
-    private EndpointReference createSelfReference(Component component,
-                                                  ComponentService service,
-                                                  Class<?> businessInterface) 
throws CloneNotSupportedException,
+    private EndpointReference createEndpointReference(Component component,
+                                                      ComponentService service,
+                                                      String bindingName,
+                                                      Class<?> 
businessInterface) throws CloneNotSupportedException,
         InvalidInterfaceException {
+
+        Endpoint endpoint = getEndpoint(service, bindingName);
+        return createEndpointReference(endpoint, businessInterface);
+    }
+
+    private EndpointReference createEndpointReference(Endpoint endpoint, 
Class<?> businessInterface)
+        throws CloneNotSupportedException, InvalidInterfaceException {
+        Component component = endpoint.getComponent();
+        ComponentService service = endpoint.getService();
         ComponentReference componentReference = 
assemblyFactory.createComponentReference();
         componentReference.setName("$self$." + service.getName());
 
-        Endpoint endpoint = getEndpoint(service);
-        
-        /*
-        for (Binding binding : service.getBindings()) {
-            if (binding instanceof OptimizableBinding) {
-                OptimizableBinding optimizableBinding = 
(OptimizableBinding)((OptimizableBinding)binding).clone();
-                optimizableBinding.setTargetBinding(binding);
-                optimizableBinding.setTargetComponent(component);
-                optimizableBinding.setTargetComponentService(service);
-                componentReference.getBindings().add(optimizableBinding);
-            } else {
-                componentReference.getBindings().add(binding);
-            }
-        }
-        */
-
         componentReference.setCallback(service.getCallback());
         componentReference.getTargets().add(service);
         componentReference.getPolicySets().addAll(service.getPolicySets());
@@ -375,16 +391,8 @@
 
         componentReference.getEndpointReferences().add(endpointReference);
         
((RuntimeComponentReference)componentReference).setComponent((RuntimeComponent)component);
-        ((RuntimeEndpointReference) endpointReference).bind(compositeContext);
+        ((RuntimeEndpointReference)endpointReference).bind(compositeContext);
 
-        /*
-        // do binding matching
-        boolean ok = eprBinder.bind(compositeContext.getEndpointRegistry(), 
endpointReference);
-
-        if (!ok) {
-            throw new SCARuntimeException("Unable to bind " + 
endpointReference);
-        }
-        */
         return endpointReference;
     }
 


Reply via email to