summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp
diff options
context:
space:
mode:
authorantelder <antelder@13f79535-47bb-0310-9956-ffa450edef68>2011-07-28 11:07:25 +0000
committerantelder <antelder@13f79535-47bb-0310-9956-ffa450edef68>2011-07-28 11:07:25 +0000
commit2e0a5f4c1368993c8cf71b9f4b59273a323b9aff (patch)
tree595b08df45fd35819afb93a8acc2b3b24359fee4 /sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp
parent04dcd09976ecc5aa2948993b9a9a2d90d239ee44 (diff)
Recreate 2.0-Beta3 branch from current trunk
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1151792 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp')
-rw-r--r--sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/README79
-rw-r--r--sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/pom.xml82
-rw-r--r--sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/Country.java40
-rw-r--r--sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/CountryRepository.java30
-rw-r--r--sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/CountryRepositoryImpl.java80
-rw-r--r--sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/CountryService.java30
-rw-r--r--sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/CountryServiceImpl.java36
-rw-r--r--sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/resources/countries.txt211
-rw-r--r--sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/webapp/META-INF/MANIFEST.MF2
-rw-r--r--sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/webapp/WEB-INF/web.composite41
-rw-r--r--sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/webapp/WEB-INF/web.xml34
-rw-r--r--sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/webapp/index.html69
12 files changed, 734 insertions, 0 deletions
diff --git a/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/README b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/README
new file mode 100644
index 0000000000..57702664d7
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/README
@@ -0,0 +1,79 @@
+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). \ No newline at end of file
diff --git a/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/pom.xml b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/pom.xml
new file mode 100644
index 0000000000..343234f642
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/pom.xml
@@ -0,0 +1,82 @@
+<?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 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.samples</groupId>
+ <artifactId>tuscany-samples-binding-comet</artifactId>
+ <version>2.0-Beta3-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>sample-binding-comet-autocomplete-webapp</artifactId>
+ <packaging>war</packaging>
+ <version>2.0-Beta3-SNAPSHOT</version>
+ <name>Apache Tuscany SCA Sample binding.comet Real-Time Suggestions Webapp</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-comet-runtime</artifactId>
+ <version>2.0-Beta3-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>javax</groupId>
+ <artifactId>javaee-web-api</artifactId>
+ <version>6.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-base-runtime-pom</artifactId>
+ <version>2.0-Beta3-SNAPSHOT</version>
+ <type>pom</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ <version>r09</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>com.googlecode.t7mp</groupId>
+ <artifactId>maven-t7-plugin</artifactId>
+ <version>0.9.6</version>
+ <configuration>
+ <webapps>
+ <webappArtifact>
+ <groupId>org.apache.tuscany.sca.samples</groupId>
+ <artifactId>sample-binding-comet-autocomplete-webapp</artifactId>
+ <version>2.0-Beta3-SNAPSHOT</version>
+ </webappArtifact>
+ </webapps>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
+
diff --git a/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/Country.java b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/Country.java
new file mode 100644
index 0000000000..eedacf01d0
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/Country.java
@@ -0,0 +1,40 @@
+/*
+ * 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 org.apache.tuscany.sca.sample.comet;
+
+import java.io.Serializable;
+
+public class Country implements Serializable {
+
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String toString() {
+ return name;
+ }
+
+}
diff --git a/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/CountryRepository.java b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/CountryRepository.java
new file mode 100644
index 0000000000..12cdfb4235
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/CountryRepository.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 org.apache.tuscany.sca.sample.comet;
+
+import java.util.List;
+
+import org.oasisopen.sca.annotation.Remotable;
+
+@Remotable
+public interface CountryRepository {
+
+ List<Country> findStartingWith(String text);
+
+}
diff --git a/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/CountryRepositoryImpl.java b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/CountryRepositoryImpl.java
new file mode 100644
index 0000000000..57e2d3e214
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/CountryRepositoryImpl.java
@@ -0,0 +1,80 @@
+/*
+ * 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 org.apache.tuscany.sca.sample.comet;
+
+import java.io.BufferedReader;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.oasisopen.sca.annotation.Constructor;
+import org.oasisopen.sca.annotation.EagerInit;
+import org.oasisopen.sca.annotation.Init;
+import org.oasisopen.sca.annotation.Property;
+import org.oasisopen.sca.annotation.Scope;
+import org.oasisopen.sca.annotation.Service;
+
+@EagerInit
+@Scope("COMPOSITE")
+@Service(CountryRepository.class)
+public class CountryRepositoryImpl implements CountryRepository {
+
+ private String fileName;
+ private List<Country> countries;
+
+ @Constructor
+ public CountryRepositoryImpl(@Property(name = "fileName") String fileName) {
+ this.fileName = fileName;
+ countries = new ArrayList<Country>();
+ }
+
+ @Init
+ public void start() {
+ try {
+ BufferedReader reader = new BufferedReader(new InputStreamReader(getClass().getClassLoader()
+ .getResourceAsStream(fileName)));
+ String line;
+ while ((line = reader.readLine()) != null) {
+ if (!line.startsWith("#")) {
+ Country c = new Country();
+ c.setName(line);
+ countries.add(c);
+ }
+ }
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public List<Country> findStartingWith(String text) {
+ List<Country> result = new ArrayList<Country>();
+ for (Country c : countries) {
+ if (c.getName().toLowerCase().startsWith(text.toLowerCase())) {
+ result.add(c);
+ }
+ }
+ return result;
+ }
+
+}
diff --git a/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/CountryService.java b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/CountryService.java
new file mode 100644
index 0000000000..e916ecb98b
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/CountryService.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 org.apache.tuscany.sca.sample.comet;
+
+import java.util.List;
+
+import org.oasisopen.sca.annotation.Remotable;
+
+@Remotable
+public interface CountryService {
+
+ List<Country> getCountriesStartingWith(String text);
+
+}
diff --git a/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/CountryServiceImpl.java b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/CountryServiceImpl.java
new file mode 100644
index 0000000000..ad0786be59
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/CountryServiceImpl.java
@@ -0,0 +1,36 @@
+/*
+ * 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 org.apache.tuscany.sca.sample.comet;
+
+import java.util.List;
+
+import org.oasisopen.sca.annotation.Reference;
+import org.oasisopen.sca.annotation.Service;
+
+@Service(CountryService.class)
+public class CountryServiceImpl implements CountryService {
+
+ @Reference
+ protected CountryRepository repository;
+
+ @Override
+ public List<Country> getCountriesStartingWith(String text) {
+ return repository.findStartingWith(text);
+ }
+}
diff --git a/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/resources/countries.txt b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/resources/countries.txt
new file mode 100644
index 0000000000..0ce76f8167
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/resources/countries.txt
@@ -0,0 +1,211 @@
+# 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.
+Afghanistan
+Albania
+Algeria
+Andorra
+Angola
+Antigua & Barbuda
+Argentina
+Armenia
+Australia
+Austria
+Azerbaijan
+Bahamas
+Bahrain
+Bangladesh
+Barbados
+Belarus
+Belgium
+Belize
+Benin
+Bhutan
+Bolivia
+Bosnia & Herzegovina
+Botswana
+Brazil
+Brunei
+Bulgaria
+Burkina Faso
+Burundi
+Cambodia
+Cameroon
+Canada
+Cape Verde
+Central African Republic
+Chad
+Chile
+China
+Colombia
+Comoros
+Congo
+Congo Democratic Republic of
+Costa Rica
+Cote d'Ivoire
+Croatia
+Cuba
+Cyprus
+Czech Republic
+Denmark
+Djibouti
+Dominica
+Dominican Republic
+Ecuador
+East Timor
+Egypt
+El Salvador
+Equatorial Guinea
+Eritrea
+Estonia
+Ethiopia
+Fiji
+Finland
+France
+Gabon
+Gambia
+Georgia
+Germany
+Ghana
+Greece
+Grenada
+Guatemala
+Guinea
+Guinea-Bissau
+Guyana
+Haiti
+Honduras
+Hungary
+Iceland
+India
+Indonesia
+Iran
+Iraq
+Ireland
+Israel
+Italy
+Jamaica
+Japan
+Jordan
+Kazakhstan
+Kenya
+Kiribati
+Korea North
+Korea South
+Kosovo
+Kuwait
+Kyrgyzstan
+Laos
+Latvia
+Lebanon
+Lesotho
+Liberia
+Libya
+Liechtenstein
+Lithuania
+Luxembourg
+Macedonia
+Madagascar
+Malawi
+Malaysia
+Maldives
+Mali
+Malta
+Marshall Islands
+Mauritania
+Mauritius
+Mexico
+Micronesia
+Moldova
+Monaco
+Mongolia
+Montenegro
+Morocco
+Mozambique
+Myanmar (Burma)
+Namibia
+Nauru
+Nepal
+The Netherlands
+New Zealand
+Nicaragua
+Niger
+Nigeria
+Norway
+Oman
+Pakistan
+Palau
+Palestinian State*
+Panama
+Papua New Guinea
+Paraguay
+Peru
+The Philippines
+Poland
+Portugal
+Qatar
+Romania
+Russia
+Rwanda
+St. Kitts & Nevis
+St. Lucia
+St. Vincent & The Grenadines
+Samoa
+San Marino
+Sao Tome & Principe
+Saudi Arabia
+Senegal
+Serbia
+Seychelles
+Sierra Leone
+Singapore
+Slovakia
+Slovenia
+Solomon Islands
+Somalia
+South Africa
+Spain
+Sri Lanka
+Sudan
+Suriname
+Swaziland
+Sweden
+Switzerland
+Syria
+Taiwan
+Tajikistan
+Tanzania
+Thailand
+Togo
+Tonga
+Trinidad & Tobago
+Tunisia
+Turkey
+Turkmenistan
+Tuvalu
+Uganda
+Ukraine
+United Arab Emirates
+United Kingdom
+United States of America
+Uruguay
+Uzbekistan
+Vanuatu
+Vatican City (Holy See)
+Venezuela
+Yemen
+Zambia
+Zimbabwe
diff --git a/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/webapp/META-INF/MANIFEST.MF b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/webapp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..58630c02ef
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/webapp/META-INF/MANIFEST.MF
@@ -0,0 +1,2 @@
+Manifest-Version: 1.0
+
diff --git a/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/webapp/WEB-INF/web.composite b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/webapp/WEB-INF/web.composite
new file mode 100644
index 0000000000..f7cee35452
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/webapp/WEB-INF/web.composite
@@ -0,0 +1,41 @@
+<?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://docs.oasis-open.org/ns/opencsa/sca/200912"
+ xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"
+ xmlns:sca="http://docs.oasis-open.org/ns/opencsa/sca/200912"
+ targetNamespace="http://samples" name="Chat">
+
+ <component name="CountryServiceComponent">
+ <implementation.java
+ class="org.apache.tuscany.sca.sample.comet.CountryServiceImpl" />
+ <service name="CountryService">
+ <interface.java interface="org.apache.tuscany.sca.sample.comet.CountryService" />
+ <tuscany:binding.comet />
+ </service>
+ <reference name="repository" target="CountryRepositoryComponent" />
+ </component>
+
+ <component name="CountryRepositoryComponent">
+ <implementation.java
+ class="org.apache.tuscany.sca.sample.comet.CountryRepositoryImpl" />
+ <property name="fileName">countries.txt</property>
+ </component>
+
+</composite> \ No newline at end of file
diff --git a/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/webapp/WEB-INF/web.xml b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000000..25b06c457a
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,34 @@
+<?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.
+-->
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:j2ee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_3.0.xsd" version="3.0">
+ <display-name>Apache Tuscany Stock Comet Sample</display-name>
+ <filter>
+ <filter-name>tuscany</filter-name>
+ <filter-class>org.apache.tuscany.sca.host.webapp.TuscanyServletFilter</filter-class>
+ <async-supported>true</async-supported>
+ </filter>
+ <filter-mapping>
+ <filter-name>tuscany</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+ <welcome-file-list>
+ <welcome-file>index.html</welcome-file>
+ </welcome-file-list>
+</web-app> \ No newline at end of file
diff --git a/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/webapp/index.html b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/webapp/index.html
new file mode 100644
index 0000000000..115ca7bbdb
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta3/samples/learning-more/binding-comet/autocomplete-webapp/src/main/webapp/index.html
@@ -0,0 +1,69 @@
+<!--
+ * 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.
+-->
+<html>
+ <head>
+ <title>Apache Tuscany Comet Sample</title>
+ <!-- Tuscany Comet Javascript Toolkit is dependent on jQuery -->
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" type="text/javascript"></script>
+ <script type="text/javascript" src="tuscany-comet-js/org.apache.tuscany.sca.CometComponentContext.js"></script>
+ <script type="text/javascript">
+ var user = "";
+
+ $(document).ready(function()
+ {
+ // Tuscany Comet specific API
+ SCA.TuscanyComet.connect();
+
+ $("#country").keyup(function() {
+ var text = $("#country").val();
+ if (text != "") {
+ SCA.CometComponentContext.CountryService.getCountriesStartingWith(text, callback);
+ } else {
+ $("#suggestions").html("");
+ }
+ });
+
+ $("#country").focus();
+ });
+
+ function callback(response) {
+ var html = '<ul>';
+ $.each(response, function(index, country) {
+ html += '<li>' + country.name + "</li>"
+ });
+ html += '</ul>'
+ $("#suggestions").html(html);
+ }
+
+ </script>
+ </head>
+ <body>
+ <h2>Apache Tuscany Comet Sample</h2>
+ <h3>Real-time suggestions</h3>
+ <table>
+ <tr>
+ <td>Enter a country name</td>
+ <td><input type="text" id='country'/></td>
+ </tr>
+ </table>
+ </div>
+ <div id="suggestions">
+ </div>
+ </body>
+</html>