Author: antelder
Date: Tue Jun 22 11:30:14 2010
New Revision: 956851
URL: http://svn.apache.org/viewvc?rev=956851&view=rev
Log:
TUSCANY-3517: Apply latest GSoC project zip from Florian
Added:
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/java/sample/TestServlet.java
(with props)
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/resources/
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/resources/log4j.properties
(with props)
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/resources/proposals.txt
(with props)
Modified:
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/pom.xml
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/java/sample/StockService.java
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/java/sample/StockServiceImpl.java
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/java/sample/StockServlet.java
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/webapp/WEB-INF/web.composite
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/webapp/WEB-INF/web.xml
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/webapp/stock.html
Modified: tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/pom.xml
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/pom.xml?rev=956851&r1=956850&r2=956851&view=diff
==============================================================================
--- tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/pom.xml (original)
+++ tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/pom.xml Tue Jun 22
11:30:14 2010
@@ -42,6 +42,18 @@
</dependency>
<dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring</artifactId>
+ <version>2.5.5</version>
+ </dependency>
+
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.12</version>
+ </dependency>
+
+ <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
@@ -52,43 +64,7 @@
<build>
<finalName>async-servlet</finalName>
- <plugins>
- <plugin>
- <groupId>org.mortbay.jetty</groupId>
- <artifactId>maven-jetty-plugin</artifactId>
- <version>6.1.18</version>
- <configuration>
-
<contextPath>helloworld-servlet</contextPath>
- <stopKey>foo</stopKey>
- <stopPort>9999</stopPort>
- </configuration>
- <executions>
- <execution>
- <id>start-jetty</id>
-
<phase>process-test-classes</phase>
- <goals>
- <goal>run</goal>
- </goals>
- <configuration>
-
<scanIntervalSeconds>0</scanIntervalSeconds>
- <daemon>true</daemon>
- <connectors>
- <connector
implementation="org.mortbay.jetty.nio.SelectChannelConnector">
-
<port>8085</port>
- </connector>
- </connectors>
- </configuration>
- </execution>
- <execution>
- <id>stop-jetty</id>
- <phase>prepare-package</phase>
- <goals>
- <goal>stop</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
</build>
+
</project>
Modified:
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/java/sample/StockService.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/java/sample/StockService.java?rev=956851&r1=956850&r2=956851&view=diff
==============================================================================
---
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/java/sample/StockService.java
(original)
+++
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/java/sample/StockService.java
Tue Jun 22 11:30:14 2010
@@ -18,12 +18,9 @@
*/
package sample;
-import java.util.Observer;
-
public interface StockService {
String getSymbol();
Double getValue();
- void register(Observer observer);
}
Modified:
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/java/sample/StockServiceImpl.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/java/sample/StockServiceImpl.java?rev=956851&r1=956850&r2=956851&view=diff
==============================================================================
---
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/java/sample/StockServiceImpl.java
(original)
+++
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/java/sample/StockServiceImpl.java
Tue Jun 22 11:30:14 2010
@@ -18,46 +18,29 @@
*/
package sample;
+import java.text.DecimalFormat;
import java.util.Date;
-import java.util.Observable;
-import java.util.Observer;
import java.util.Random;
-public class StockServiceImpl extends Observable implements StockService,
- Runnable {
+import org.apache.log4j.Logger;
- public static final int MAX_VALUE = 1000;
- public static final int MAX_SECONDS = 10;
- public static final int MILLIS_PER_SECOND = 1000;
+public class StockServiceImpl implements StockService {
+ public static final int MAX_VALUE = 1000;
private Random random = new Random(new Date().getTime());
+ private Logger logger = Logger.getLogger(StockServiceImpl.class);
@Override
public String getSymbol() {
+ logger.debug("Getting symbol...");
return "ASF";
}
@Override
public Double getValue() {
- return Math.abs(random.nextDouble() *
random.nextInt(MAX_VALUE));
- }
-
- @Override
- public void run() {
- try {
- while (true) {
- setChanged();
- notifyObservers();
- Thread.sleep((random.nextInt(MAX_SECONDS - 1) +
1) * MILLIS_PER_SECOND);
- }
- } catch (InterruptedException e) {
- // ignore
- }
- }
-
- @Override
- public void register(Observer observer) {
- this.addObserver(observer);
+ logger.debug("Getting value...");
+ Double value = Math.abs(random.nextDouble() *
random.nextInt(MAX_VALUE));
+ return Double.valueOf(new DecimalFormat("#.##").format(value));
}
}
Modified:
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/java/sample/StockServlet.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/java/sample/StockServlet.java?rev=956851&r1=956850&r2=956851&view=diff
==============================================================================
---
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/java/sample/StockServlet.java
(original)
+++
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/java/sample/StockServlet.java
Tue Jun 22 11:30:14 2010
@@ -20,42 +20,70 @@ package sample;
import java.io.IOException;
import java.io.Writer;
-import java.util.Observable;
-import java.util.Observer;
+import java.util.Timer;
+import java.util.TimerTask;
import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import org.apache.log4j.Logger;
import org.oasisopen.sca.annotation.Reference;
-...@webservlet(asyncSupported = true, urlPatterns = "stock/")
-public class StockServlet implements Observer {
-
- @Reference
- private StockService service;
+...@webservlet(asyncSupported = true, urlPatterns = "/stock")
+public class StockServlet extends HttpServlet {
+ private static final long serialVersionUID = 1L;
+ private static final long MILLIS_PER_SECOND = 1000L;
+ // @Reference
+ private StockService service = new StockServiceImpl();
private AsyncContext asyncContext;
+ private Timer timer;
+ private long updatePeriod = 1L; // default 1 sec
+ private Logger logger = Logger.getLogger(StockServlet.class);
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- asyncContext = req.startAsync(req, resp);
- service.register(this);
+ throws ServletException {
+ logger.debug("Received request.");
+ logger.debug("Starting async context...");
+ asyncContext = req.startAsync();
+ logger.debug("Service reference: " + service);
+ logger.debug("Setting timer...");
+ timer = new Timer();
+ logger.debug("Setting update period...");
+ this.updatePeriod = Long.parseLong(req.getParameter("period"));
+ timer.scheduleAtFixedRate(new StockTask(), 0, updatePeriod *
MILLIS_PER_SECOND);
+ logger.debug("Exiting doGet method...");
}
-
- @Override
- public void update(Observable observable, Object arg) {
+
+ public void updateClient() {
try {
- asyncContext.getResponse().setContentType("text/html");
+ logger.debug("Updating response...");
+ asyncContext.getResponse().setContentType("text/plain");
Writer writer = asyncContext.getResponse().getWriter();
- writer.write("<span>Symbol: " + service.getSymbol() +
", Price "
- + service.getValue() + "</span>");
+ writer.write("Symbol: " + service.getSymbol() + ",
Price "
+ + service.getValue() + "\n");
writer.flush();
+ asyncContext.getResponse().flushBuffer();
+ logger.debug("Flushed response.");
} catch (IOException e) {
- // ignore
+ logger.debug(e.getMessage(), e);
+ asyncContext.complete();
}
}
+ //-----------------------------------------------------------
+
+ public class StockTask extends TimerTask {
+
+ @Override
+ public void run() {
+ updateClient();
+ }
+
+ }
+
}
Added:
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/java/sample/TestServlet.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/java/sample/TestServlet.java?rev=956851&view=auto
==============================================================================
---
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/java/sample/TestServlet.java
(added)
+++
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/java/sample/TestServlet.java
Tue Jun 22 11:30:14 2010
@@ -0,0 +1,71 @@
+/*
+ * 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.io.Writer;
+
+import javax.servlet.AsyncContext;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.log4j.Logger;
+
+...@webservlet(asyncSupported = true, urlPatterns = "/test")
+public class TestServlet extends HttpServlet {
+ private static final long serialVersionUID = 1L;
+
+ private AsyncContext asyncContext;
+ private Logger logger = Logger.getLogger(TestServlet.class);
+
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+ throws ServletException {
+ logger.debug("Received test request.");
+ logger.debug("Gathering async context...");
+ asyncContext = req.startAsync();
+ resp.setContentType("text/plain");
+
+ logger.debug("Gathering writer...");
+ Writer writer;
+ try {
+ writer = asyncContext.getResponse().getWriter();
+ for (int i = 0; i < 10; i++) {
+ Thread.sleep(1000);
+ logger.debug("Sending " + i + "...");
+ writer.write("" + i + "\n");
+ writer.flush();
+ resp.flushBuffer();
+ }
+
+ logger.debug("Completing response...");
+ asyncContext.complete();
+ writer.close();
+ } catch (IOException e1) {
+ asyncContext.complete();
+ e1.printStackTrace();
+ } catch (InterruptedException e) {
+ asyncContext.complete();
+ e.printStackTrace();
+ }
+ }
+
+}
\ No newline at end of file
Propchange:
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/java/sample/TestServlet.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/java/sample/TestServlet.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added:
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/resources/log4j.properties
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/resources/log4j.properties?rev=956851&view=auto
==============================================================================
---
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/resources/log4j.properties
(added)
+++
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/resources/log4j.properties
Tue Jun 22 11:30:14 2010
@@ -0,0 +1,5 @@
+log4j.rootLogger=DEBUG, CA
+#Console Appender
+log4j.appender.CA=org.apache.log4j.ConsoleAppender
+log4j.appender.CA.layout=org.apache.log4j.PatternLayout
+log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
Propchange:
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/resources/log4j.properties
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/resources/log4j.properties
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange:
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/resources/log4j.properties
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/resources/proposals.txt
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/resources/proposals.txt?rev=956851&view=auto
==============================================================================
---
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/resources/proposals.txt
(added)
+++
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/resources/proposals.txt
Tue Jun 22 11:30:14 2010
@@ -0,0 +1,52 @@
+web.composite
+~~~~~~~~~~~~~
+
+<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"
+ xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"
+ targetNamespace="http://samples"
+ name="Stock">
+
+ <component name="WebPage">
+ <implementation.?/>
+ <callback>
+ <binding.? url="/stock/**" method="callbackJsMethod"/>
+ </callback>
+ </component>
+
+ <component name="Servlet">
+ <implementation.web web-uri=""/>
+ <reference name="service" target="StockComponent"/>
+ </component>
+
+ <component name="StockComponent">
+ <implementation.java class="sample.StockServiceImpl"/>
+ </component>
+
+</composite>
+
+
+stock.html
+~~~~~~~~~~
+
+<html>
+
+<head>
+ <title>Apache Tuscany Asynchronous Servlet Sample</title>
+ <script type="text/javascript"
src="org.apache.tuscany.callbackListener.js"></script>
+
+ <script language="JavaScript">
+ function callbackJsMethod(response) {
+ // process received response
+ }
+ </script>
+</head>
+
+<body>
+ <h2>Apache Tuscany Asynchronous Servlet Sample</h2>
+
+ <h3>Stock Monitor</h3>
+
+ <input type="button" value="Start monitoring" onclick="">
+</body>
+
+</html>
\ No newline at end of file
Propchange:
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/resources/proposals.txt
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/resources/proposals.txt
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/webapp/WEB-INF/web.composite
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/webapp/WEB-INF/web.composite?rev=956851&r1=956850&r2=956851&view=diff
==============================================================================
---
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/webapp/WEB-INF/web.composite
(original)
+++
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/webapp/WEB-INF/web.composite
Tue Jun 22 11:30:14 2010
@@ -22,12 +22,12 @@
targetNamespace="http://samples"
name="Stock">
- <component name="Servlet">
+ <component name="StockServlet">
<implementation.web web-uri=""/>
- <reference name="service" target="StockComponent"/>
+ <reference name="service" target="StockService"/>
</component>
- <component name="StockComponent">
+ <component name="StockService">
<implementation.java class="sample.StockServiceImpl"/>
</component>
Modified:
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/webapp/WEB-INF/web.xml
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/webapp/WEB-INF/web.xml?rev=956851&r1=956850&r2=956851&view=diff
==============================================================================
---
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/webapp/WEB-INF/web.xml
(original)
+++
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/webapp/WEB-INF/web.xml
Tue Jun 22 11:30:14 2010
@@ -17,28 +17,31 @@
* specific language governing permissions and limitations
* under the License.
-->
-<web-app version="2.4"
- xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
-
- <display-name>Apache Tuscany Asynchronous Servlet Sample</display-name>
-
-
<listener><listener-class>org.apache.tuscany.sca.host.webapp.TuscanyContextListener</listener-class></listener>
-
- <servlet>
- <servlet-name>AsyncServlet</servlet-name>
- <servlet-class>sample.StockServlet</servlet-class>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>AsyncServlet</servlet-name>
- <url-pattern>/AsyncServlet</url-pattern>
- </servlet-mapping>
-
- <welcome-file-list id="WelcomeFileList">
- <welcome-file>stock.html</welcome-file>
- </welcome-file-list>
+<web-app xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+ http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
+ version="3.0"
+ metadata-complete="false">
+
+ <display-name>Apache Tuscany Asynchronous Servlet Sample</display-name>
+
+ <listener>
+
<listener-class>org.apache.tuscany.sca.host.webapp.TuscanyContextListener</listener-class>
+ </listener>
+
+ <context-param>
+ <param-name>log4jConfigLocation</param-name>
+ <param-value>WEB-INF/classes/log4j.properties</param-value>
+ </context-param>
+
+ <listener>
+
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
+ </listener>
+
+ <welcome-file-list id="WelcomeFileList">
+ <welcome-file>stock.html</welcome-file>
+ </welcome-file-list>
</web-app>
Modified:
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/webapp/stock.html
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/webapp/stock.html?rev=956851&r1=956850&r2=956851&view=diff
==============================================================================
---
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/webapp/stock.html
(original)
+++
tuscany/sca-java-2.x/contrib/samples/async-servlet-sca/src/main/webapp/stock.html
Tue Jun 22 11:30:14 2010
@@ -28,7 +28,12 @@
<h3>Stock Monitor</h3>
-<input type="button" value="Start monitoring" onclick="">
+<form action="stock" method="GET">
+ <label>Enter the update period (seconds): </label>
+ <input type="text" name="period" size="2"/>
+ <br/>
+ <button type="submit">Start monitoring</button>
+</form>
</body>
</html>
\ No newline at end of file