From bbef1e502a5277517ccfe64617d9aeed2e8af0de Mon Sep 17 00:00:00 2001 From: fmoga Date: Tue, 26 Jul 2011 10:16:11 +0000 Subject: git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1151052 13f79535-47bb-0310-9956-ffa450edef68 --- .../binding-websocket/autocomplete-webapp/README | 65 ++++++++++++++++++++++ .../binding-websocket/autocomplete-webapp/pom.xml | 13 ++++- .../src/main/webapp/WEB-INF/web.composite | 5 +- 3 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/README (limited to 'sca-java-2.x/contrib') diff --git a/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/README b/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/README new file mode 100644 index 0000000000..6f7f3e13ab --- /dev/null +++ b/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/README @@ -0,0 +1,65 @@ +Tuscany - Learning More - Binding Websocket - Autocomplete Webapp +----------------------------------------------------------------- + +This sample demonstrates how Tuscany can expose services via websockets as well +as how to interact with them using Tuscany's javascript API. + +This project contains a service (CountryService) that handles requests asking +for country names starting with a certain prefix. The service implementation +uses a country repository to fetch the necessary data. + +By adding to a service definition, the +Tuscany runtime will start a websocket server listening for requests coming +in for the exposed service at the specified port. If no port is specified, the +runtime will use port 9000 as a default. + +The websocket binding uses embedded Jetty instances as websocket servers. At the +moment, Jetty 8.0.0-M3 is used which has support for the 00, 01, 06 and 07 +versions of the websocket protocol drafts. You should check if the browser of +your choice supports one of these protocol versions. + +The websocket binding also features a javascript API to simulate SCA in the +browser. In order to use it, the following script has to be included in the +client page: + + +This will inject proxies for all services defined in the composite that are +using binding.websocket. All invocation and connection management is handled +under the hood so in order to invoke a websocket service, the following should +be called: + Tuscany.WebsocketComponentContext...(); + +Given the asynchornous nature of websockets, a function should be defined in +order to handle responses received for a certain service operation. This should +be done as follows: + Tuscany.WebsocketComponentContext....responseHandler = function(response) { + // handle response + }; + +Note that the data exchange is automatically handled by the binding, so the +parameters should have the same structure as the data types defined in the method +definition. Also, the response will have the same data type as the return type of +the service method. Objects are passed over the wire in JSON format. + +Another detail worth mentioning is that the binding will use a single websocket +connection to handle the communication between a browser client and all services +defined using binding.websocket on the same port. Requests and responses will get +multiplexed via the same channel and get routed to the appropriate service +implementation, respectively javascript function. + +In order to run the sample, you can run "mvn jetty:run" which will start a Jetty +instance automatically or use "mvn package" and deploy the resulting war to the +application server of your choice. + +Next, point your browser at + http://localhost:8080/sample-binding-websocket-autocomplete-webapp/ + +You can see how suggestions are being received in real time when characters are +entered in the text field. You can see the persistent websocket connection using +the developer tools provided by your browser. + +The websocket binding is an experimental binding so community feedback is much +appreciated. Feel free to send comments or suggestions on the Apache Tuscany +dev mailing list (dev@tuscany.apache.org). \ No newline at end of file diff --git a/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/pom.xml b/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/pom.xml index e73ed58096..dd990b231e 100644 --- a/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/pom.xml +++ b/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/pom.xml @@ -17,7 +17,8 @@ * specific language governing permissions and limitations * under the License. --> - + 4.0.0 org.apache.tuscany.sca @@ -46,6 +47,16 @@ compile + + + + + org.mortbay.jetty + maven-jetty-plugin + 6.1.26 + + + diff --git a/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/src/main/webapp/WEB-INF/web.composite b/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/src/main/webapp/WEB-INF/web.composite index b529509fb0..fc1c177e9b 100644 --- a/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/src/main/webapp/WEB-INF/web.composite +++ b/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/src/main/webapp/WEB-INF/web.composite @@ -27,14 +27,13 @@ class="sample.CountryServiceImpl" /> - + - + countries.txt -- cgit v1.2.3