diff options
9 files changed, 50 insertions, 198 deletions
diff --git a/sca-java-2.x/contrib/samples/stock-comet/pom.xml b/sca-java-2.x/contrib/samples/stock-comet/pom.xml index 3c7e23e2ba..f6f68d1e66 100644 --- a/sca-java-2.x/contrib/samples/stock-comet/pom.xml +++ b/sca-java-2.x/contrib/samples/stock-comet/pom.xml @@ -50,6 +50,20 @@ <version>6.0</version> <scope>provided</scope> </dependency> + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-binding-comet</artifactId> + <version>2.0-SNAPSHOT</version> + <type>jar</type> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-binding-comet-runtime</artifactId> + <version>2.0-SNAPSHOT</version> + <type>jar</type> + <scope>compile</scope> + </dependency> </dependencies> <build> diff --git a/sca-java-2.x/contrib/samples/stock-comet/src/main/java/sample/StockService.java b/sca-java-2.x/contrib/samples/stock-comet/src/main/java/org/apache/tuscany/sca/sample/comet/StockService.java index 46f69834ae..767e8f5666 100644 --- a/sca-java-2.x/contrib/samples/stock-comet/src/main/java/sample/StockService.java +++ b/sca-java-2.x/contrib/samples/stock-comet/src/main/java/org/apache/tuscany/sca/sample/comet/StockService.java @@ -16,12 +16,13 @@ * specific language governing permissions and limitations * under the License. */ -package sample; +package org.apache.tuscany.sca.sample.comet; +import org.oasisopen.sca.annotation.Remotable; + +@Remotable public interface StockService { - String getSymbol(); + String getQuotes(); - Double getValue(); - } diff --git a/sca-java-2.x/contrib/samples/stock-comet/src/main/java/sample/StockServiceImpl.java b/sca-java-2.x/contrib/samples/stock-comet/src/main/java/org/apache/tuscany/sca/sample/comet/StockServiceImpl.java index f6a4d743a1..d70724e90a 100644 --- a/sca-java-2.x/contrib/samples/stock-comet/src/main/java/sample/StockServiceImpl.java +++ b/sca-java-2.x/contrib/samples/stock-comet/src/main/java/org/apache/tuscany/sca/sample/comet/StockServiceImpl.java @@ -16,26 +16,24 @@ * specific language governing permissions and limitations * under the License. */ -package sample; +package org.apache.tuscany.sca.sample.comet; import java.text.DecimalFormat; import java.util.Date; import java.util.Random; +import org.oasisopen.sca.annotation.Service; + +@Service(StockService.class) public class StockServiceImpl implements StockService { public static final int MAX_VALUE = 1000; private Random random = new Random(new Date().getTime()); @Override - public String getSymbol() { - return "ASF"; - } - - @Override - public Double getValue() { + public String getQuotes() { Double value = Math.abs(random.nextDouble() * random.nextInt(MAX_VALUE)); - return Double.valueOf(new DecimalFormat("#.##").format(value)); + return "ASF" + "#" + Double.valueOf(new DecimalFormat("#.##").format(value)); } - + } diff --git a/sca-java-2.x/contrib/samples/stock-comet/src/main/java/sample/CometServlet.java b/sca-java-2.x/contrib/samples/stock-comet/src/main/java/sample/CometServlet.java deleted file mode 100644 index c93dc144dc..0000000000 --- a/sca-java-2.x/contrib/samples/stock-comet/src/main/java/sample/CometServlet.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * 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 sample; - -import java.io.IOException; -import java.util.LinkedList; -import java.util.List; - -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.atmosphere.cpr.AtmosphereResourceEvent; -import org.atmosphere.cpr.AtmosphereResourceEventListener; -import org.atmosphere.cpr.BroadcastFilter; -import org.atmosphere.cpr.Broadcaster; -import org.atmosphere.cpr.Meteor; -import org.atmosphere.util.XSSHtmlFilter; -import org.oasisopen.sca.ComponentContext; - -@SuppressWarnings("serial") -public class CometServlet extends HttpServlet { - - private static final String COMPONENT_CONTEXT_KEY = "org.oasisopen.sca.ComponentContext"; - private static final String COMET_SCOPE_KEY = "org.apache.tuscany.comet.scope"; - private static final String METEOR_KEY = "org.apache.tuscany.comet.meteor"; - - // TODO: check if static variables are a good choice here - private static List<BroadcastFilter> filters; - private static Broadcaster.SCOPE scope; - - - @Override - public void init(ServletConfig config) throws ServletException { - super.init(config); - filters = new LinkedList<BroadcastFilter>(); - filters.add(new XSSHtmlFilter()); - filters.add(new ScriptFilter()); - String cometScope = getInitParameter(COMET_SCOPE_KEY).trim().toUpperCase(); - scope = Broadcaster.SCOPE.valueOf(cometScope); - } - - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - Meteor meteor = Meteor.build(request, scope, filters, null); - meteor.addListener(new CometEventListener()); - request.getSession().setAttribute(METEOR_KEY, meteor); - response.setContentType("text/html"); - meteor.suspend(-1); // http streaming - } - - @Override - protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, - IOException { - Meteor meteor = (Meteor)request.getSession().getAttribute(METEOR_KEY); - - // TODO: add dynamic call and cast - // String component = request.getParameter("component"); - // String method = request.getParameter("method"); - // String params = request.getParameter("params"); - // String componentClass = request.getParameter("component.class"); - - // TODO: check if cc has all the information when servlet is not in - // web.composite - ComponentContext cc = (ComponentContext)getServletContext().getAttribute(COMPONENT_CONTEXT_KEY); - StockService service = cc.getService(StockService.class, "service"); - - // TODO: add JSON serialization - meteor.broadcast(service.getSymbol() + "#" + service.getValue()); - } - - // ---------------------------------------------- - - public class CometEventListener implements AtmosphereResourceEventListener { - - @Override - public void onSuspend(AtmosphereResourceEvent<HttpServletRequest, HttpServletResponse> event) { - System.out.println("onSuspend: " + event); - } - - @Override - public void onResume(AtmosphereResourceEvent<HttpServletRequest, HttpServletResponse> event) { - System.out.println("onResume: " + event); - } - - @Override - public void onDisconnect(AtmosphereResourceEvent<HttpServletRequest, HttpServletResponse> event) { - System.out.println("onDisconnect: " + event); - } - - @Override - public void onBroadcast(AtmosphereResourceEvent<HttpServletRequest, HttpServletResponse> event) { - System.out.println("onBroadcast: " + event); - } - - } - -} diff --git a/sca-java-2.x/contrib/samples/stock-comet/src/main/java/sample/ScriptFilter.java b/sca-java-2.x/contrib/samples/stock-comet/src/main/java/sample/ScriptFilter.java deleted file mode 100644 index 61cf1b79df..0000000000 --- a/sca-java-2.x/contrib/samples/stock-comet/src/main/java/sample/ScriptFilter.java +++ /dev/null @@ -1,20 +0,0 @@ -package sample; - -import org.atmosphere.cpr.BroadcastFilter; - -public class ScriptFilter implements BroadcastFilter { - - private static final String BEGIN_SCRIPT_TAG = "<script type='text/javascript'>\n"; - private static final String END_SCRIPT_TAG = "</script>\n"; - // TODO: add dynamic function configuration - private static final String DEFAULT_FUNCTION = "window.parent.update"; - - public BroadcastAction filter(Object o) { - if (o instanceof String) { - String message = (String)o; - return new BroadcastAction(BEGIN_SCRIPT_TAG + DEFAULT_FUNCTION + "('" + message + "');\n" + END_SCRIPT_TAG); - } else { - return new BroadcastAction(o); - } - } -} diff --git a/sca-java-2.x/contrib/samples/stock-comet/src/main/webapp/WEB-INF/context.xml b/sca-java-2.x/contrib/samples/stock-comet/src/main/webapp/WEB-INF/context.xml deleted file mode 100755 index 80763de382..0000000000 --- a/sca-java-2.x/contrib/samples/stock-comet/src/main/webapp/WEB-INF/context.xml +++ /dev/null @@ -1,4 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Context> - <Loader delegate="true"/> -</Context> diff --git a/sca-java-2.x/contrib/samples/stock-comet/src/main/webapp/WEB-INF/web.composite b/sca-java-2.x/contrib/samples/stock-comet/src/main/webapp/WEB-INF/web.composite index 47ab8557ea..5a1d2bb21b 100644 --- a/sca-java-2.x/contrib/samples/stock-comet/src/main/webapp/WEB-INF/web.composite +++ b/sca-java-2.x/contrib/samples/stock-comet/src/main/webapp/WEB-INF/web.composite @@ -22,12 +22,12 @@ targetNamespace="http://samples" name="Stock"> - <component name="StockServlet"> - <implementation.web web-uri=""/> - <reference name="service" target="StockService"/> - </component> - - <component name="StockService"> - <implementation.java class="sample.StockServiceImpl"/> - </component> -</composite> + <component name="test"> + <implementation.java class="org.apache.tuscany.sca.sample.comet.StockServiceImpl"/> + <service name="StockService"> + <interface.java interface="org.apache.tuscany.sca.sample.comet.StockService"/> + <tuscany:binding.comet/> + </service> + </component> + +</composite>
\ No newline at end of file diff --git a/sca-java-2.x/contrib/samples/stock-comet/src/main/webapp/WEB-INF/web.xml b/sca-java-2.x/contrib/samples/stock-comet/src/main/webapp/WEB-INF/web.xml index 4a534c043d..66c2ee4480 100644 --- a/sca-java-2.x/contrib/samples/stock-comet/src/main/webapp/WEB-INF/web.xml +++ b/sca-java-2.x/contrib/samples/stock-comet/src/main/webapp/WEB-INF/web.xml @@ -28,38 +28,8 @@ <listener> <listener-class>org.apache.tuscany.sca.host.webapp.TuscanyContextListener</listener-class> </listener> - - <servlet> - <description>CometServlet</description> - <servlet-name>CometServlet</servlet-name> - <servlet-class>org.atmosphere.cpr.MeteorServlet</servlet-class> - <async-supported>true</async-supported> - <init-param> - <param-name>org.atmosphere.servlet</param-name> - <param-value>sample.CometServlet</param-value> - </init-param> - <init-param> - <param-name>org.apache.tuscany.comet.scope</param-name> - <param-value>request</param-value> - <!-- <param-value>application</param-value> --> - <!-- <param-value>vm</param-value> --> - </init-param> - <!-- - <init-param> - <param-name>org.apache.tuscany.comet.transport</param-name> - <param-value>http-streaming</param-value> - <param-value>long-pooling</param-value> - <param-value>websocket</param-value> - </init-param> - --> - <load-on-startup>0</load-on-startup> - </servlet> - <servlet-mapping> - <servlet-name>CometServlet</servlet-name> - <url-pattern>/comet</url-pattern> - </servlet-mapping> - <welcome-file-list id="WelcomeFileList"> + <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app> diff --git a/sca-java-2.x/contrib/samples/stock-comet/src/main/webapp/index.html b/sca-java-2.x/contrib/samples/stock-comet/src/main/webapp/index.html index 3ae0ac1ae8..e03a08ccd2 100644 --- a/sca-java-2.x/contrib/samples/stock-comet/src/main/webapp/index.html +++ b/sca-java-2.x/contrib/samples/stock-comet/src/main/webapp/index.html @@ -27,24 +27,33 @@ document.getElementById('price').textContent = aux[1]; } - function startMonitoring() { - new Ajax.Request('/stock-comet/comet', + function getQuotes() { + new Ajax.Request('test/StockService/getQuotes', { - method: 'post', + onSuccess: function(response) { + alert("onSuccess"); + }, + onError: function(response) { + alert("onError"); + } }); } + + Event.observe(document, 'DOMContentLoaded', function(e) { + $('comet').src='test/StockService/getQuotes'; + }); </script> </head> <body> <h2>Apache Tuscany Asynchronous Servlet Sample</h2> <h3>Stock Monitor</h3> - <button type="button" onclick="startMonitoring()">Get values</button> + <button type="button" onclick="getQuotes()">Get values</button> <div id='text'> <b><label>Company Symbol: </label></b> <span id="symbol">N/A</span> <b><label>Price: </label></b> <span id="price">N/A</span> </div> - <iframe style="display:none" src="/stock-comet/comet"></iframe> + <iframe id='comet' style="display:none"></iframe> </body> </html> |