Author: antelder
Date: Tue Mar 22 14:50:45 2011
New Revision: 1084200

URL: http://svn.apache.org/viewvc?rev=1084200&view=rev
Log:
Finish the sca client cleanup, remove all the old unused classes and moethods 
and rename the remaining to more obvious names

Added:
    
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RemoteServiceInvocationHandler.java
   (with props)
    
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RuntimeUtils.java
   (with props)
    
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl.java
      - copied, changed from r1084093, 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl3.java
Removed:
    
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/Handler2.java
    
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl2.java
    
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl3.java
    
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientHandler.java
    
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientProxyHandler.java
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/SCAClientFactoryFinderImpl.java
    
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientModuleActivator.java
    
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/resources/META-INF/services/org.oasisopen.sca.client.SCAClientFactory

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=1084200&r1=1084199&r2=1084200&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 Mar 22 
14:50:45 2011
@@ -41,12 +41,6 @@
             <artifactId>tuscany-core</artifactId>
             <version>2.0-SNAPSHOT</version>
         </dependency>
-        <dependency>
-            <groupId>org.apache.tuscany.sca</groupId>
-            <artifactId>tuscany-node-impl</artifactId>
-            <version>2.0-SNAPSHOT</version>
-        </dependency>
-
     </dependencies>
 
 </project>

Added: 
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=1084200&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RemoteServiceInvocationHandler.java
 (added)
+++ 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RemoteServiceInvocationHandler.java
 Tue Mar 22 14:50:45 2011
