You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sl...@apache.org on 2012/03/23 18:26:57 UTC

svn commit: r1304510 - in /tuscany/sca-java-2.x/trunk: modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ testing/itest/interface-matching/src/...

Author: slaws
Date: Fri Mar 23 17:26:56 2012
New Revision: 1304510

URL: http://svn.apache.org/viewvc?rev=1304510&view=rev
Log:
TUSCANY-4032 - serialize the "isForCallback" flag for an endpoint service so that the SCAClient can ignore callback endpoints in the remote case. 

Added:
    tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ClientClientComponentImpl.java
    tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClientClient.composite
Modified:
    tuscany/sca-java-2.x/trunk/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/EndpointProcessor.java
    tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ClientComponent.java
    tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClient.composite
    tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InerfaceMatchTestCase.java

Modified: tuscany/sca-java-2.x/trunk/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/EndpointProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/EndpointProcessor.java?rev=1304510&r1=1304509&r2=1304510&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/EndpointProcessor.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/EndpointProcessor.java Fri Mar 23 17:26:56 2012
@@ -49,6 +49,8 @@ import org.apache.tuscany.sca.policy.Pol
 public class EndpointProcessor extends BaseAssemblyProcessor implements StAXArtifactProcessor<Endpoint> {
     private final static String ENDPOINT = "endpoint";
     private final static QName ENDPOINT_QNAME = new QName(Constants.SCA11_TUSCANY_NS, ENDPOINT);
+    private final static String CALLBACK_ENDPOINT = "callbackEndpoint";
+    private final static QName CALLBACK_ENDPOINT_QNAME = new QName(Constants.SCA11_TUSCANY_NS, CALLBACK_ENDPOINT);
 
     private ExtensionPointRegistry registry;
 
@@ -93,6 +95,12 @@ public class EndpointProcessor extends B
             endpoint.setService(service);
             endpoint.setBinding(binding);
             
+            // We use the name of the composite to indicate if this is a callback endpoint
+            // saves passing other extension attributes
+            if (composite.getName().equals(CALLBACK_ENDPOINT_QNAME)){
+                service.setForCallback(true);
+            }
+            
             // retrieve the stash of intents and policy sets from the component
             endpoint.getRequiredIntents().addAll(component.getRequiredIntents());
             endpoint.getPolicySets().addAll(component.getPolicySets());
@@ -109,7 +117,14 @@ public class EndpointProcessor extends B
     private Composite wrap(Endpoint endpoint) {
         try {
             Composite composite = assemblyFactory.createComposite();
-            composite.setName(ENDPOINT_QNAME);
+            // We use the name of the composite (which just wraps the single endpoint
+            // to indicate whether this endpoint represents a callback or not
+            if (endpoint.getService() != null &&
+                endpoint.getService().isForCallback()){
+                composite.setName(CALLBACK_ENDPOINT_QNAME);
+            } else {
+                composite.setName(ENDPOINT_QNAME);
+            }
             composite.setLocal(false);
             if (endpoint.getComponent() != null) {
                 Component component = (Component)endpoint.getComponent().clone();

Added: tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ClientClientComponentImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ClientClientComponentImpl.java?rev=1304510&view=auto
==============================================================================
--- tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ClientClientComponentImpl.java (added)
+++ tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ClientClientComponentImpl.java Fri Mar 23 17:26:56 2012
@@ -0,0 +1,81 @@
+/*
+ * 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.itest.interfaces;
+
+import org.oasisopen.sca.annotation.Reference;
+import org.oasisopen.sca.annotation.Service;
+
+/*
+ * Test that a client can be reference using a target name containing only the component 
+ * name when the client has callback services registered. 
+ */
+@Service(ClientComponent.class)
+public class ClientClientComponentImpl implements ClientComponent{
+
+    @Reference
+    protected ClientComponent aClient;
+    
+    public String foo(ParameterObject po) {
+        return aClient.foo(po);
+    }    
+
+    public String foo1(ParameterObject po) {
+        return aClient.foo1(po);
+    }
+
+    public String foo2(String str) throws Exception {
+        return str + "AComponent";
+    }
+
+    public String foo3(String str, int i) {
+        return str + "AComponent" + i;
+    }
+
+    public String foo4(int i, String str) throws Exception {
+        return str + "AComponent" + i;
+    }
+
+    public void callback(String str) {
+    }
+
+    public void callbackMethod(String str) {
+    }
+    
+    public void callbackMethod1(String str) {
+    }    
+
+    public void callModifyParameter() {
+    }
+
+    public String getCallbackValue() {
+        return null;
+    }
+
+    public void onewayMethod(String str) {
+    }
+
+    public String getOnewayValue() {
+        return null;
+    }
+
+    public void modifyParameter(ParameterObject po) {
+    }
+
+}

Modified: tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ClientComponent.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ClientComponent.java?rev=1304510&r1=1304509&r2=1304510&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ClientComponent.java (original)
+++ tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ClientComponent.java Fri Mar 23 17:26:56 2012
@@ -20,10 +20,12 @@
 package org.apache.tuscany.sca.itest.interfaces;
 
 import org.oasisopen.sca.annotation.OneWay;
+import org.oasisopen.sca.annotation.Remotable;
 
 /*
  * itest for interface: local,method-overloading
  */
+@Remotable
 public interface ClientComponent {
     
     String foo(ParameterObject po);

Modified: tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClient.composite
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClient.composite?rev=1304510&r1=1304509&r2=1304510&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClient.composite (original)
+++ tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClient.composite Fri Mar 23 17:26:56 2012
@@ -21,6 +21,11 @@
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            name="MatchDistributedClient" >
 
+    <component name="LocalClientClientComponent">
+        <implementation.java class="org.apache.tuscany.sca.itest.interfaces.ClientClientComponentImpl" />
+        <reference name="aClient" target="DistributedClientComponent" />
+    </component> 
+    
     <component name="DistributedClientComponent">
         <implementation.java class="org.apache.tuscany.sca.itest.interfaces.ClientComponentImpl" />
         <reference name="aCallBackService" target="DistributedServiceComponent" />

Added: tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClientClient.composite
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClientClient.composite?rev=1304510&view=auto
==============================================================================
--- tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClientClient.composite (added)
+++ tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClientClient.composite Fri Mar 23 17:26:56 2012
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    * 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
+    * 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.
+-->
+<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912" 
+           xmlns:foo="http://foo" targetNamespace="http://foo"
+           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+           name="MatchDistributedClientClient" >
+
+    <component name="DistributedClientClientComponent">
+        <implementation.java class="org.apache.tuscany.sca.itest.interfaces.ClientClientComponentImpl" />
+        <reference name="aClient" target="DistributedClientComponent" />
+    </component>  
+    
+</composite>
\ No newline at end of file

Modified: tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InerfaceMatchTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InerfaceMatchTestCase.java?rev=1304510&r1=1304509&r2=1304510&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InerfaceMatchTestCase.java (original)
+++ tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InerfaceMatchTestCase.java Fri Mar 23 17:26:56 2012
@@ -23,6 +23,7 @@ import java.net.URI;
 
 import junit.framework.Assert;
 
+import org.apache.tuscany.sca.TuscanyRuntime;
 import org.apache.tuscany.sca.assembly.SCABinding;
 import org.apache.tuscany.sca.binding.ws.WebServiceBinding;
 import org.apache.tuscany.sca.node.Node;
@@ -31,6 +32,7 @@ import org.apache.tuscany.sca.node.impl.
 import org.junit.Ignore;
 import org.junit.Test;
 import org.oasisopen.sca.ServiceRuntimeException;
+import org.oasisopen.sca.client.SCAClientFactory;
 
 public class InerfaceMatchTestCase {
     
@@ -248,5 +250,120 @@ public class InerfaceMatchTestCase {
         
         node1.stop();
         node2.stop();
-    }    
+    }  
+    
+    /**
+     * Remotable client and service interfaces where the interfaces match.
+     * Components running in the separate composite/JVM, i.e. there is a remote registry
+     * Access from an SCALient call to make sure that it is able to connect to the remote
+     * registry.
+     * 
+     * 
+     * @throws Exception
+     */
+    @Test
+    public void testDistributedRemotableSCAClient() throws Exception {
+        
+        // Force the remote default binding to be web services
+        System.setProperty("org.apache.tuscany.sca.binding.sca.provider.SCABindingMapper.mappedBinding", 
+                           "{http://docs.oasis-open.org/ns/opencsa/sca/200912}binding.ws");
+        
+        TuscanyRuntime runtime = TuscanyRuntime.newInstance();
+        
+/*        
+        org.apache.tuscany.sca.Node nodeA = runtime.createNode("default");    
+        nodeA.installContribution("nodeAContrib", "./target/classes", null, null);
+        nodeA.startComposite("node1Contrib", "org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClient.composite");
+        
+        org.apache.tuscany.sca.Node nodeB = runtime.createNode("default");    
+        nodeB.installContribution("nodeAContrib", "./target/classes", null, null);
+        nodeB.startComposite("node1Contrib", "org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedService.composite");
+*/
+        
+        String [] contributions = {"./target/classes"};
+        Node node1 = NodeFactory.newInstance().createNode(URI.create("uri:default"), 
+                                                                     "org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClient.composite", 
+                                                                     contributions);
+        node1.start();
+
+        Node node2 = NodeFactory.newInstance().createNode(URI.create("uri:default"), 
+                                                                     "org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedService.composite", 
+                                                                     contributions);
+        
+        // force default binding on node2 to use a different port from node 1(which will default to 8080
+        ((NodeImpl)node2).getConfiguration().addBinding(WebServiceBinding.TYPE, "http://localhost:8081/");
+        ((NodeImpl)node2).getConfiguration().addBinding(SCABinding.TYPE, "http://localhost:8081/");
+        node2.start();
+        
+        SCAClientFactory clientFactory = SCAClientFactory.newInstance(URI.create("default"));
+        ClientComponent local  = clientFactory.getService(ClientComponent.class, "LocalClientClientComponent");
+
+        ParameterObject po = new ParameterObject();
+        
+        try {
+            String response = local.foo1(po);
+            Assert.assertEquals("AComponent", response);
+        } catch (ServiceRuntimeException ex){
+            Assert.fail("Unexpected exception with foo " + ex.toString());
+        }         
+
+/* Used to keep the composites alive when running the next (ignored) test manually
+        System.out.println("Press a key to end");
+        try {
+            System.in.read();
+        } catch (Exception ex) {
+        }
+        System.out.println("Continuing");
+*/   
+        node1.stop();
+        node2.stop();
+    }  
+    
+    /**
+     * Allows you to manually call the previous test from a separate VM to 
+     * ensure that endpoint serialization to the client work OK. It's not 
+     * intended to run as part of the test suite. 
+     * 
+     * 
+     * @throws Exception
+     */
+    @Test
+    @Ignore
+    public void testDistributedRemotableSCAClientSeparateVM() throws Exception {
+        // Force the remote default binding to be web services
+        System.setProperty("org.apache.tuscany.sca.binding.sca.provider.SCABindingMapper.mappedBinding", 
+                           "{http://docs.oasis-open.org/ns/opencsa/sca/200912}binding.ws");
+        
+        // Make a reference target point across VMs to a component that has callback services
+        String [] contributions = {"./target/classes"};
+        
+        Node node3 = NodeFactory.newInstance().createNode(URI.create("uri:default"), 
+                "org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClientClient.composite", 
+                contributions);
+        node3.start();
+        
+        SCAClientFactory clientFactory = SCAClientFactory.newInstance(URI.create("default"));
+        ClientComponent clientClient  = clientFactory.getService(ClientComponent.class, "DistributedClientClientComponent");
+
+        ParameterObject po = new ParameterObject();
+        
+        try {
+            String response = clientClient.foo1(po);
+            Assert.assertEquals("AComponent", response);
+        } catch (ServiceRuntimeException ex){
+            Assert.fail("Unexpected exception with foo " + ex.toString());
+        } 
+        
+        // Make an SCAClient point across VMs to a component that has callback services
+        ClientComponent client  = clientFactory.getService(ClientComponent.class, "DistributedClientComponent");
+        
+        try {
+            String response = client.foo1(po);
+            Assert.assertEquals("AComponent", response);
+        } catch (ServiceRuntimeException ex){
+            Assert.fail("Unexpected exception with foo " + ex.toString());
+        }  
+        
+        node3.stop();
+    }
 }