| 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 <tuscany:binding.comet/> 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: |
| <script type="text/javascript" |
| src="tuscany-comet-js/org.apache.tuscany.sca.CometComponentContext.js"> |
| </script> |
| |
| 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.<service name>.<operation name>(<parameters>, 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). |