Author: antelder
Date: Tue Jun  7 08:27:31 2011
New Revision: 1132904

URL: http://svn.apache.org/viewvc?rev=1132904&view=rev
Log:
Sync up the sca client to match the domain node getService. Just temporary so 
they both work the same to make it easier to work out how to refactor this into 
one bit of code

Modified:
    tuscany/sca-java-2.x/trunk/modules/sca-client-impl/pom.xml
    
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RemoteServiceInvocationHandler.java
    
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl.java

Modified: tuscany/sca-java-2.x/trunk/modules/sca-client-impl/pom.xml
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/sca-client-impl/pom.xml?rev=1132904&r1=1132903&r2=1132904&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/sca-client-impl/pom.xml (original)
+++ tuscany/sca-java-2.x/trunk/modules/sca-client-impl/pom.xml Tue Jun  7 
08:27:31 2011
@@ -41,6 +41,12 @@
             <artifactId>tuscany-core</artifactId>
             <version>2.0-SNAPSHOT</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-domain-node</artifactId>
+            <version>2.0-SNAPSHOT</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
 </project>

Modified: 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RemoteServiceInvocationHandler.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RemoteServiceInvocationHandler.java?rev=1132904&r1=1132903&r2=1132904&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RemoteServiceInvocationHandler.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RemoteServiceInvocationHandler.java
 Tue Jun  7 08:27:31 2011
@@ -22,6 +22,9 @@ package org.apache.tuscany.sca.client.im
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
 import java.util.List;
 
 import org.apache.tuscany.sca.assembly.AssemblyFactory;
@@ -44,6 +47,7 @@ import org.apache.tuscany.sca.interfaced
 import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
 import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
 import org.apache.tuscany.sca.runtime.DomainRegistry;
+import org.apache.tuscany.sca.runtime.ContributionDescription;
 import org.apache.tuscany.sca.runtime.RuntimeComponent;
 import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
 import org.apache.tuscany.sca.runtime.RuntimeEndpointReference;
@@ -61,7 +65,7 @@ public class RemoteServiceInvocationHand
 
     private String domainURI;
     private String serviceName;
-    private Class<?> serviceInterface;
+    public Class<?> serviceInterface;
     
     private ExtensionPointRegistry extensionsRegistry;
     private DomainRegistry domainRegistry;
@@ -85,14 +89,18 @@ public class RemoteServiceInvocationHand
      * Constructor for when there is no existing Tuscany runtime for the domain
      * @param endpointRegistry2 
      * @param extensionPointRegistry 
+     * @throws NoSuchServiceException 
      */
-    public RemoteServiceInvocationHandler(ExtensionPointRegistry 
extensionsRegistry, DomainRegistry domainRegistry, String domainURI, String 
serviceName, Class<?> serviceInterface) throws NoSuchDomainException {
+    public RemoteServiceInvocationHandler(ExtensionPointRegistry 
extensionsRegistry, DomainRegistry domainRegistry, String domainURI, String 
serviceName, Class<?> serviceInterface) throws NoSuchDomainException, 
NoSuchServiceException {
         this.extensionsRegistry = extensionsRegistry;
         this.domainRegistry = domainRegistry;
         this.domainURI = domainURI;
         this.serviceName = serviceName;
         this.serviceInterface = serviceInterface;
         this.reuse = false;
+        if (serviceInterface == null) {
+            getHandler();
+        }
     }
 
     public Object invoke(Object proxy, Method method, Object[] args) throws 
Throwable {
@@ -131,6 +139,14 @@ public class RemoteServiceInvocationHand
             }
             Endpoint endpoint = eps.get(0); // TODO: what should be done with 
multiple endpoints?
              
+            if (serviceInterface == null) {
+                try {
+                    findInterface(endpoint);
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+            }
+            
             RuntimeEndpointReference epr;
             try {
                 epr = createEndpointReference(javaInterfaceFactory, 
compositeContext, assemblyFactory, endpoint, serviceInterface);
@@ -143,6 +159,18 @@ public class RemoteServiceInvocationHand
         return handler;
     }
 
+    private void findInterface(Endpoint endpoint) throws 
MalformedURLException, ClassNotFoundException {
+        Interface iface = 
endpoint.getService().getInterfaceContract().getInterface();
+        if (iface instanceof JavaInterface) {
+            String curi = 
domainRegistry.getContainingCompositesContributionURI(endpoint.getComponent().getName());
+            if (curi != null) {
+                ContributionDescription ic = 
domainRegistry.getInstalledContribution(curi);
+                ClassLoader cl = new URLClassLoader(new URL[]{new 
URL(ic.getURL())});
+                serviceInterface = 
cl.loadClass(((JavaInterface)iface).getName());
+            }
+        }
+    }
+
     private RuntimeEndpointReference 
createEndpointReference(JavaInterfaceFactory javaInterfaceFactory, 
CompositeContext compositeContext, AssemblyFactory assemblyFactory, Endpoint 
endpoint, Class<?> businessInterface) throws CloneNotSupportedException, 
InvalidInterfaceException {
         Component component = endpoint.getComponent();
         ComponentService service = endpoint.getService();

Modified: 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl.java?rev=1132904&r1=1132903&r2=1132904&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl.java
 Tue Jun  7 08:27:31 2011
@@ -99,6 +99,9 @@ public class SCAClientFactoryImpl extend
             // no local runtime
             handler = new 
RemoteServiceInvocationHandler(extensionPointRegistry, domainRegistry, 
getDomainURI().toString(), serviceURI, serviceInterface);
         }
+        if (serviceInterface == null) {
+            serviceInterface = 
(Class<T>)((RemoteServiceInvocationHandler)handler).serviceInterface;
+        }
 
         return (T)Proxy.newProxyInstance(serviceInterface.getClassLoader(), 
new Class[]{serviceInterface}, handler);
     }


Reply via email to