diff options
author | slaws <slaws@13f79535-47bb-0310-9956-ffa450edef68> | 2012-03-23 17:26:56 +0000 |
---|---|---|
committer | slaws <slaws@13f79535-47bb-0310-9956-ffa450edef68> | 2012-03-23 17:26:56 +0000 |
commit | 3d3b1538aaf57eb4dac00c808240102dc7ebebe8 (patch) | |
tree | bf7d31eb63503aaa41908afcc51dd523b6b23659 /sca-java-2.x/trunk/testing/itest | |
parent | 2b658cba22046ff1deee29562fe073bcabe4cdc0 (diff) |
TUSCANY-4032 - serialize the "isForCallback" flag for an endpoint service so that the SCAClient can ignore callback endpoints in the remote case.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1304510 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to '')
5 files changed, 235 insertions, 1 deletions
diff --git a/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ClientClientComponentImpl.java b/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ClientClientComponentImpl.java new file mode 100644 index 0000000000..66988094e7 --- /dev/null +++ b/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ClientClientComponentImpl.java @@ -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) {
+ }
+
+}
diff --git a/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ClientComponent.java b/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ClientComponent.java index ac5c2c5817..c6a6499126 100644 --- a/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ClientComponent.java +++ b/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ClientComponent.java @@ -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);
diff --git a/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClient.composite b/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClient.composite index 5a423f8561..7a373f2f31 100644 --- a/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClient.composite +++ b/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClient.composite @@ -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" />
diff --git a/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClientClient.composite b/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClientClient.composite new file mode 100644 index 0000000000..d0f2bc25ba --- /dev/null +++ b/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClientClient.composite @@ -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 diff --git a/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InerfaceMatchTestCase.java b/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InerfaceMatchTestCase.java index 6afb0ecd27..ade96178d2 100644 --- a/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InerfaceMatchTestCase.java +++ b/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InerfaceMatchTestCase.java @@ -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.NodeImpl; 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();
+ }
}
|