@@ -0,0 +1,222 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.client.impl;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.util.List;
+
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.ComponentReference;
+import org.apache.tuscany.sca.assembly.ComponentService;
+import org.apache.tuscany.sca.assembly.Endpoint;
+import org.apache.tuscany.sca.assembly.EndpointReference;
+import org.apache.tuscany.sca.assembly.Multiplicity;
+import org.apache.tuscany.sca.assembly.Service;
+import org.apache.tuscany.sca.context.CompositeContext;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.FactoryExtensionPoint;
+import org.apache.tuscany.sca.core.invocation.ExtensibleProxyFactory;
+import org.apache.tuscany.sca.core.invocation.ProxyFactory;
+import org.apache.tuscany.sca.core.invocation.ProxyFactoryExtensionPoint;
+import org.apache.tuscany.sca.interfacedef.Interface;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
+import org.apache.tuscany.sca.runtime.EndpointRegistry;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
+import org.apache.tuscany.sca.runtime.RuntimeEndpointReference;
+import org.oasisopen.sca.NoSuchDomainException;
+import org.oasisopen.sca.NoSuchServiceException;
+import org.oasisopen.sca.ServiceRuntimeException;
+
+/**
+ * An InvocationHandler for invoking services where the component is not 
running locally.
+ * It has two modes of operation for the cases where there either is or is not 
an existing 
+ * Tuscany runtime locally. The SCAClient API has no close so when there is no 
existing
+ * local runtime then one must be created and destroyed for each service 
invocation.
+ */
+public class RemoteServiceInvocationHandler implements InvocationHandler {
+
+    private String domainURI;
+    private String serviceName;
+    private Class<?> serviceInterface;
+    
+    private ExtensionPointRegistry extensionsRegistry;
+    private EndpointRegistry endpointRegistry;
+    
+    private InvocationHandler handler;
+    private boolean reuse;
+
+    /**
+     * Constructor for when there is an existing Tuscany runtime for the domain
+     */
+    public RemoteServiceInvocationHandler(ExtensionPointRegistry 
extensionsRegistry, EndpointRegistry endpointRegistry, String serviceName, 
Class<?> serviceInterface) {
+        this.extensionsRegistry = extensionsRegistry;
+        this.endpointRegistry = endpointRegistry;
+        this.domainURI = endpointRegistry.getDomainURI();
+        this.serviceName = serviceName;
+        this.serviceInterface = serviceInterface;
+        this.reuse = true;
+    }
+    
+    /**
+     * Constructor for when there is no existing Tuscany runtime for the domain
+     * @param endpointRegistry2 
+     * @param extensionPointRegistry 
+     */
+    public RemoteServiceInvocationHandler(ExtensionPointRegistry 
extensionsRegistry, EndpointRegistry endpointRegistry, String domainURI, String 
serviceName, Class<?> serviceInterface) throws NoSuchDomainException {
+        this.extensionsRegistry = extensionsRegistry;
+        this.endpointRegistry = endpointRegistry;
+        this.domainURI = domainURI;
+        this.serviceName = serviceName;
+        this.serviceInterface = serviceInterface;
+        this.reuse = false;
+    }
+
+    public Object invoke(Object proxy, Method method, Object[] args) throws 
Throwable {
+        try {
+            
+            return getHandler().invoke(proxy, method, args);
+            
+        } finally {
+            if (!reuse) {
+                extensionsRegistry.stop();
+                extensionsRegistry = null;
+                handler = null;
+            }
+        }
+    }
+
+    private InvocationHandler getHandler() throws NoSuchDomainException, 
NoSuchServiceException {
+        if (handler == null) {
+            if (extensionsRegistry == null) {
+                extensionsRegistry = 
RuntimeUtils.createExtensionPointRegistry();
+            }
+            if (endpointRegistry == null) {
+                endpointRegistry = 
RuntimeUtils.getClientEndpointRegistry(extensionsRegistry, domainURI);
+            }
+
+            FactoryExtensionPoint factories = 
extensionsRegistry.getExtensionPoint(FactoryExtensionPoint.class);
+            AssemblyFactory assemblyFactory = 
factories.getFactory(AssemblyFactory.class);
+            JavaInterfaceFactory javaInterfaceFactory = 
factories.getFactory(JavaInterfaceFactory.class);
+            ProxyFactory proxyFactory = new 
ExtensibleProxyFactory(extensionsRegistry.getExtensionPoint(ProxyFactoryExtensionPoint.class));
+
+            CompositeContext compositeContext = new 
CompositeContext(extensionsRegistry, endpointRegistry, null, domainURI, null, 
null);
+
+            List<Endpoint> eps = endpointRegistry.findEndpoint(serviceName);
+            if (eps == null || eps.size() < 1) {
+                throw new NoSuchServiceException(serviceName);
+            }
+            Endpoint endpoint = eps.get(0); // TODO: what should be done with 
multiple endpoints?
+             
+            RuntimeEndpointReference epr;
+            try {
+                epr = createEndpointReference(javaInterfaceFactory, 
compositeContext, assemblyFactory, endpoint, serviceInterface);
+            } catch (Exception e) {
+                throw new ServiceRuntimeException(e);
+            }
+
+            this.handler = 
Proxy.getInvocationHandler(proxyFactory.createProxy(serviceInterface, epr));
+        }
+        return handler;
+    }
+
+    private RuntimeEndpointReference 
createEndpointReference(JavaInterfaceFactory javaInterfaceFactory, 
CompositeContext compositeContext, AssemblyFactory assemblyFactory, Endpoint 
endpoint, Class<?> businessInterface) throws CloneNotSupportedException, 
InvalidInterfaceException {
+        Component component = endpoint.getComponent();
+        ComponentService service = endpoint.getService();
+        ComponentReference componentReference = 
assemblyFactory.createComponentReference();
+        componentReference.setName("sca.client." + service.getName());
+
+        componentReference.setCallback(service.getCallback());
+        componentReference.getTargets().add(service);
+        componentReference.getPolicySets().addAll(service.getPolicySets());
+        
componentReference.getRequiredIntents().addAll(service.getRequiredIntents());
+        componentReference.getBindings().add(endpoint.getBinding());
+
+        InterfaceContract interfaceContract = service.getInterfaceContract();
+        Service componentTypeService = service.getService();
+        if (componentTypeService != null && 
componentTypeService.getInterfaceContract() != null) {
+            interfaceContract = componentTypeService.getInterfaceContract();
+        }
+        interfaceContract = getInterfaceContract(javaInterfaceFactory, 
interfaceContract, businessInterface);
+        componentReference.setInterfaceContract(interfaceContract);
+        componentReference.setMultiplicity(Multiplicity.ONE_ONE);
+        // component.getReferences().add(componentReference);
+
+        // create endpoint reference
+        EndpointReference endpointReference = 
assemblyFactory.createEndpointReference();
+        endpointReference.setComponent(component);
+        endpointReference.setReference(componentReference);
+        endpointReference.setBinding(endpoint.getBinding());
+        endpointReference.setUnresolved(false);
+        
endpointReference.setStatus(EndpointReference.Status.WIRED_TARGET_FOUND_AND_MATCHED);
+
+        endpointReference.setTargetEndpoint(endpoint);
+
+        componentReference.getEndpointReferences().add(endpointReference);
+        
((RuntimeComponentReference)componentReference).setComponent((RuntimeComponent)component);
+        ((RuntimeEndpointReference)endpointReference).bind(compositeContext);
+
+        return (RuntimeEndpointReference) endpointReference;
+    }
+
+    /**
+     * @param interfaceContract
+     * @param businessInterface
+     * @return
+     * @throws CloneNotSupportedException
+     * @throws InvalidInterfaceException
+     */
+    private InterfaceContract getInterfaceContract(JavaInterfaceFactory 
javaInterfaceFactory, InterfaceContract interfaceContract, Class<?> 
businessInterface)
+        throws CloneNotSupportedException, InvalidInterfaceException {
+        if (businessInterface == null) {
+            return interfaceContract;
+        }
+        boolean compatible = false;
+        if (interfaceContract != null && interfaceContract.getInterface() != 
null) {
+            Interface interfaze = interfaceContract.getInterface();
+            if (interfaze instanceof JavaInterface) {
+                Class<?> cls = ((JavaInterface)interfaze).getJavaClass();
+                if (cls != null && businessInterface.isAssignableFrom(cls)) {
+                    compatible = true;
+                }
+            }
+        }
+
+        if (!compatible) {
+            // The interface is not assignable from the interface contract
+            interfaceContract = 
javaInterfaceFactory.createJavaInterfaceContract();
+            JavaInterface callInterface = 
javaInterfaceFactory.createJavaInterface(businessInterface);
+            interfaceContract.setInterface(callInterface);
+            if (callInterface.getCallbackClass() != null) {
+                
interfaceContract.setCallbackInterface(javaInterfaceFactory.createJavaInterface(callInterface
+                    .getCallbackClass()));
+            }
+        }
+
+        return interfaceContract;
+    }    
+    
+}

