You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2010/01/28 16:04:39 UTC

svn commit: r904115 - in /tuscany/sca-java-2.x/trunk/modules/sca-client-rmi: ./ src/main/java/org/apache/tuscany/sca/client/rmi/ src/main/resources/META-INF/services/ src/test/java/org/apache/tuscany/sca/client/rmi/

Author: antelder
Date: Thu Jan 28 15:04:39 2010
New Revision: 904115

URL: http://svn.apache.org/viewvc?rev=904115&view=rev
Log:
Update to use the hazelcast client registry

Added:
    tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientFactoryFinderImpl.java
    tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientModuleActivator.java
    tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/resources/META-INF/services/org.apache.tuscany.sca.core.ModuleActivator
    tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/test/java/org/apache/tuscany/sca/client/rmi/ClientTestCase.java
      - copied, changed from r903989, tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/test/java/org/apache/tuscany/sca/client/rmi/HJJTestcase.java
Removed:
    tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/test/java/org/apache/tuscany/sca/client/rmi/HJJTestcase.java
Modified:
    tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/pom.xml
    tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientFactoryImpl.java
    tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientProxyHandler.java

Modified: tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/pom.xml
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/pom.xml?rev=904115&r1=904114&r2=904115&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/pom.xml (original)
+++ tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/pom.xml Thu Jan 28 15:04:39 2010
@@ -48,7 +48,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.tuscany.sca</groupId>
-            <artifactId>tuscany-endpoint-hazelcast</artifactId>
+            <artifactId>tuscany-endpoint-hazelcast-client</artifactId>
             <version>2.0-SNAPSHOT</version>
         </dependency>
 

Added: tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientFactoryFinderImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientFactoryFinderImpl.java?rev=904115&view=auto
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientFactoryFinderImpl.java (added)
+++ tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientFactoryFinderImpl.java Thu Jan 28 15:04:39 2010
@@ -0,0 +1,49 @@
+/*
+ * Copyright(C) OASIS(R) 2005,2009. All Rights Reserved.
+ * OASIS trademark, IPR and other policies apply.
+ */
+package org.apache.tuscany.sca.client.rmi;
+
+import java.net.URI;
+import java.util.Properties;
+
+import org.oasisopen.sca.NoSuchDomainException;
+import org.oasisopen.sca.ServiceRuntimeException;
+import org.oasisopen.sca.client.SCAClientFactory;
+import org.oasisopen.sca.client.SCAClientFactoryFinder;
+
+/**
+ * A Tuscany specific implementation of an SCAClientFactoryFinder which finds
+ * hard codes the use of the Tuscany SCAClientFactory instead of doscovering it.
+ * 
+ * @see SCAClientFactoryFinder
+ * @see SCAClientFactory
+ */
+public class SCAClientFactoryFinderImpl implements SCAClientFactoryFinder {
+
+    /**
+     * Public Constructor
+     */
+    public SCAClientFactoryFinderImpl() {
+    }
+    
+    /**
+     * Creates an instance of the SCAClientFactorySPI implementation. 
+     * This discovers the SCAClientFactorySPI Implementation and instantiates
+     * the provider's implementation.
+     * 
+     * @param properties    Properties that may be used when creating a new 
+     * instance of the SCAClient
+     * @param classLoader   ClassLoader that may be used when creating a new 
+     * instance of the SCAClient
+     * @return new instance of the SCAClientFactory
+     * @throws ServiceRuntimeException Failed to create SCAClientFactory
+     * Implementation.
+     */
+    public SCAClientFactory find(Properties properties,
+                                 ClassLoader classLoader,
+                                 URI domainURI ) throws NoSuchDomainException, ServiceRuntimeException {
+        return new SCAClientFactoryImpl(domainURI);
+    }
+    
+}

Modified: tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientFactoryImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientFactoryImpl.java?rev=904115&r1=904114&r2=904115&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientFactoryImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientFactoryImpl.java Thu Jan 28 15:04:39 2010
@@ -24,100 +24,76 @@
 import java.net.URI;
 import java.util.List;
 
+import org.apache.tuscany.sca.assembly.Endpoint;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
 import org.apache.tuscany.sca.core.UtilityExtensionPoint;
 import org.apache.tuscany.sca.node.Node;
 import org.apache.tuscany.sca.node.NodeFactory;
-import org.apache.tuscany.sca.node.NodeFinder;
+import org.apache.tuscany.sca.node.impl.NodeFactoryImpl;
 import org.apache.tuscany.sca.node.impl.NodeImpl;
 import org.apache.tuscany.sca.runtime.DomainRegistryFactory;
 import org.apache.tuscany.sca.runtime.EndpointRegistry;
 import org.oasisopen.sca.NoSuchDomainException;
 import org.oasisopen.sca.NoSuchServiceException;
