summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2009-11-20 00:51:09 +0000
committerrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2009-11-20 00:51:09 +0000
commit765e058d13c4ad1ba0e3e68ca2820cc6dd514036 (patch)
treefe23a343eb78cbebebb87473c80157a44a29cce8
parent8e81fc8ed79b2961c840f276b443581c445bc3a2 (diff)
Use binding name to look up services
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@882371 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java2
-rw-r--r--java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java102
2 files changed, 56 insertions, 48 deletions
diff --git a/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java b/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java
index 1ab46aaff6..10e9368936 100644
--- a/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java
+++ b/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java
@@ -86,7 +86,7 @@ public class JSONRPCServiceBindingProvider implements ServiceBindingProvider {
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 =
diff --git a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java
index 1b6cf79645..3a4ff89357 100644
--- a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java
+++ b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java
@@ -23,10 +23,12 @@ import java.util.Collection;
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 @@ public class ComponentContextImpl implements RuntimeComponentContext {
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 class ComponentContextImpl implements RuntimeComponentContext {
}
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 class ComponentContextImpl implements RuntimeComponentContext {
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 @@ public class ComponentContextImpl implements RuntimeComponentContext {
}
}
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 @@ public class ComponentContextImpl implements RuntimeComponentContext {
* @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 @@ public class ComponentContextImpl implements RuntimeComponentContext {
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;
}