Propchange: 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RemoteServiceInvocationHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RemoteServiceInvocationHandler.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RuntimeUtils.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/RuntimeUtils.java?rev=1084200&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RuntimeUtils.java
 (added)
+++ 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RuntimeUtils.java
 Tue Mar 22 14:50:45 2011
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.client.impl;
+
+import java.util.Properties;
+
+import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.FactoryExtensionPoint;
+import org.apache.tuscany.sca.core.ModuleActivatorExtensionPoint;
+import org.apache.tuscany.sca.core.UtilityExtensionPoint;
+import org.apache.tuscany.sca.core.assembly.RuntimeAssemblyFactory;
+import org.apache.tuscany.sca.runtime.DomainRegistryFactory;
+import org.apache.tuscany.sca.runtime.EndpointRegistry;
+import org.apache.tuscany.sca.runtime.ExtensibleDomainRegistryFactory;
+import org.apache.tuscany.sca.runtime.RuntimeProperties;
+import org.apache.tuscany.sca.work.WorkScheduler;
+import org.oasisopen.sca.NoSuchDomainException;
+
+public class RuntimeUtils {
+
+    public static ExtensionPointRegistry createExtensionPointRegistry() throws 
NoSuchDomainException {
+        ExtensionPointRegistry extensionsRegistry = new 
DefaultExtensionPointRegistry();
+        extensionsRegistry.start();
+
+        FactoryExtensionPoint modelFactories = 
extensionsRegistry.getExtensionPoint(FactoryExtensionPoint.class);
+        RuntimeAssemblyFactory assemblyFactory = new 
RuntimeAssemblyFactory(extensionsRegistry);
+        modelFactories.addFactory(assemblyFactory);
+
+        UtilityExtensionPoint utilities = 
extensionsRegistry.getExtensionPoint(UtilityExtensionPoint.class);
+        
+        Properties domainConfigProps = new Properties();
+        domainConfigProps.setProperty("client", "true");
+        
utilities.getUtility(RuntimeProperties.class).setProperties(domainConfigProps);
+
+        // TODO: is this needed?
+        utilities.getUtility(WorkScheduler.class);
+
+        // Initialize the Tuscany module activators
+        // The module activators will be started
+        
extensionsRegistry.getExtensionPoint(ModuleActivatorExtensionPoint.class);
+        
+        return extensionsRegistry;
+    }
+
+    public static EndpointRegistry 
getClientEndpointRegistry(ExtensionPointRegistry extensionsRegistry, String 
domainURI) throws NoSuchDomainException {
+        DomainRegistryFactory domainRegistryFactory = 
ExtensibleDomainRegistryFactory.getInstance(extensionsRegistry);
+        
+        String registryURI = domainURI;
+
+        // TODO: theres better ways to do this but this gets things working 
for now
+        if (registryURI.indexOf(":") == -1) {
+            registryURI = "tuscanyclient:" + registryURI;
+        }
+        if (registryURI.startsWith("uri:")) {
+            registryURI = "tuscanyclient:" + registryURI.substring(4);
+        }
+        if (registryURI.startsWith("tuscany:")) {
+            registryURI = "tuscanyclient:" + registryURI.substring(8);
+        }
+
+        try {
+            return domainRegistryFactory.getEndpointRegistry(registryURI, 
domainURI);
+        } catch (Exception e) {
+            throw new NoSuchDomainException(domainURI, e);
+        }
+    }
+}