-import org.oasisopen.sca.ServiceUnavailableException;
 import org.oasisopen.sca.client.SCAClientFactory;
+import org.oasisopen.sca.client.SCAClientFactoryFinder;
 
 public class SCAClientFactoryImpl extends SCAClientFactory {
 
-    private EndpointRegistry endpointRegistry;
+    public static void setSCAClientFactoryFinder(SCAClientFactoryFinder factoryFinder) {
+        SCAClientFactory.factoryFinder = factoryFinder;
+    }
+
     private ExtensionPointRegistry extensionsRegistry;
+    private EndpointRegistry endpointRegistry;
+    private NodeFactoryImpl nodeFactory;
     
-    public SCAClientFactoryImpl() throws NoSuchDomainException {
-        super(URI.create(Node.DEFAULT_DOMAIN_URI));
-    }    
-
     public SCAClientFactoryImpl(URI domainURI) throws NoSuchDomainException {
         super(domainURI);
-        NodeImpl node = (NodeImpl)NodeFactory.getInstance().createNode(domainURI);
-        if (node.getExtensionPoints() == null) {
-            // No local nodes have been started (for this domain?)
-            // ideally we'll use the Hazelcast client but for now just start a node
-            node.start();            
+        
+        this.nodeFactory = (NodeFactoryImpl)NodeFactory.getInstance();
+        this.extensionsRegistry = nodeFactory.getExtensionPoints();
+        if (extensionsRegistry != null) {
+            UtilityExtensionPoint utilities = extensionsRegistry.getExtensionPoint(UtilityExtensionPoint.class);
+            DomainRegistryFactory domainRegistryFactory = utilities.getUtility(DomainRegistryFactory.class);
+            this.endpointRegistry = domainRegistryFactory.getEndpointRegistry("tuscanyClient:", getDomainURI().toString()); // TODO: shouldnt use null for reg uri
         }
-        this.extensionsRegistry = node.getExtensionPoints();
-        UtilityExtensionPoint utilities = extensionsRegistry.getExtensionPoint(UtilityExtensionPoint.class);
-        DomainRegistryFactory domainRegistryFactory = utilities.getUtility(DomainRegistryFactory.class);
-        this.endpointRegistry = domainRegistryFactory.getEndpointRegistry(getDomainURI().toString(), node.getConfiguration().getDomainName());
-    }
-
+    }   
+    
     @Override
-    @SuppressWarnings("unchecked")
     public <T> T getService(Class<T> serviceInterface, String serviceName) throws NoSuchServiceException, NoSuchDomainException {
-        if ("vm".equals(getDomainURI().getScheme())) {
-            return getLocalService(serviceInterface, serviceName);
-        } else {
-            InvocationHandler handler = new SCAClientProxyHandler(serviceName, extensionsRegistry, endpointRegistry);
-            return (T)Proxy.newProxyInstance(serviceInterface.getClassLoader(), new Class[] {serviceInterface}, handler);
+        
+        if (endpointRegistry != 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?
+
+            Node localNode = findLocalNode(endpoint);
+            if (localNode != null) {
+                return localNode.getService(serviceInterface, serviceName);
+            }
         }
-    }
-    
-    private String getDomainName() {
-//        String uri = getDomainURI().toString();
-//        int i = uri.indexOf(":");
-//        if (i > -1 && uri.charAt(i+1) != '/') {
-//            uri = uri.replaceFirst(":", ":/");
-//        }
-//        if (i > -1 && uri.charAt(i+2) != '/') {
-//            uri = uri.replaceFirst(":/", "://");
-//        }
-//        if (i < 0) {
-//            return uri;
-//        } else {
-//            return URI.create(uri).getHost();
-//        }
-        return getDomainURI().toString();
-    }
-    
-    public void stop() {
-        extensionsRegistry.stop();
-    }
 
-    public EndpointRegistry getEndpointRegistry() {
-        return endpointRegistry;
-    }
+        String uri = getDomainURI().toString();
+        if (uri.startsWith("tuscany:")) {
+            uri = uri.replace("tuscany:", "tuscanyClient:");
+        }
+        InvocationHandler handler = new SCAClientProxyHandler(nodeFactory, uri, serviceName);
+        return (T)Proxy.newProxyInstance(serviceInterface.getClassLoader(), new Class[] {serviceInterface}, handler);
 
-    public ExtensionPointRegistry getExtensionsRegistry() {
-        return extensionsRegistry;
     }
 
-    public <T> T getLocalService(Class<T> serviceInterface, String serviceName) throws NoSuchServiceException, NoSuchDomainException {
-        URI domainURI = getDomainURI();
-        if (domainURI == null) {
-            domainURI = URI.create(Node.DEFAULT_DOMAIN_URI);
+    private Node findLocalNode(Endpoint endpoint) {
+        for (Node node : nodeFactory.getNodes().values()) {
+        	for (Endpoint ep : ((NodeImpl)node).getServiceEndpoints()) {
+                if (endpoint.getURI().equals(ep.getURI())) {
+                    return node;
+                }
+        	}
         }
-        List<Node> nodes = NodeFinder.getNodes(domainURI);
-        if (nodes == null || nodes.size() < 1) {
-            throw new NoSuchDomainException(domainURI.toString());
-        }
-
-        for (Node n : nodes) {
-            try {
-                return n.getService(serviceInterface, serviceName);
-            } catch(ServiceUnavailableException e) {
-                // Ingore and continue
-            }
-        }
-
-        throw new NoSuchServiceException(serviceName);
+        return null;
     }
+
 }

Added: tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientModuleActivator.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientModuleActivator.java?rev=904115&view=auto
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientModuleActivator.java (added)
+++ tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientModuleActivator.java Thu Jan 28 15:04:39 2010
@@ -0,0 +1,37 @@
+/*
+ * 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.rmi;
+
+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());
+    }
+
+    public void stop() {
+
+    }
+}

Modified: tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientProxyHandler.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientProxyHandler.java?rev=904115&r1=904114&r2=904115&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientProxyHandler.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/java/org/apache/tuscany/sca/client/rmi/SCAClientProxyHandler.java Thu Jan 28 15:04:39 2010
@@ -21,6 +21,7 @@
 
 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.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 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);
+
+            List<Endpoint> endpoints = endpointRegistry.findEndpoint(endpointReference);
+            if (endpoints.size() <1 ) {
+                throw new NoSuchServiceException(serviceName);
+            }
+
+            String uri = endpoints.get(0).getBinding().getURI();
+            RMIBindingInvoker invoker = new RMIBindingInvoker(rmiHost, uri, method);
+
+            return invoker.invokeTarget(args);
+
+        } finally {
+            if (node != null) {
+                node.stop();
+            }
         }
-
-        String uri = endpoints.get(0).getBinding().getURI();
-        RMIBindingInvoker invoker = new RMIBindingInvoker(rmiHost, uri, method);
-
-        return invoker.invokeTarget(args);
     }
-
 }

Added: tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/resources/META-INF/services/org.apache.tuscany.sca.core.ModuleActivator
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/resources/META-INF/services/org.apache.tuscany.sca.core.ModuleActivator?rev=904115&view=auto
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/resources/META-INF/services/org.apache.tuscany.sca.core.ModuleActivator (added)
+++ tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/main/resources/META-INF/services/org.apache.tuscany.sca.core.ModuleActivator Thu Jan 28 15:04:39 2010
@@ -0,0 +1,18 @@
+# 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.
+# Implementation class for the ModuleActivator
+org.apache.tuscany.sca.client.rmi.SCAClientModuleActivator;priority=200

Copied: tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/test/java/org/apache/tuscany/sca/client/rmi/ClientTestCase.java (from r903989, tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/test/java/org/apache/tuscany/sca/client/rmi/HJJTestcase.java)
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/test/java/org/apache/tuscany/sca/client/rmi/ClientTestCase.java?p2=tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/test/java/org/apache/tuscany/sca/client/rmi/ClientTestCase.java&p1=tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/test/java/org/apache/tuscany/sca/client/rmi/HJJTestcase.java&r1=903989&r2=904115&rev=904115&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/test/java/org/apache/tuscany/sca/client/rmi/HJJTestcase.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/sca-client-rmi/src/test/java/org/apache/tuscany/sca/client/rmi/ClientTestCase.java Thu Jan 28 15:04:39 2010
@@ -23,18 +23,27 @@
 
 import java.net.URI;
 
-import org.junit.Test;
+import org.apache.tuscany.sca.node.Node;
+import org.apache.tuscany.sca.node.NodeFactory;
+import org.junit.Ignore;
 import org.oasisopen.sca.NoSuchDomainException;
 import org.oasisopen.sca.NoSuchServiceException;
 
 import calculator.CalculatorService;
 
-public class HJJTestcase {
+@Ignore
+public class ClientTestCase {
 
-    @Test
+    //@Test
     public void foo() throws NoSuchServiceException, NoSuchDomainException {
-        SCAClientFactoryImpl cf = new SCAClientFactoryImpl(URI.create("tribes:foo"));
+        
+        Node node = NodeFactory.newInstance().createNode(URI.create("tuscany:foo?listen=127.0.0.1:14828"), new String[]{"../../samples/calculator/target/sample-calculator.jar"});
+        node.start();
+        
+        SCAClientFactoryImpl cf = new SCAClientFactoryImpl(URI.create("tuscanyClient:foo?remotes=127.0.0.1:14828"));
         CalculatorService service = cf.getService(CalculatorService.class, "CalculatorServiceComponent");
         assertEquals(3, service.add(1, 2), 0);
+        
+        node.stop();
     }
 }