You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by fm...@apache.org on 2011/07/26 12:16:12 UTC

svn commit: r1151052 - in /tuscany/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp: README pom.xml src/main/webapp/WEB-INF/web.composite

Author: fmoga
Date: Tue Jul 26 10:16:11 2011
New Revision: 1151052

URL: http://svn.apache.org/viewvc?rev=1151052&view=rev
Log: (empty)

Added:
    tuscany/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/README
Modified:
    tuscany/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/pom.xml
    tuscany/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/src/main/webapp/WEB-INF/web.composite

Added: tuscany/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/README
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/README?rev=1151052&view=auto
==============================================================================
--- tuscany/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/README (added)
+++ tuscany/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/README Tue Jul 26 10:16:11 2011
@@ -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 <tuscany:binding.websocket port="8090"/> 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: 
+	<script type="text/javascript" 
+	        src="org.apache.tuscany.sca.WebsocketComponentContext.js">
+	</script>
+	
+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.<component name>.<service name>.<operation name>(<parameters>);
+
+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.<component name>.<service name>.<operation name>.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

Modified: tuscany/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/pom.xml
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/pom.xml?rev=1151052&r1=1151051&r2=1151052&view=diff
==============================================================================
--- tuscany/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/pom.xml (original)
+++ tuscany/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/pom.xml Tue Jul 26 10:16:11 2011
@@ -17,7 +17,8 @@
  * specific language governing permissions and limitations
  * under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 	<modelVersion>4.0.0</modelVersion>
 	<parent>
 		<groupId>org.apache.tuscany.sca</groupId>
@@ -46,6 +47,16 @@
 			<scope>compile</scope>
 		</dependency>
 	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.mortbay.jetty</groupId>
+				<artifactId>maven-jetty-plugin</artifactId>
+				<version>6.1.26</version>
+			</plugin>
+		</plugins>
+	</build>
 	
 </project>
 

Modified: tuscany/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/src/main/webapp/WEB-INF/web.composite
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/src/main/webapp/WEB-INF/web.composite?rev=1151052&r1=1151051&r2=1151052&view=diff
==============================================================================
--- tuscany/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/src/main/webapp/WEB-INF/web.composite (original)
+++ tuscany/sca-java-2.x/contrib/samples/learning-more/binding-websocket/autocomplete-webapp/src/main/webapp/WEB-INF/web.composite Tue Jul 26 10:16:11 2011
@@ -27,14 +27,13 @@
 			class="sample.CountryServiceImpl" />
 		<service name="CountryService">
 			<interface.java interface="sample.CountryService" />
-			<tuscany:binding.websocket />
+			<tuscany:binding.websocket port="8090" />
 		</service>
 		<reference name="repository" target="CountryRepositoryComponent" />
 	</component>
 
 	<component name="CountryRepositoryComponent">
-		<implementation.java
-			class="sample.CountryRepositoryImpl" />
+		<implementation.java class="sample.CountryRepositoryImpl" />
 		<property name="fileName">countries.txt</property>
 	</component>