summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientProxyHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientProxyHandler.java')
-rw-r--r--sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientProxyHandler.java44
1 files changed, 33 insertions, 11 deletions
diff --git a/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientProxyHandler.java b/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientProxyHandler.java
index b4acaabbdf..6d182c61a7 100644
--- a/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientProxyHandler.java
+++ b/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientProxyHandler.java
@@ -21,6 +21,7 @@ package org.apache.tuscany.sca.client.rmi;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
+import java.net.URI;
import java.util.List;
import org.apache.tuscany.sca.assembly.AssemblyFactory;
@@ -29,23 +30,32 @@ import org.apache.tuscany.sca.assembly.EndpointReference;
import org.apache.tuscany.sca.binding.rmi.provider.RMIBindingInvoker;
import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.core.FactoryExtensionPoint;
+import org.apache.tuscany.sca.core.UtilityExtensionPoint;
import org.apache.tuscany.sca.host.rmi.ExtensibleRMIHost;
import org.apache.tuscany.sca.host.rmi.RMIHost;
import org.apache.tuscany.sca.host.rmi.RMIHostExtensionPoint;
+import org.apache.tuscany.sca.node.Node;
+import org.apache.tuscany.sca.node.NodeFactory;
+import org.apache.tuscany.sca.node.impl.NodeFactoryImpl;
+import org.apache.tuscany.sca.runtime.DomainRegistryFactory;
import org.apache.tuscany.sca.runtime.EndpointRegistry;
import org.oasisopen.sca.NoSuchServiceException;
public class SCAClientProxyHandler implements InvocationHandler {
+ protected NodeFactoryImpl nodeFactory;
+ protected ExtensionPointRegistry extensionsRegistry;
protected EndpointRegistry endpointRegistry;
protected EndpointReference endpointReference;
protected String serviceName;
protected RMIHost rmiHost;
+ private String domainURI;
- public SCAClientProxyHandler(String serviceName, ExtensionPointRegistry extensionsRegistry, EndpointRegistry endpointRegistry) {
- this.endpointRegistry = endpointRegistry;
+ public SCAClientProxyHandler(NodeFactoryImpl nodeFactory, String domainURI, String serviceName) {
+ this.nodeFactory = nodeFactory;
+ this.domainURI = domainURI;
this.serviceName = serviceName;
-
+ this.extensionsRegistry = nodeFactory.getExtensionPoints();
RMIHostExtensionPoint rmiHosts = extensionsRegistry.getExtensionPoint(RMIHostExtensionPoint.class);
this.rmiHost = new ExtensibleRMIHost(rmiHosts);
@@ -60,16 +70,28 @@ public class SCAClientProxyHandler implements InvocationHandler {
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ Node node = null;
+ try {
- List<Endpoint> endpoints = endpointRegistry.findEndpoint(endpointReference);
- if (endpoints.size() <1 ) {
- throw new NoSuchServiceException(serviceName);
- }
+ node = NodeFactory.newInstance().createNode(URI.create(domainURI)).start();
+ UtilityExtensionPoint utilities = extensionsRegistry.getExtensionPoint(UtilityExtensionPoint.class);
+ DomainRegistryFactory domainRegistryFactory = utilities.getUtility(DomainRegistryFactory.class);
+ this.endpointRegistry = domainRegistryFactory.getEndpointRegistry(null, domainURI);
- String uri = endpoints.get(0).getBinding().getURI();
- RMIBindingInvoker invoker = new RMIBindingInvoker(rmiHost, uri, method);
+ List<Endpoint> endpoints = endpointRegistry.findEndpoint(endpointReference);
+ if (endpoints.size() <1 ) {
+ throw new NoSuchServiceException(serviceName);
+ }
- return invoker.invokeTarget(args);
- }
+ String uri = endpoints.get(0).getBinding().getURI();
+ RMIBindingInvoker invoker = new RMIBindingInvoker(rmiHost, uri, method);
+ return invoker.invokeTarget(args);
+
+ } finally {
+ if (node != null) {
+ node.stop();
+ }
+ }
+ }
}