diff options
Diffstat (limited to 'java/sca/contrib/samples/callback-ws-client')
12 files changed, 942 insertions, 0 deletions
diff --git a/java/sca/contrib/samples/callback-ws-client/README b/java/sca/contrib/samples/callback-ws-client/README new file mode 100644 index 0000000000..66121362c9 --- /dev/null +++ b/java/sca/contrib/samples/callback-ws-client/README @@ -0,0 +1,311 @@ +Callback Web Services Client Sample
+===================================
+This sample demonstrates an SCA client that sends service requests to a
+remote server and receives asynchronous callbacks from the server, using
+Web service bindings for the service and the callback.
+
+The README in the samples directory (the directory above this) provides
+general instructions about building and running samples. Take a look
+there first.
+
+If you just want to run it to see what happens, you need to start the
+server first, so open a command prompt and navigate to the
+callback-ws-service sample directory and do:
+
+ant run
+
+OR if you don't have ant, on Windows do:
+
+java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-callback-ws-service.jar myserver.CallbackServer
+
+and on *nix do:
+
+java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-callback-ws-service.jar myserver.CallbackServer
+
+Once the server is running open a command prompt, navigate to this sample
+directory and do:
+
+ant run
+
+OR if you don't have ant, on Windows do:
+
+java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-callback-ws-client.jar myapp.MyClientImpl
+
+and on *nix do:
+
+java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-callback-ws-client.jar myapp.MyClientImpl
+
+
+Sample Overview
+---------------
+The sample has a single component that has a reference with a service
+interface and a callback interface, with Web service bindings for both
+these interfaces. The service interface binding URI identifies the
+service exposed by the callback-ws-service sample.
+
+callback-ws-client/
+ src/
+ main/
+ java/
+ myapp/
+ MyClient.java - interface description for
+ MyClientComponent
+ MyClientImpl.java - component implementation
+ myserver/
+ MyService.java - interface description for
+ MyServiceComponent
+ MyServiceCallback.java - interface description for callback
+ resources/
+ myapp.composite - the SCA assembly for this sample
+ test/
+ java/
+ myapp/
+ CallbackClientTestCase.java - JUnit test case
+ callback-ws-client.png - a pictorial representation of the
+ sample .composite file
+ build.xml - the Ant build file
+ pom.xml - the Maven build file
+
+Building And Running The Sample Using Ant
+-----------------------------------------
+With the binary distribution the sample can be built and run using Ant.
+Before you do this, run the callback-ws-service sample to start up the
+service that the client will talk to. Take a look at the README in
+that sample and you will see you need the following commands:
+
+cd callback-ws-service
+ant run
+
+You can then compile and run this sample using the following commands:
+
+cd callback-ws-client
+ant compile
+ant run
+
+You should see the following output from the run target.
+
+run:
+ [java] 15-Jan-2008 10:21:38 org.apache.tuscany.sca.node.impl.SCADomainProxy
+Impl init
+ [java] INFO: Domain will be started stand-alone as domain URL is not provid
+ed
+ [java] 15-Jan-2008 10:21:39 org.apache.tuscany.sca.domain.impl.SCADomainImp
+l registerNode
+ [java] INFO: Registered node: http://L3AW203:1336 at endpoint http://L3AW20
+3:1336
+ [java] 15-Jan-2008 10:21:39 org.apache.tuscany.sca.node.impl.SCADomainProxy
+Impl createRuntime
+ [java] INFO: Domain management configured from file:/C:/simon/tuscany/relea
+se/sca-r1.1-rc2/tuscany-sca-1.1-incubating-SNAPSHOT/lib/tuscany-sca-all-1.1-incu
+bating-SNAPSHOT.jar
+ [java] Warning: Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
+ [java] Warning: Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
+ [java] Warning: Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
+ [java] Warning: Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
+ [java] Warning: Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
+ [java] 15-Jan-2008 10:21:48 org.apache.tuscany.sca.http.jetty.JettyServer a
+ddServletMapping
+ [java] INFO: Added Servlet mapping: http://L3AW203:1336/SCADomainEventServi
+ceProxyComponent
+ [java] 15-Jan-2008 10:21:48 org.apache.tuscany.sca.http.jetty.JettyServer a
+ddServletMapping
+ [java] INFO: Added Servlet mapping: http://L3AW203:1336/SCADomainAPIService
+ProxyComponent
+ [java] 15-Jan-2008 10:21:48 org.apache.tuscany.sca.http.jetty.JettyServer a
+ddServletMapping
+ [java] INFO: Added Servlet mapping: http://L3AW203:1336/SCANodeManagerCompo
+nent/SCANodeManagerService
+ [java] 15-Jan-2008 10:21:48 org.apache.tuscany.sca.http.jetty.JettyServer a
+ddServletMapping
+ [java] INFO: Added Servlet mapping: http://L3AW203:1336/SCANodeManagerCompo
+nent/ComponentManagerService/*
+ [java] 15-Jan-2008 10:21:48 org.apache.tuscany.sca.http.jetty.JettyServer a
+ddServletMapping
+ [java] INFO: Added Servlet mapping: http://L3AW203:1336/SCANodeManagerCompo
+nent/ComponentManagerService
+ [java] 15-Jan-2008 10:21:48 org.apache.tuscany.sca.http.jetty.JettyServer a
+ddServletMapping
+ [java] INFO: Added Servlet mapping: http://L3AW203:1336/SCADomain/scaDomain
+.js
+ [java] 15-Jan-2008 10:21:48 org.apache.tuscany.sca.node.impl.SCANodeImpl ac
+tivateComposite
+ [java] INFO: Building composite: {http://myapp}myapp
+ [java] Warning: Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
+ [java] Warning: Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
+ [java] 15-Jan-2008 10:21:48 org.apache.tuscany.sca.node.impl.SCANodeImpl st
+artComposite
+ [java] INFO: Starting composite: {http://myapp}myapp
+ [java] 15-Jan-2008 10:21:48 org.apache.tuscany.sca.http.jetty.JettyServer a
+ddServletMapping
+ [java] INFO: Added Servlet mapping: http://L3AW203:1336/MyClientComponent/m
+yService
+ [java] aClientMethod on thread Thread[main,5,main]
+ [java] aClientMethod return from someMethod on thread Thread[main,5,main]
+ [java] receiveResult on thread Thread[pool-1-thread-2,5,main]
+ [java] Result: -> someMethod -> receiveResult
+ [java] Closing the domain
+ [java] 15-Jan-2008 10:21:54 org.apache.tuscany.sca.node.impl.SCANodeImpl st
+opComposite
+ [java] INFO: Stopping composite: {http://myapp}myapp
+
+Building And Running The Sample Using Maven
+-------------------------------------------
+With either the binary or source distributions the sample can be built and
+run using Maven as follows. When using Maven you don't need to run the
+callback-ws-service sample first as Maven does this for you. With Maven,
+both client and server code run in the same JVM, which rather defeats the
+purpose of this sample (to show a standalone SCA client), but it's good
+enough for a unit test.
+
+cd callback-ws-client
+mvn
+
+You should see the following output from the test phase.
+
+-------------------------------------------------------
+ T E S T S
+-------------------------------------------------------
+Running myapp.CallbackClientTestCase
+15-Jan-2008 10:17:46 org.apache.tuscany.sca.node.impl.SCADomainProxyImpl init
+INFO: Domain will be started stand-alone as domain URL is not provided
+15-Jan-2008 10:17:46 org.apache.tuscany.sca.domain.impl.SCADomainImpl registerNo
+de
+INFO: Registered node: http://L3AW203:1322 at endpoint http://L3AW203:1322
+15-Jan-2008 10:17:46 org.apache.tuscany.sca.node.impl.SCADomainProxyImpl createR
+untime
+INFO: Domain management configured from file:/C:/Documents%20and%20Settings/slaw
+s/.m2/repository/org/apache/tuscany/sca/tuscany-node-impl/1.1-incubating-SNAPSHO
+T/tuscany-node-impl-1.1-incubating-SNAPSHOT.jar
+15-Jan-2008 10:17:52 org.apache.catalina.core.StandardEngine start
+INFO: Starting Servlet Engine: Apache Tomcat/6.0.10
+15-Jan-2008 10:17:53 org.apache.catalina.startup.ContextConfig defaultWebConfig
+INFO: No default web.xml
+15-Jan-2008 10:17:53 org.apache.catalina.startup.DigesterFactory register
+WARNING: Could not get url for /javax/servlet/jsp/resources/jsp_2_0.xsd
+15-Jan-2008 10:17:53 org.apache.catalina.startup.DigesterFactory register
+WARNING: Could not get url for /javax/servlet/jsp/resources/web-jsptaglibrary_1_
+1.dtd
+15-Jan-2008 10:17:53 org.apache.catalina.startup.DigesterFactory register
+WARNING: Could not get url for /javax/servlet/jsp/resources/web-jsptaglibrary_1_
+2.dtd
+15-Jan-2008 10:17:53 org.apache.catalina.startup.DigesterFactory register
+WARNING: Could not get url for /javax/servlet/jsp/resources/web-jsptaglibrary_2_
+0.xsd
+15-Jan-2008 10:17:53 org.apache.catalina.startup.DigesterFactory register
+WARNING: Could not get url for /javax/servlet/resources/j2ee_web_services_1_1.xs
+d
+15-Jan-2008 10:17:53 org.apache.coyote.http11.Http11Protocol init
+INFO: Initializing Coyote HTTP/1.1 on http-1322
+15-Jan-2008 10:17:53 org.apache.coyote.http11.Http11Protocol start
+INFO: Starting Coyote HTTP/1.1 on http-1322
+15-Jan-2008 10:17:53 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1322/SCADomainEventServiceProxyCompo
+nent
+15-Jan-2008 10:17:53 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1322/SCADomainAPIServiceProxyCompone
+nt
+15-Jan-2008 10:17:53 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1322/SCANodeManagerComponent/SCANode
+ManagerService
+15-Jan-2008 10:17:53 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1322/SCANodeManagerComponent/Compone
+ntManagerService/*
+15-Jan-2008 10:17:53 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1322/SCANodeManagerComponent/Compone
+ntManagerService
+15-Jan-2008 10:17:53 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1322/SCADomain/scaDomain.js
+15-Jan-2008 10:17:53 org.apache.tuscany.sca.node.impl.SCANodeImpl activateCompos
+ite
+INFO: Building composite: {http://callbackws}callbackws
+15-Jan-2008 10:17:54 org.apache.tuscany.sca.node.impl.SCANodeImpl startComposite
+
+INFO: Starting composite: {http://callbackws}callbackws
+15-Jan-2008 10:17:54 org.apache.catalina.core.StandardEngine start
+INFO: Starting Servlet Engine: Apache Tomcat/6.0.10
+15-Jan-2008 10:17:54 org.apache.catalina.startup.ContextConfig defaultWebConfig
+INFO: No default web.xml
+15-Jan-2008 10:17:54 org.apache.coyote.http11.Http11Protocol init
+INFO: Initializing Coyote HTTP/1.1 on http-8086
+15-Jan-2008 10:17:54 org.apache.coyote.http11.Http11Protocol start
+INFO: Starting Coyote HTTP/1.1 on http-8086
+15-Jan-2008 10:17:54 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:8086/MyServiceComponent
+15-Jan-2008 10:17:54 org.apache.tuscany.sca.node.impl.SCADomainProxyImpl init
+INFO: Domain will be started stand-alone as domain URL is not provided
+15-Jan-2008 10:17:54 org.apache.tuscany.sca.domain.impl.SCADomainImpl registerNo
+de
+INFO: Registered node: http://L3AW203:1323 at endpoint http://L3AW203:1323
+15-Jan-2008 10:17:54 org.apache.tuscany.sca.node.impl.SCADomainProxyImpl createR
+untime
+INFO: Domain management configured from file:/C:/Documents%20and%20Settings/slaw
+s/.m2/repository/org/apache/tuscany/sca/tuscany-node-impl/1.1-incubating-SNAPSHO
+T/tuscany-node-impl-1.1-incubating-SNAPSHOT.jar
+15-Jan-2008 10:17:56 org.apache.catalina.core.StandardEngine start
+INFO: Starting Servlet Engine: Apache Tomcat/6.0.10
+15-Jan-2008 10:17:56 org.apache.catalina.startup.ContextConfig defaultWebConfig
+INFO: No default web.xml
+15-Jan-2008 10:17:56 org.apache.coyote.http11.Http11Protocol init
+INFO: Initializing Coyote HTTP/1.1 on http-1323
+15-Jan-2008 10:17:56 org.apache.coyote.http11.Http11Protocol start
+INFO: Starting Coyote HTTP/1.1 on http-1323
+15-Jan-2008 10:17:56 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1323/SCADomainEventServiceProxyCompo
+nent
+15-Jan-2008 10:17:56 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1323/SCADomainAPIServiceProxyCompone
+nt
+15-Jan-2008 10:17:56 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1323/SCANodeManagerComponent/SCANode
+ManagerService
+15-Jan-2008 10:17:56 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1323/SCANodeManagerComponent/Compone
+ntManagerService/*
+15-Jan-2008 10:17:56 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1323/SCANodeManagerComponent/Compone
+ntManagerService
+15-Jan-2008 10:17:56 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1323/SCADomain/scaDomain.js
+15-Jan-2008 10:17:56 org.apache.tuscany.sca.node.impl.SCANodeImpl activateCompos
+ite
+INFO: Building composite: {http://myapp}myapp
+15-Jan-2008 10:17:57 org.apache.tuscany.sca.node.impl.SCANodeImpl startComposite
+
+INFO: Starting composite: {http://myapp}myapp
+15-Jan-2008 10:17:57 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1323/MyClientComponent/myService
+aClientMethod on thread Thread[main,5,main]
+aClientMethod return from someMethod on thread Thread[main,5,main]
+setMyServiceCallback on thread Thread[pool-1-thread-1,5,main]
+someMethod on thread Thread[pool-1-thread-1,5,main]
+Sleeping ...
+receiveResult on thread Thread[pool-2-thread-1,5,main]
+Result: -> someMethod -> receiveResult
+Closing the domain
+15-Jan-2008 10:18:02 org.apache.tuscany.sca.node.impl.SCANodeImpl stopComposite
+INFO: Stopping composite: {http://myapp}myapp
+15-Jan-2008 10:18:03 org.apache.coyote.http11.Http11Protocol destroy
+INFO: Stopping Coyote HTTP/1.1 on http-1323
+15-Jan-2008 10:18:03 org.apache.tuscany.sca.node.impl.SCANodeImpl stopComposite
+INFO: Stopping composite: {http://callbackws}callbackws
+15-Jan-2008 10:18:03 org.apache.coyote.http11.Http11Protocol destroy
+INFO: Stopping Coyote HTTP/1.1 on http-8086
+15-Jan-2008 10:18:03 org.apache.coyote.http11.Http11Protocol destroy
+INFO: Stopping Coyote HTTP/1.1 on http-1322
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 17.343 sec
+
+This shows that the Junit test cases have run successfully.
diff --git a/java/sca/contrib/samples/callback-ws-client/build.xml b/java/sca/contrib/samples/callback-ws-client/build.xml new file mode 100644 index 0000000000..8698c6018d --- /dev/null +++ b/java/sca/contrib/samples/callback-ws-client/build.xml @@ -0,0 +1,73 @@ +<!--
+ * 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.
+-->
+<project name="callback-ws-client" default="compile">
+ <property name="test.class" value="myapp.MyClientImpl" />
+ <property name="test.jar" value="sample-callback-ws-client.jar" />
+ <property name="manifest.jar" value="../../lib/tuscany-sca-manifest.jar" />
+
+ <target name="init">
+ <mkdir dir="target/classes"/>
+ </target>
+
+ <target name="compile" depends="init">
+ <javac srcdir="src/main/java"
+ destdir="target/classes"
+ debug="on"
+ source="1.5"
+ target="1.5">
+ <classpath>
+ <pathelement location="${manifest.jar}"/>
+ </classpath>
+ </javac>
+ <copy todir="target/classes">
+ <fileset dir="src/main/resources"/>
+ </copy>
+ <jar destfile="target/${test.jar}" basedir="target/classes">
+ <manifest>
+ <attribute name="Main-Class" value="${test.class}" />
+ </manifest>
+ </jar>
+ </target>
+
+ <target name="run-classes">
+ <java classname="${test.class}"
+ fork="true">
+ <classpath>
+ <pathelement path="target/classes"/>
+ <pathelement location="${manifest.jar}"/>
+ </classpath>
+ </java>
+ </target>
+
+ <target name="run">
+ <java classname="${test.class}"
+ fork="true">
+ <classpath>
+ <pathelement path="target/${test.jar}"/>
+ <pathelement location="${manifest.jar}"/>
+ </classpath>
+ </java>
+ </target>
+
+ <target name="clean">
+ <delete quiet="true" includeemptydirs="true">
+ <fileset dir="target"/>
+ </delete>
+ </target>
+</project>
diff --git a/java/sca/contrib/samples/callback-ws-client/callback-ws-client.png b/java/sca/contrib/samples/callback-ws-client/callback-ws-client.png Binary files differnew file mode 100644 index 0000000000..802ef604a7 --- /dev/null +++ b/java/sca/contrib/samples/callback-ws-client/callback-ws-client.png diff --git a/java/sca/contrib/samples/callback-ws-client/callback-ws-client.svg b/java/sca/contrib/samples/callback-ws-client/callback-ws-client.svg new file mode 100644 index 0000000000..f49aeadbbf --- /dev/null +++ b/java/sca/contrib/samples/callback-ws-client/callback-ws-client.svg @@ -0,0 +1,204 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- + * 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. +--> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="1052.3622" + height="744.09448" + id="svg2" + sodipodi:version="0.32" + inkscape:version="0.45.1" + sodipodi:docbase="C:\simon\tuscany\java-panic\sca\samples\callback-ws-client" + sodipodi:docname="callback-ws-client.svg" + version="1.0" + inkscape:export-filename="C:\simon\tuscany\java-panic\sca\samples\callback-ws-client\callback-ws-client.png" + inkscape:export-xdpi="52.84" + inkscape:export-ydpi="52.84" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs4"> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3156" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" + transform="scale(0.8) translate(12.5,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Lend" + style="overflow:visible;"> + <path + id="path3159" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;" + transform="scale(0.8) rotate(180) translate(12.5,0)" /> + </marker> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + gridtolerance="10000" + guidetolerance="10" + objecttolerance="10" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.4" + inkscape:cx="541.4664" + inkscape:cy="414.63224" + inkscape:document-units="px" + inkscape:current-layer="layer1" + inkscape:window-width="1054" + inkscape:window-height="721" + inkscape:window-x="20" + inkscape:window-y="108" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <g + id="g2997" + transform="matrix(0.991389,0,0,1,2.215655,0)"> + <rect + rx="13.79423" + ry="12.692303" + y="192.00233" + x="258.3114" + height="299.99988" + width="446.72086" + id="rect2067" + style="opacity:1;fill:#90baf4;fill-opacity:1;stroke:#060000;stroke-width:2.00866628;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <flowRoot + id="flowRoot2954" + xml:space="preserve"><flowRegion + id="flowRegion2956"><rect + y="212.66591" + x="281.42856" + height="61.42857" + width="170" + id="rect2958" /></flowRegion><flowPara + id="flowPara2960">myapp</flowPara></flowRoot> </g> + <rect + style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2.1793592;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2988" + width="115.48311" + height="102.11218" + x="432.14886" + y="307.25729" + rx="6.9853158" + ry="8.4710283" /> + <flowRoot + xml:space="preserve" + id="flowRoot2966" + transform="translate(176.75411,112.37196)"><flowRegion + id="flowRegion2968"><rect + id="rect2970" + width="170" + height="61.42857" + x="281.42856" + y="212.66591" /></flowRegion><flowPara + id="flowPara1883">MyClient</flowPara><flowPara + id="flowPara1885">Component</flowPara></flowRoot> <path + style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 414.90867,339.0146 L 448.24371,339.0146 L 454.30462,352.14658 L 447.23356,364.26842 L 414.90867,364.26842 L 422.48482,352.14658 L 414.90867,339.0146 z " + id="path3017" /> + <path + style="fill:#ae62bf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.66918468px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 522.56713,320.15377 L 601.02826,320.15377 L 615.2939,359.90348 L 598.65065,396.59555 L 522.56713,396.59555 L 540.39923,359.90348 L 522.56713,320.15377 z " + id="path3019" /> + <flowRoot + xml:space="preserve" + id="flowRoot1889" + transform="translate(428.94909,104.83236)" + style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans"><flowRegion + id="flowRegion1891"><rect + id="rect1893" + width="170" + height="61.42857" + x="281.42856" + y="212.66591" + style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans" /></flowRegion><flowPara + id="flowPara1897">http://localhost:8086/MyServiceComponent</flowPara><flowPara + id="flowPara1899" /></flowRoot> <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.1331737px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" + d="M 615.78087,359.02789 C 771.36198,358.44679 771.36198,358.44679 771.36198,358.44679" + id="path1901" /> + <path + style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.25983226px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 590.28235,358.74035 L 548.70563,358.74035 L 541.14624,375.4515 L 549.96553,390.87719 L 590.28235,390.87719 L 580.83309,375.4515 L 590.28235,358.74035 z " + id="path3361" /> + <flowRoot + xml:space="preserve" + id="flowRoot3363" + transform="translate(259.75287,116.56324)" + style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans"><flowRegion + id="flowRegion3365"><rect + id="rect3367" + width="170" + height="61.42857" + x="281.42856" + y="212.66591" + style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans" /></flowRegion><flowPara + id="flowPara3371">myservice</flowPara></flowRoot> <flowRoot + xml:space="preserve" + id="flowRoot3375" + transform="translate(261.18143,157.27752)" + style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans"><flowRegion + id="flowRegion3377"><rect + id="rect3379" + width="170" + height="61.42857" + x="281.42856" + y="212.66591" + style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans" /></flowRegion><flowPara + id="flowPara3383">callback</flowPara></flowRoot> <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.2524904;stroke-linecap:butt;stroke-linejoin:miter;marker-end:none;stroke-opacity:1;marker-start:url(#Arrow1Lstart);stroke-miterlimit:4;stroke-dasharray:7.51494241,1.2524904;stroke-dashoffset:0" + d="M 580.12625,376.03803 C 772.7309,375.46458 772.7309,375.46458 772.7309,375.46458" + id="path3387" /> + </g> +</svg> diff --git a/java/sca/contrib/samples/callback-ws-client/pom.xml b/java/sca/contrib/samples/callback-ws-client/pom.xml new file mode 100644 index 0000000000..4ac9e6cf81 --- /dev/null +++ b/java/sca/contrib/samples/callback-ws-client/pom.xml @@ -0,0 +1,86 @@ +<?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
+ * "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.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <artifactId>sample-callback-ws-client</artifactId>
+ <name>Apache Tuscany SCA Callback Web Service Remote Client Sample</name>
+
+ <repositories>
+ <repository>
+ <id>apache.incubator</id>
+ <url>http://people.apache.org/repo/m2-incubating-repository</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-node-impl</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-java-runtime</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-ws-axis2</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-host-tomcat</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.5</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>sample-callback-ws-service</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ </build>
+
+</project>
diff --git a/java/sca/contrib/samples/callback-ws-client/src/main/java/myapp/MyClient.java b/java/sca/contrib/samples/callback-ws-client/src/main/java/myapp/MyClient.java new file mode 100644 index 0000000000..329edbe1c8 --- /dev/null +++ b/java/sca/contrib/samples/callback-ws-client/src/main/java/myapp/MyClient.java @@ -0,0 +1,29 @@ +/*
+ * 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 myapp;
+
+import org.oasisopen.sca.annotation.OneWay;
+
+/**
+ * The client interface
+ */
+public interface MyClient {
+
+ void aClientMethod();
+}
diff --git a/java/sca/contrib/samples/callback-ws-client/src/main/java/myapp/MyClientImpl.java b/java/sca/contrib/samples/callback-ws-client/src/main/java/myapp/MyClientImpl.java new file mode 100644 index 0000000000..4f3a3bb63b --- /dev/null +++ b/java/sca/contrib/samples/callback-ws-client/src/main/java/myapp/MyClientImpl.java @@ -0,0 +1,64 @@ +/*
+ * 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 myapp;
+
+import myserver.MyService;
+import myserver.MyServiceCallback;
+
+import org.apache.tuscany.sca.node.SCAClient;
+import org.apache.tuscany.sca.node.SCANode;
+import org.apache.tuscany.sca.node.SCANodeFactory;
+import org.oasisopen.sca.annotation.Reference;
+import org.oasisopen.sca.annotation.Scope;
+import org.oasisopen.sca.annotation.Service;
+
+/**
+ * Remote Web service client with callback interface
+ */
+@Service(MyClient.class)
+@Scope("COMPOSITE")
+public class MyClientImpl implements MyClient, MyServiceCallback {
+ @Reference
+ protected MyService myService;
+
+ public void aClientMethod() {
+ System.out.println("aClientMethod on thread " + Thread.currentThread());
+ myService.someMethod(" -> someMethod "); // calls the server
+ System.out.println("aClientMethod return from someMethod on thread " + Thread.currentThread());
+ }
+
+ public void receiveResult(String result) {
+ System.out.println("receiveResult on thread " + Thread.currentThread());
+ System.out.println("Result: " + result); // callback from the server
+ }
+
+ public static void main(String[] args) throws Exception {
+ SCANode node = SCANodeFactory.newInstance().createSCANodeFromClassLoader("myapp.composite", MyClientImpl.class.getClassLoader());
+ node.start();
+ run(node);
+ System.out.println("Closing the domain");
+ node.stop();
+ }
+
+ public static void run(SCANode node) throws InterruptedException {
+ MyClient myClient = ((SCAClient)node).getService(MyClient.class, "MyClientComponent");
+ myClient.aClientMethod();
+ Thread.sleep(5000); // don't exit before callback arrives
+ }
+}
diff --git a/java/sca/contrib/samples/callback-ws-client/src/main/java/myserver/MyService.java b/java/sca/contrib/samples/callback-ws-client/src/main/java/myserver/MyService.java new file mode 100644 index 0000000000..9bc056318b --- /dev/null +++ b/java/sca/contrib/samples/callback-ws-client/src/main/java/myserver/MyService.java @@ -0,0 +1,34 @@ +/*
+ * 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 myserver;
+
+import org.oasisopen.sca.annotation.Callback;
+import org.oasisopen.sca.annotation.OneWay;
+import org.oasisopen.sca.annotation.Remotable;
+
+/**
+ * The remote service that will be invoked by the client
+ */
+@Remotable
+@Callback(MyServiceCallback.class)
+public interface MyService {
+
+ @OneWay
+ void someMethod(String arg);
+}
diff --git a/java/sca/contrib/samples/callback-ws-client/src/main/java/myserver/MyServiceCallback.java b/java/sca/contrib/samples/callback-ws-client/src/main/java/myserver/MyServiceCallback.java new file mode 100644 index 0000000000..caef8fcc98 --- /dev/null +++ b/java/sca/contrib/samples/callback-ws-client/src/main/java/myserver/MyServiceCallback.java @@ -0,0 +1,30 @@ +/*
+ * 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 myserver;
+
+import org.oasisopen.sca.annotation.Remotable;
+
+/**
+ * The callback interface for {@link MyService}.
+ */
+@Remotable
+public interface MyServiceCallback {
+
+ void receiveResult(String result);
+}
diff --git a/java/sca/contrib/samples/callback-ws-client/src/main/resources/META-INF/sca-contribution.xml b/java/sca/contrib/samples/callback-ws-client/src/main/resources/META-INF/sca-contribution.xml new file mode 100644 index 0000000000..314747d548 --- /dev/null +++ b/java/sca/contrib/samples/callback-ws-client/src/main/resources/META-INF/sca-contribution.xml @@ -0,0 +1,22 @@ +<?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
+ * "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.
+-->
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0" xmlns:app="http://myapp">
+ <deployable composite="app:myapp" />
+</contribution>
diff --git a/java/sca/contrib/samples/callback-ws-client/src/main/resources/myapp.composite b/java/sca/contrib/samples/callback-ws-client/src/main/resources/myapp.composite new file mode 100644 index 0000000000..5b776d6df8 --- /dev/null +++ b/java/sca/contrib/samples/callback-ws-client/src/main/resources/myapp.composite @@ -0,0 +1,36 @@ +<?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
+ * "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.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ targetNamespace="http://myapp"
+ name="myapp">
+
+ <component name="MyClientComponent">
+ <implementation.java class="myapp.MyClientImpl" />
+ <reference name="myService">
+ <interface.java interface="myserver.MyService"
+ callbackInterface="myserver.MyServiceCallback" />
+ <binding.ws uri="http://localhost:8086/MyServiceComponent" />
+ <callback>
+ <binding.ws uri="http://localhost:8087/MyServiceComponentCB"/>
+ </callback>
+ </reference>
+ </component>
+
+</composite>
diff --git a/java/sca/contrib/samples/callback-ws-client/src/test/java/myapp/CallbackClientTestCase.java b/java/sca/contrib/samples/callback-ws-client/src/test/java/myapp/CallbackClientTestCase.java new file mode 100644 index 0000000000..fb2f6952c4 --- /dev/null +++ b/java/sca/contrib/samples/callback-ws-client/src/test/java/myapp/CallbackClientTestCase.java @@ -0,0 +1,53 @@ +/*
+ * 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 myapp;
+
+import org.apache.tuscany.sca.node.SCANode;
+import org.apache.tuscany.sca.node.SCANodeFactory;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests that the callback server is available
+ */
+public class CallbackClientTestCase {
+
+ private SCANode node;
+
+ @Before
+ public void startServer() throws Exception {
+ try {
+ node = SCANodeFactory.newInstance().createSCANodeFromClassLoader(null, getClass().getClassLoader());
+ node.start();
+ } catch (Exception ex) {
+ System.out.println(ex.toString());
+ }
+ }
+
+ @Test
+ public void testClient() throws Exception {
+ MyClientImpl.run(node);
+ }
+
+ @After
+ public void stopServer() throws Exception {
+ node.stop();
+ }
+}
|