Tuscany - Learning More - Binding Comet - Autocomplete Webapp ----------------------------------------------------------------- This sample demonstrates how Tuscany can expose services via Comet techniques 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 handle the communication between the browser client and the service implementation using Comet techniques. This enables bidirectional communication over HTTP, therefore enabling server push. For more information, check http://en.wikipedia.org/wiki/Comet_(programming). The comet binding is using the Atmosphere Framework under the hood to acomodate as many deployment envorinments as possible. Basically, it checks if the application server supports Servlet 3.0 falling back to a number of native comet solutions provided by vendors (Jetty, Tomcat, WebLogic, GlassFish and others). If none is available, Atmosphere will fallback to blocking IO. Invoking comet services can be done using Tuscany's javascript API which simulates SCA in the browser. It uses the Atmosphere jQuery plugin under the hood. In order to use it, the following script has to be included in the client page: The javascript toolkit permits choosing between two comet techniques: HTTP streaming and long polling. More detailed information about them can be found on the previously mentioned wikipedia page. First, a connect operation has to be issued in order to initiate communication with the server side using the technique of your choice. This is done using the connection method as follows: SCA.TuscanyComet.connect('streaming'); // for HTTP streaming SCA.TuscanyComet.connect('long-polling'); // for long polling SCA.TuscanyComet.connect(); // starts with HTTP streaming and falls back to long polling if necessary The Tuscany Comet toolkit will inject proxies for all services defined in the composite that are using binding.comet. All invocation and connection management is handled under the hood so in order to invoke a comet service, the following should be called: SCA.CometComponentContext..(, callback); The callback parameter is the function that will handle responses received for a certain service operation. It has a single argument which is the response: function callback(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 HTTP connection to handle communication between a browser client and all services defined using binding.comet in the same composite. Requests and responses will get multiplexed via the same channel and get routed to the appropriate service implementation, respectively javascript function. This is done in order to avoid the 2 HTTP connection limit imposed by browsers. For more info, check http://www.openajax.org/runtime/wiki/The_Two_HTTP_Connection_Limit_Issue. In order to run the sample, you can execute "mvn clean install t7:run" which will start a Tomcat 7 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-comet-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 HTTP streaming connection or long polling subsequent connections using the developer tools provided by your browser. The comet 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).