summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/trunk/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAServiceBindingProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-2.x/trunk/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAServiceBindingProvider.java')
-rw-r--r--sca-java-2.x/trunk/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAServiceBindingProvider.java63
1 files changed, 28 insertions, 35 deletions
diff --git a/sca-java-2.x/trunk/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAServiceBindingProvider.java b/sca-java-2.x/trunk/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAServiceBindingProvider.java
index e1ffa548de..2dc019226a 100644
--- a/sca-java-2.x/trunk/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAServiceBindingProvider.java
+++ b/sca-java-2.x/trunk/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAServiceBindingProvider.java
@@ -19,15 +19,16 @@
package org.apache.tuscany.sca.binding.sca.provider;
+import org.apache.tuscany.sca.binding.local.LocalSCABindingInvocationInterceptor;
import org.apache.tuscany.sca.interfacedef.InterfaceContract;
import org.apache.tuscany.sca.invocation.InvocationChain;
import org.apache.tuscany.sca.invocation.InvokerAsyncResponse;
import org.apache.tuscany.sca.invocation.Phase;
import org.apache.tuscany.sca.provider.EndpointAsyncProvider;
+import org.apache.tuscany.sca.provider.EndpointProvider;
import org.apache.tuscany.sca.provider.OptimisingBindingProvider;
import org.apache.tuscany.sca.provider.SCABindingMapper;
import org.apache.tuscany.sca.provider.ServiceBindingProvider;
-import org.apache.tuscany.sca.runtime.RuntimeComponentService;
import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
/**
@@ -40,22 +41,23 @@ import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
*/
public class RuntimeSCAServiceBindingProvider implements EndpointAsyncProvider, OptimisingBindingProvider {
private RuntimeEndpoint endpoint;
- private RuntimeComponentService service;
+ private SCABindingMapper mapper;
- private ServiceBindingProvider distributedProvider;
+ private ServiceBindingProvider delegatingBindingProvider;
public RuntimeSCAServiceBindingProvider(SCABindingMapper scaBindingMapper, RuntimeEndpoint endpoint) {
this.endpoint = endpoint;
- this.service = (RuntimeComponentService)endpoint.getService();
-
- // if there is potentially a wire to this service that crosses the node boundary
- // then we need to create a remote endpoint
- if (service.getInterfaceContract().getInterface().isRemotable()) {
+ this.mapper = scaBindingMapper;
+ getDelegatingProvider();
+ }
- if (scaBindingMapper.isRemotable(endpoint)) {
- distributedProvider = new DelegatingSCAServiceBindingProvider(endpoint, scaBindingMapper);
- }
- }
+ // if there is potentially a wire to this service that crosses the node boundary
+ // then we need to create a remote endpoint
+ private ServiceBindingProvider getDelegatingProvider() {
+ if(delegatingBindingProvider == null) {
+ delegatingBindingProvider = new DelegatingSCAServiceBindingProvider(endpoint, mapper);
+ }
+ return delegatingBindingProvider;
}
/*
@@ -73,35 +75,26 @@ public class RuntimeSCAServiceBindingProvider implements EndpointAsyncProvider,
*/
public InterfaceContract getBindingInterfaceContract() {
- if (distributedProvider != null) {
- return distributedProvider.getBindingInterfaceContract();
- } else {
- return endpoint.getComponentTypeServiceInterfaceContract();
- }
+ return getDelegatingProvider().getBindingInterfaceContract();
}
public boolean supportsOneWayInvocation() {
- if (distributedProvider != null) {
- return distributedProvider.supportsOneWayInvocation();
- }
- return false;
+ return getDelegatingProvider().supportsOneWayInvocation();
}
public void start() {
- if (distributedProvider != null) {
- distributedProvider.start();
- }
+ getDelegatingProvider().start();
}
public void stop() {
endpoint.getBinding().setURI(null);
- if (distributedProvider != null) {
- distributedProvider.stop();
- }
+ getDelegatingProvider().stop();
}
public void configure() {
- // TODO Auto-generated method stub
+ if (getDelegatingProvider() instanceof EndpointProvider) {
+ ((EndpointProvider)getDelegatingProvider()).configure();
+ }
}
public boolean supportsNativeAsync() {
@@ -109,15 +102,11 @@ public class RuntimeSCAServiceBindingProvider implements EndpointAsyncProvider,
}
public InvokerAsyncResponse createAsyncResponseInvoker() {
- if (distributedProvider != null) {
- return ((EndpointAsyncProvider)distributedProvider).createAsyncResponseInvoker();
- } else {
- return new SCABindingAsyncResponseInvoker(null, null);
- }
+ return ((EndpointAsyncProvider)getDelegatingProvider()).createAsyncResponseInvoker();
}
/**
- * Handles the optimisation for the service side chain, which provides a mechanism for direct local
+ * Handles the optimization for the service side chain, which provides a mechanism for direct local
* invocation of the service in cases where the component reference is in the same JVM as the
* component service. Effectively, this means skipping any Remote Binding listener and its associated
* binding chain and data binding processors.
@@ -129,9 +118,13 @@ public class RuntimeSCAServiceBindingProvider implements EndpointAsyncProvider,
// To optimise, place an SCA binding Local Invocation interceptor at the start of the POLICY phase
// of the service chain...
for (InvocationChain chain : ep.getInvocationChains()) {
- chain.addHeadInterceptor( Phase.SERVICE_POLICY, new SCABindingLocalInvocationInterceptor() );
+ chain.addHeadInterceptor( Phase.SERVICE_POLICY, new LocalSCABindingInvocationInterceptor() );
} // end for
} // end method optimiseBinding
+
+ public RuntimeEndpoint getDelegateEndpoint(){
+ return ((DelegatingSCAServiceBindingProvider)delegatingBindingProvider).getDelegateEndpoint();
+ }
} // end class RuntimeSCAServiceBinding