Propchange: 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RuntimeUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RuntimeUtils.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryFinderImpl.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/SCAClientFactoryFinderImpl.java?rev=1084200&r1=1084199&r2=1084200&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryFinderImpl.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryFinderImpl.java
 Tue Mar 22 14:50:45 2011
@@ -43,7 +43,7 @@ public class SCAClientFactoryFinderImpl 
     public SCAClientFactory find(Properties properties,
                                  ClassLoader classLoader,
                                  URI domainURI ) throws NoSuchDomainException, 
ServiceRuntimeException {
-        return new SCAClientFactoryImpl3(properties, domainURI);
+        return new SCAClientFactoryImpl(domainURI);
     }
     
 }

Copied: 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl.java
 (from r1084093, 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl3.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?p2=tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl.java&p1=tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl3.java&r1=1084093&r2=1084200&rev=1084200&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl3.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl.java
 Tue Mar 22 14:50:45 2011
@@ -19,56 +19,87 @@
 
 package org.apache.tuscany.sca.client.impl;
 
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Proxy;
 import java.net.URI;
-import java.util.Properties;
+import java.util.List;
 
+import org.apache.tuscany.sca.assembly.Endpoint;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
 import org.apache.tuscany.sca.core.ExtensionPointRegistryLocator;
 import org.apache.tuscany.sca.runtime.EndpointRegistry;
 import org.apache.tuscany.sca.runtime.ExtensibleDomainRegistryFactory;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
 import org.oasisopen.sca.NoSuchDomainException;
 import org.oasisopen.sca.NoSuchServiceException;
 import org.oasisopen.sca.client.SCAClientFactory;
 import org.oasisopen.sca.client.SCAClientFactoryFinder;
 
-public class SCAClientFactoryImpl3 extends SCAClientFactory {
+public class SCAClientFactoryImpl extends SCAClientFactory {
 
-    private Handler2 handler2;
+    private ExtensionPointRegistry extensionPointRegistry;
+    private EndpointRegistry endpointRegistry;
+    private boolean remoteClient;
     
     public static void setSCAClientFactoryFinder(SCAClientFactoryFinder 
factoryFinder) {
         SCAClientFactory.factoryFinder = factoryFinder;
     }
 
-    public SCAClientFactoryImpl3(URI domainURI) throws NoSuchDomainException {
-        this(null, domainURI);
-    }
-    
-    public SCAClientFactoryImpl3(Properties properties, URI domainURI) throws 
NoSuchDomainException {
+    public SCAClientFactoryImpl(URI domainURI) throws NoSuchDomainException {
         super(domainURI);
-        if (properties == null) {
-            properties = new Properties();
-        }
-        initRegistries(properties);
+        findLocalRuntime();
     }   
     
-    private void initRegistries(Properties properties) throws 
NoSuchDomainException {
+    private void findLocalRuntime() throws NoSuchDomainException {
         String domainURI = getDomainURI().toString();
         for (ExtensionPointRegistry xpr : 
ExtensionPointRegistryLocator.getExtensionPointRegistries()) {
             ExtensibleDomainRegistryFactory drf = 
ExtensibleDomainRegistryFactory.getInstance(xpr);
             for (EndpointRegistry epr : drf.getEndpointRegistries()) {
                 if (domainURI.equals(epr.getDomainURI())) {
-                    this.handler2 = new Handler2(xpr, epr, properties);
-                    break;
+                    this.extensionPointRegistry = xpr;
+                    this.endpointRegistry = epr;
+                    return;
                 }
             }
         }
-        if (handler2 == null) {
-            handler2 = new Handler2(domainURI, properties);
-        }
+
+        remoteClient = true;
+        extensionPointRegistry = RuntimeUtils.createExtensionPointRegistry();
+        endpointRegistry = 
RuntimeUtils.getClientEndpointRegistry(extensionPointRegistry, domainURI);
     }
 
     @Override
-    public <T> T getService(Class<T> serviceInterface, String serviceName) 
throws NoSuchServiceException, NoSuchDomainException {
-        return handler2.getService(serviceInterface, serviceName);
+    public <T> T getService(Class<T> serviceInterface, String serviceURI) 
throws NoSuchServiceException, NoSuchDomainException {
+        
+        String serviceName = null;
+        if (serviceURI.contains("/")) {
+            int i = serviceURI.indexOf("/");
+            if (i < serviceURI.length() - 1) {
+                serviceName = serviceURI.substring(i + 1);
+            }
+        }
+        
+        // The service is a component in a local runtime
+        if (!remoteClient) {
+            List<Endpoint> endpoints = 
endpointRegistry.findEndpoint(serviceURI);
+            if (endpoints.size() < 1) {
+                throw new NoSuchServiceException(serviceURI);
+            }
+            Endpoint ep = endpoints.get(0);
+            if (((RuntimeComponent)ep.getComponent()).getComponentContext() != 
null) {
+                return 
((RuntimeComponent)ep.getComponent()).getServiceReference(serviceInterface, 
serviceName).getService();
+            }
+        }
+
+        InvocationHandler handler;
+        if (!remoteClient) {
+            // There is a local runtime but the service is a remote component
+            handler = new 
RemoteServiceInvocationHandler(extensionPointRegistry, endpointRegistry, 
serviceURI, serviceInterface);
+        } else {
+            // no local runtime
+            handler = new 
RemoteServiceInvocationHandler(extensionPointRegistry, endpointRegistry, 
getDomainURI().toString(), serviceURI, serviceInterface);
+        }
+
+        return (T)Proxy.newProxyInstance(serviceInterface.getClassLoader(), 
new Class[]{serviceInterface}, handler);
     }
 }

Modified: 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientModuleActivator.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/SCAClientModuleActivator.java?rev=1084200&r1=1084199&r2=1084200&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientModuleActivator.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientModuleActivator.java
 Tue Mar 22 14:50:45 2011
@@ -19,14 +19,10 @@
 
 package org.apache.tuscany.sca.client.impl;
 
-import org.apache.tuscany.sca.core.ExtensionPointRegistry;
 import org.apache.tuscany.sca.core.ModuleActivator;
 
 public class SCAClientModuleActivator implements ModuleActivator {
     
-    public SCAClientModuleActivator(ExtensionPointRegistry registry) {
-    }
-    
     public void start() { 
         SCAClientFactoryImpl.setSCAClientFactoryFinder(new 
SCAClientFactoryFinderImpl());
     }

Modified: 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/resources/META-INF/services/org.oasisopen.sca.client.SCAClientFactory
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/resources/META-INF/services/org.oasisopen.sca.client.SCAClientFactory?rev=1084200&r1=1084199&r2=1084200&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/resources/META-INF/services/org.oasisopen.sca.client.SCAClientFactory
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/resources/META-INF/services/org.oasisopen.sca.client.SCAClientFactory
 Tue Mar 22 14:50:45 2011
@@ -15,4 +15,4 @@
 # specific language governing permissions and limitations
 # under the License.
 # Implementation class for the ModuleActivator
-org.apache.tuscany.sca.client.impl.SCAClientFactoryImpl3
+org.apache.tuscany.sca.client.impl.SCAClientFactoryImpl


Reply via email to