You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by pr...@apache.org on 2007/09/26 05:24:11 UTC
svn commit: r579443 - in /geronimo/samples/trunk/samples/async-http:
http-local-app/src/main/java/org/apache/geronimo/
http-local-app/src/main/webapp/WEB-INF/
http-remote-app/src/main/java/org/apache/geronimo/
Author: prasad
Date: Tue Sep 25 20:24:10 2007
New Revision: 579443
URL: http://svn.apache.org/viewvc?rev=579443&view=rev
Log:
* changes to accomodate redesigned AHC
Modified:
geronimo/samples/trunk/samples/async-http/http-local-app/src/main/java/org/apache/geronimo/AsyncServlet.java
geronimo/samples/trunk/samples/async-http/http-local-app/src/main/java/org/apache/geronimo/BlockingServlet.java
geronimo/samples/trunk/samples/async-http/http-local-app/src/main/java/org/apache/geronimo/Callback.java
geronimo/samples/trunk/samples/async-http/http-local-app/src/main/webapp/WEB-INF/web.xml
geronimo/samples/trunk/samples/async-http/http-remote-app/src/main/java/org/apache/geronimo/PageServlet.java
Modified: geronimo/samples/trunk/samples/async-http/http-local-app/src/main/java/org/apache/geronimo/AsyncServlet.java
URL: http://svn.apache.org/viewvc/geronimo/samples/trunk/samples/async-http/http-local-app/src/main/java/org/apache/geronimo/AsyncServlet.java?rev=579443&r1=579442&r2=579443&view=diff
==============================================================================
--- geronimo/samples/trunk/samples/async-http/http-local-app/src/main/java/org/apache/geronimo/AsyncServlet.java (original)
+++ geronimo/samples/trunk/samples/async-http/http-local-app/src/main/java/org/apache/geronimo/AsyncServlet.java Tue Sep 25 20:24:10 2007
@@ -2,7 +2,10 @@
import java.io.IOException;
import java.net.URL;
+import java.util.Date;
import java.util.Random;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
@@ -22,14 +25,23 @@
*
*/
public class AsyncServlet extends HttpServlet implements CometProcessor {
+ @Override
+ public void destroy() {
+ // TODO Auto-generated method stub
+ super.destroy();
+ ahc.destroyAll();
+ }
+
static final long serialVersionUID = 1L;
-
+
private String remoteUrl;
-
+ private static AsyncHttpClient ahc;
+
public void init() throws ServletException {
- getServletContext().log("getinit init");
- // Get the value of an initialization parameter
- remoteUrl = getServletConfig().getInitParameter("remoteUrl");
+ remoteUrl = getServletConfig().getInitParameter("remoteUrl");
+
+ ExecutorService threadPool = Executors.newFixedThreadPool(8);
+ ahc = new AsyncHttpClient(threadPool);
}
/**
@@ -49,50 +61,62 @@
+ event.getEventType().toString());
if (event.getEventType() == CometEvent.EventType.BEGIN) {
- Callback callback = new Callback(event);
+ event.getHttpServletRequest().setAttribute(
+ "org.apache.tomcat.comet.timeout", new Integer(100 * 1000));
+ event.setTimeout(100 * 1000);
- if (request.getParameter("remoteUrl") != null){
- remoteUrl = request.getParameter("remoteUrl");
+ if (request.getParameter("remoteUrl") != null) {
+ remoteUrl = request.getParameter("remoteUrl");
}
-
+
String remoteUri = request.getParameter("remoteUri");
- if ( remoteUri == null){
- remoteUri = "/remoteApp/page";
+ if (remoteUri == null) {
+ remoteUri = "/remoteApp/page";
}
- HttpRequestMessage msgRequest = new HttpRequestMessage(remoteUri);
- // If the file being served has other URIs in it, like say images,
+ URL url_connect = new URL(remoteUrl + remoteUri);
+ Callback callback = new Callback(event.getHttpServletResponse(), cometId);
+ //Callback callback = new Callback(event, cometId);
+ HttpRequestMessage msgRequest = new HttpRequestMessage(url_connect, callback);
+
+ // If the file being served has other URIs in it, like say images,
// subsequent calls are made to the remote app to retrieve those.
// We don't want to set new delay times and status codes then.
if (remoteUri.endsWith("page")) {
Integer[] params = generateRandomParams();
msgRequest.setParameter("sessionId", cometId);
- msgRequest.setParameter("delay", params[0].toString());
- msgRequest.setParameter("code", params[1].toString());
-
- System.out.println("sessionId:" + cometId + "; delay:"
+ msgRequest.setParameter("delay", params[0].toString());
+ msgRequest.setParameter("code", params[1].toString());
+ msgRequest.setTimeOut(1500);
+
+ System.out.println("sessionId:" + cometId + "; delay:"
+ params[0] + "; code:" + params[1]);
}
- else {
+ else {
System.out.println("msg request is " + msgRequest.getPath());
}
-
- msgRequest.setRequestMethod(HttpRequestMessage.REQUEST_GET);
- URL url_connect = new URL(remoteUrl);
-
- AsyncHttpClient ahc = new AsyncHttpClient(url_connect, callback, 2400, 1000);
+ msgRequest.setRequestMethod(HttpRequestMessage.REQUEST_GET);
+
try {
- ahc.connect();
- ahc.sendRequest(msgRequest);
+ callback.setTime(new Date().getTime());
+ ahc.sendRequest(msgRequest);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
- System.out.println("Event processed");
+ else if (event.getEventType() == CometEvent.EventType.ERROR) {
+ event.close();
+ }
+ else if (event.getEventType() == CometEvent.EventType.END) {
+ event.close();
+ }
}
+ /**
+ * @return
+ */
protected Integer[] generateRandomParams() {
Integer[] params = new Integer[2];
final int[] codes = new int[] { 200, 302, 403, 404, 500 };
@@ -100,7 +124,7 @@
Random generator = new Random();
// generate a random delay between 10ms and 250 ms
- int delay = generator.nextInt(2500) + 10;
+ int delay = generator.nextInt(2000) + 10;
params[0] = new Integer(delay);
// generate randomly one of http status codes.
Modified: geronimo/samples/trunk/samples/async-http/http-local-app/src/main/java/org/apache/geronimo/BlockingServlet.java
URL: http://svn.apache.org/viewvc/geronimo/samples/trunk/samples/async-http/http-local-app/src/main/java/org/apache/geronimo/BlockingServlet.java?rev=579443&r1=579442&r2=579443&view=diff
==============================================================================
--- geronimo/samples/trunk/samples/async-http/http-local-app/src/main/java/org/apache/geronimo/BlockingServlet.java (original)
+++ geronimo/samples/trunk/samples/async-http/http-local-app/src/main/java/org/apache/geronimo/BlockingServlet.java Tue Sep 25 20:24:10 2007
@@ -90,7 +90,7 @@
Random generator = new Random();
// generate a random delay between 10ms and 250 ms
- int delay = generator.nextInt(2500) + 10;
+ int delay = generator.nextInt(2000) + 10;
params[0] = new Integer(delay);
// generate randomly one of http status codes.
Modified: geronimo/samples/trunk/samples/async-http/http-local-app/src/main/java/org/apache/geronimo/Callback.java
URL: http://svn.apache.org/viewvc/geronimo/samples/trunk/samples/async-http/http-local-app/src/main/java/org/apache/geronimo/Callback.java?rev=579443&r1=579442&r2=579443&view=diff
==============================================================================
--- geronimo/samples/trunk/samples/async-http/http-local-app/src/main/java/org/apache/geronimo/Callback.java (original)
+++ geronimo/samples/trunk/samples/async-http/http-local-app/src/main/java/org/apache/geronimo/Callback.java Tue Sep 25 20:24:10 2007
@@ -12,57 +12,74 @@
import org.apache.ahc.AsyncHttpClientCallback;
import org.apache.ahc.codec.HttpResponseMessage;
-import org.apache.catalina.CometEvent;
public class Callback implements AsyncHttpClientCallback {
private boolean timeout = false;
private boolean closed = false;
private boolean exception = false;
private Throwable throwable = null;
- private CometEvent event = null;
+ private HttpServletResponse response;
private HttpResponseMessage message;
+ private long time;
+ private String sessionId;
- public Callback(CometEvent event) {
- this.event = event;
+ public Callback(HttpServletResponse response, String sessionId) {
+ this.response = response;
+ this.sessionId = sessionId;
clear();
}
-
- public void onResponse(HttpResponseMessage message) {
- this.message = message;
-
- HttpServletResponse response = event.getHttpServletResponse();
- HttpResponseMessage msg = getMessage();
- response.setStatus(msg.getStatusCode());
- response.setContentType(msg.getContentType());
- response.setContentLength(msg.getContentLength());
- OutputStream out = null;
- try {
- out = response.getOutputStream();
- out.write(msg.getContent());
- out.flush();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+
+ /**
+ * @param time
+ */
+ public void setTime(long time){
+ this.time = time;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.ahc.AsyncHttpClientCallback#onResponse(org.apache.ahc.codec.HttpResponseMessage)
+ */
+ public void onResponse(HttpResponseMessage msg) {
+ System.out.println(" onResponse()" + " - Status:" + msg.getStatusCode() + " - Length:" + msg.getContentLength() + " " + sessionId);
+
+ if (timeout) {
+ System.out.println(" Already responded to timeout " + sessionId);
+ return;
+ }
+
+ response.setStatus(msg.getStatusCode());
+ response.setContentType(msg.getContentType());
+ if (msg.getContentLength() > 0) {
+ response.setContentLength(msg.getContentLength());
+ OutputStream out = null;
+ try {
+ out = response.getOutputStream();
+ out.write(msg.getContent());
+ out.flush();
+ out.close();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
}
-
- closeEvent();
+ System.out.println(" Responded to " + sessionId + " in " + (new Date().getTime() - this.time));
}
public void onException(Throwable cause) {
throwable = cause;
exception = true;
- // closeEvent();
+ System.out.println(" Exception by " + sessionId + " in " + (new Date().getTime() - this.time));
+ cause.printStackTrace();
}
- public void onClosed() {
- closed = true;
- closeEvent();
+ public void onClosed() {
+ closed = true;
}
- public void onTimeout() {
+ public void onTimeout() {
timeout = true;
- HttpServletResponse response = event.getHttpServletResponse();
- try {
+ try {
response.setContentType("text/plain");
response.setStatus(HttpServletResponse.SC_REQUEST_TIMEOUT);
PrintWriter out = response.getWriter();
@@ -73,17 +90,9 @@
// TODO Auto-generated catch block
e.printStackTrace();
}
- closeEvent();
+ System.out.println(" Timed out " + sessionId + " in " + (new Date().getTime() - this.time));
}
- protected void closeEvent() {
- try {
- event.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
public Throwable getThrowable() {
return throwable;
Modified: geronimo/samples/trunk/samples/async-http/http-local-app/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/geronimo/samples/trunk/samples/async-http/http-local-app/src/main/webapp/WEB-INF/web.xml?rev=579443&r1=579442&r2=579443&view=diff
==============================================================================
--- geronimo/samples/trunk/samples/async-http/http-local-app/src/main/webapp/WEB-INF/web.xml (original)
+++ geronimo/samples/trunk/samples/async-http/http-local-app/src/main/webapp/WEB-INF/web.xml Tue Sep 25 20:24:10 2007
@@ -13,7 +13,7 @@
<servlet-class>org.apache.geronimo.AsyncServlet</servlet-class>
<init-param>
<param-name>remoteUrl</param-name>
- <param-value>http://puffyshirt:8080</param-value>
+ <param-value>http://festivus:8080</param-value>
</init-param>
</servlet>
@@ -29,7 +29,7 @@
<servlet-class>org.apache.geronimo.BlockingServlet</servlet-class>
<init-param>
<param-name>remoteUrl</param-name>
- <param-value>http://puffyshirt:8080</param-value>
+ <param-value>http://festivus:8080</param-value>
</init-param>
</servlet>
Modified: geronimo/samples/trunk/samples/async-http/http-remote-app/src/main/java/org/apache/geronimo/PageServlet.java
URL: http://svn.apache.org/viewvc/geronimo/samples/trunk/samples/async-http/http-remote-app/src/main/java/org/apache/geronimo/PageServlet.java?rev=579443&r1=579442&r2=579443&view=diff
==============================================================================
--- geronimo/samples/trunk/samples/async-http/http-remote-app/src/main/java/org/apache/geronimo/PageServlet.java (original)
+++ geronimo/samples/trunk/samples/async-http/http-remote-app/src/main/java/org/apache/geronimo/PageServlet.java Tue Sep 25 20:24:10 2007
@@ -18,8 +18,11 @@
public class PageServlet extends HttpServlet {
static final long serialVersionUID = 1L;
+ /* (non-Javadoc)
+ * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
+ */
protected void doGet(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
+ HttpServletResponse response) throws ServletException, IOException {
String cometId = request.getParameter("sessionId");
String delay = request.getParameter("delay");
@@ -36,20 +39,20 @@
e.printStackTrace();
}
+
String uri = "dummy.html";
- if (codeStr.equals("200")) {
-
- }
+
int code = Integer.parseInt(codeStr);
switch (code) {
case 200: request.getRequestDispatcher(uri).forward(request, response); break;
- case 302: response.sendRedirect(uri);
- break;
+ case 302:
+ response.sendRedirect("http://" + request.getServerName() + ":" + request.getLocalPort() + request.getContextPath() + "/" + uri);
+ break;
case 403:
case 404:
- case 500: response.sendError(code);
+ case 500: response.sendError(code, codeStr);
/*try {
int test = 1/0;
}