From 9b8fd2b5139dce38fdd0f032676881ac885b31ac Mon Sep 17 00:00:00 2001 From: slaws Date: Fri, 19 Jun 2009 15:37:36 +0000 Subject: TUSCANY-3101 pass EndpointReference and Endpoint in to binding providers rather than component/reference or service/binding git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@786552 13f79535-47bb-0310-9956-ffa450edef68 --- .../provider/RuntimeSCABindingProviderFactory.java | 14 ++++---- .../RuntimeSCAReferenceBindingProvider.java | 37 ++++++++++++---------- .../provider/RuntimeSCAServiceBindingProvider.java | 27 +++++++++++++--- 3 files changed, 48 insertions(+), 30 deletions(-) (limited to 'java/sca/modules/binding-sca-runtime/src') diff --git a/java/sca/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCABindingProviderFactory.java b/java/sca/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCABindingProviderFactory.java index 5d1b3ca399..110d15a1cf 100644 --- a/java/sca/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCABindingProviderFactory.java +++ b/java/sca/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCABindingProviderFactory.java @@ -19,6 +19,8 @@ package org.apache.tuscany.sca.binding.sca.provider; +import org.apache.tuscany.sca.assembly.Endpoint; +import org.apache.tuscany.sca.assembly.EndpointReference; import org.apache.tuscany.sca.assembly.SCABinding; import org.apache.tuscany.sca.core.ExtensionPointRegistry; import org.apache.tuscany.sca.provider.BindingProviderFactory; @@ -42,17 +44,13 @@ public class RuntimeSCABindingProviderFactory implements BindingProviderFactory< } - public ReferenceBindingProvider createReferenceBindingProvider(RuntimeComponent component, - RuntimeComponentReference reference, - SCABinding binding) { + public ReferenceBindingProvider createReferenceBindingProvider(EndpointReference endpointReference) { - return new RuntimeSCAReferenceBindingProvider(extensionPoints, component, reference, binding); + return new RuntimeSCAReferenceBindingProvider(extensionPoints, endpointReference); } - public ServiceBindingProvider createServiceBindingProvider(RuntimeComponent component, - RuntimeComponentService service, - SCABinding binding) { - return new RuntimeSCAServiceBindingProvider(extensionPoints, component, service, binding); + public ServiceBindingProvider createServiceBindingProvider(Endpoint endpoint) { + return new RuntimeSCAServiceBindingProvider(extensionPoints, endpoint); } public Class getModelType() { diff --git a/java/sca/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAReferenceBindingProvider.java b/java/sca/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAReferenceBindingProvider.java index d0d5d34d80..479e50a81a 100644 --- a/java/sca/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAReferenceBindingProvider.java +++ b/java/sca/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAReferenceBindingProvider.java @@ -56,6 +56,7 @@ public class RuntimeSCAReferenceBindingProvider implements ReferenceBindingProvi private static final Logger logger = Logger.getLogger(RuntimeSCAReferenceBindingProvider.class.getName()); + private EndpointReference endpointReference; private RuntimeComponent component; private RuntimeComponentReference reference; private SCABinding binding; @@ -66,12 +67,11 @@ public class RuntimeSCAReferenceBindingProvider implements ReferenceBindingProvi private SCABindingFactory scaBindingFactory; public RuntimeSCAReferenceBindingProvider(ExtensionPointRegistry extensionPoints, - RuntimeComponent component, - RuntimeComponentReference reference, - SCABinding binding) { - this.component = component; - this.reference = reference; - this.binding = binding; + EndpointReference endpointReference) { + this.endpointReference = endpointReference; + this.component = (RuntimeComponent)endpointReference.getComponent(); + this.reference = (RuntimeComponentReference)endpointReference.getReference(); + this.binding = (SCABinding)endpointReference.getBinding(); this.scaBindingFactory = extensionPoints.getExtensionPoint(FactoryExtensionPoint.class).getFactory(SCABindingFactory.class); @@ -89,12 +89,9 @@ public class RuntimeSCAReferenceBindingProvider implements ReferenceBindingProvi public boolean isTargetRemote() { boolean targetIsRemote = false; - // first look at the target service and see if this has been resolved - OptimizableBinding optimizableBinding = (OptimizableBinding)binding; - // The decision is based on the results of the wiring process in the assembly model // The SCA binding is used to represent unresolved reference targets, i.e. those - // reference targets that need resolving at run time. We can tell by lookin if the + // reference targets that need resolving at run time. We can tell by looking if the // service to which this binding refers is resolved or not. // // TODO - When a callback is in operation. A callback reference bindings sometimes has to @@ -107,12 +104,9 @@ public class RuntimeSCAReferenceBindingProvider implements ReferenceBindingProvi } else { targetIsRemote = true; } - } else if (optimizableBinding.getTargetComponentService() != null) { - if (optimizableBinding.getTargetComponentService().isUnresolved() == true) { - targetIsRemote = true; - } else { - targetIsRemote = false; - } + } if ( (endpointReference.isRemoteReference()) && + (endpointReference.getTargetEndpoint().isRemoteReference())){ + targetIsRemote = true; } else { // the case where the wire is specified by URI, e.g. callbacks or user specified bindings, and // look at the provided URI to decide whether it is a local or remote case @@ -156,9 +150,18 @@ public class RuntimeSCAReferenceBindingProvider implements ReferenceBindingProvi // create the remote provider DistributedSCABinding distributedBinding = scaBindingFactory.createDistributedSCABinding(); distributedBinding.setSCABinding(binding); + + // create a copy of the endpoint reference and change the binding + EndpointReference epr = null; + try { + epr = (EndpointReference)endpointReference.clone(); + } catch (Exception ex) { + // we know we can clone endpoint references + } + epr.setBinding(distributedBinding); distributedProvider = - distributedProviderFactory.createReferenceBindingProvider(component, reference, distributedBinding); + distributedProviderFactory.createReferenceBindingProvider(epr); } } diff --git a/java/sca/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAServiceBindingProvider.java b/java/sca/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAServiceBindingProvider.java index 6852bcaab0..df4305f42a 100644 --- a/java/sca/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAServiceBindingProvider.java +++ b/java/sca/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAServiceBindingProvider.java @@ -22,6 +22,8 @@ package org.apache.tuscany.sca.binding.sca.provider; import java.net.URI; import org.apache.tuscany.sca.assembly.DistributedSCABinding; +import org.apache.tuscany.sca.assembly.Endpoint; +import org.apache.tuscany.sca.assembly.EndpointReference; import org.apache.tuscany.sca.assembly.SCABinding; import org.apache.tuscany.sca.assembly.SCABindingFactory; import org.apache.tuscany.sca.core.ExtensionPointRegistry; @@ -43,16 +45,22 @@ import org.apache.tuscany.sca.runtime.RuntimeComponentService; */ public class RuntimeSCAServiceBindingProvider implements ServiceBindingProvider { + private RuntimeComponent component; private RuntimeComponentService service; + private SCABinding binding; + + private BindingProviderFactory distributedProviderFactory; private ServiceBindingProvider distributedProvider; private DistributedSCABinding distributedBinding; + public RuntimeSCAServiceBindingProvider(ExtensionPointRegistry extensionPoints, - RuntimeComponent component, - RuntimeComponentService service, - SCABinding binding) { - this.service = service; + Endpoint endpoint) { + this.component = (RuntimeComponent)endpoint.getComponent(); + this.service = (RuntimeComponentService)endpoint.getService(); + this.binding = (SCABinding)endpoint.getBinding(); + // if there is potentially a wire to this service that crosses the node boundary if (service.getInterfaceContract().getInterface().isRemotable()) { @@ -85,9 +93,18 @@ public class RuntimeSCAServiceBindingProvider implements ServiceBindingProvider // create a nested provider to handle the remote case distributedBinding = scaBindingFactory.createDistributedSCABinding(); distributedBinding.setSCABinding(binding); + + // create a copy of the endpoint and change the binding + Endpoint ep = null; + try { + ep = (Endpoint)endpoint.clone(); + } catch (Exception ex) { + // we know we can clone endpoint + } + ep.setBinding(distributedBinding); distributedProvider = - distributedProviderFactory.createServiceBindingProvider(component, service, distributedBinding); + distributedProviderFactory.createServiceBindingProvider(ep); } else { -- cgit v1.2.3