You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ja...@apache.org on 2008/05/12 16:00:15 UTC

svn commit: r655505 - 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: jawarner
Date: Mon May 12 07:00:15 2008
New Revision: 655505

URL: http://svn.apache.org/viewvc?rev=655505&view=rev
Log:
GERONIMO-4007 : Fixes for errors when under heavy stress

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/java/org/apache/geronimo/Utils.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=655505&r1=655504&r2=655505&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 Mon May 12 07:00:15 2008
@@ -17,6 +17,7 @@
 package org.apache.geronimo;
 
 import java.io.IOException;
+import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.net.URL;
 import java.util.concurrent.ExecutorService;
@@ -30,6 +31,7 @@
 
 import org.apache.ahc.AsyncHttpClient;
 import org.apache.ahc.codec.HttpRequestMessage;
+import org.apache.ahc.codec.HttpResponseMessage;
 import org.apache.ahc.codec.SessionCache;
 import org.apache.ahc.util.MonitoringEvent;
 import org.apache.ahc.util.TimeMonitor;
@@ -65,6 +67,7 @@
 
         threadPool = Executors.newCachedThreadPool();
         sessionCache = new SessionCache(); 
+
         ahc = new AsyncHttpClient(threadPool, null);
         // enable connection reuse
         ahc.setSessionCache(sessionCache); 
@@ -84,84 +87,107 @@
      * @throws ServletException
      */
     public void event(CometEvent event) throws IOException, ServletException {
+        
+        HttpServletResponse eventResponse = event.getHttpServletResponse();
         HttpServletRequest request = event.getHttpServletRequest();
-
-        String cometId = request.getSession(true).getId();
-        System.out.println("");
-        System.out.println("sessionId: " + cometId + " "
-                + event.getEventType().toString());
-
+        boolean debug = Boolean.parseBoolean(request.getParameter("debug"));
+        boolean shortCircuit = Boolean.parseBoolean(request.getParameter("shortCircuit"));
+        String cometId = null;
+        
         if (event.getEventType() == CometEvent.EventType.BEGIN) {
-            boolean dumpStats = request.getParameter("dump") != null;
-            if (dumpStats) {
-                dumpStats(event.getHttpServletResponse());
-                return;
-            }
-            
-            event.getHttpServletRequest().setAttribute(
-                    "org.apache.tomcat.comet.timeout", new Integer(5 * 1000));
-            event.setTimeout(5 * 1000);
-
-            // TODO this doesn't look thread safe...
-            if (request.getParameter("remoteUrl") != null) {
-                remoteUrl = request.getParameter("remoteUrl");        
-            }
-
-            String remoteUri = request.getParameter("remoteUri");
-            if (remoteUri == null) {
-                remoteUri = "/remoteApp/page";
-            }
-            
-            URL url_connect = new URL(remoteUrl + remoteUri);       
-            HttpServletResponse eventResponse = event.getHttpServletResponse();
-            eventResponse.flushBuffer();
-            Callback callback = new Callback(eventResponse, 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")) {
-                msgRequest.setParameter("sessionId", cometId);
+            if (!shortCircuit) {
+    
+                cometId = request.getSession(true).getId();
+                if(debug) {
+                    System.out.println();
+                    System.out.println("Event type: " + event.getEventType().toString() + " Session ID: " + cometId + "\n Request:" + request + " Response: " + eventResponse);
+                }
+                boolean dumpStats = request.getParameter("dump") != null;
+                if (dumpStats) {
+                    dumpStats(event.getHttpServletResponse());
+                    return;
+                }
                 
-                int delayInt = 0;
-                String delay = request.getParameter("delay");
-                if (delay != null) {
-                    delayInt = Integer.parseInt(delay);
-                } else {
-                    delayInt = Utils.generateRandomDelay();
-                    delay = String.valueOf(delayInt);
+                event.getHttpServletRequest().setAttribute(
+                        "org.apache.tomcat.comet.timeout", new Integer(15 * 1000));
+    
+                // TODO this doesn't look thread safe...
+                if (request.getParameter("remoteUrl") != null) {
+                    remoteUrl = request.getParameter("remoteUrl");        
+                }
+    
+                String remoteUri = request.getParameter("remoteUri");
+                if (remoteUri == null) {
+                    remoteUri = "/remoteApp/page";
                 }
                 
-                String code = request.getParameter("code") == null ?
-                        String.valueOf(Utils.generateRandomCode()) : 
-                        request.getParameter("code");
+                URL url_connect = new URL(remoteUrl + remoteUri);       
+                eventResponse.flushBuffer();
+                Callback callback = new Callback(eventResponse, cometId, debug);
+                //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")) {
+                    msgRequest.setParameter("sessionId", cometId);
+                    
+                    int delayInt = 0;
+                    String delay = request.getParameter("delay");
+                    if (delay != null) {
+                        delayInt = Integer.parseInt(delay);
+                    } else {
+                        delayInt = Utils.generateRandomDelay();
+                        delay = String.valueOf(delayInt);
+                    }
+                    
+                    String code = request.getParameter("code") == null ?
+                            String.valueOf(Utils.generateRandomCode()) : 
+                            request.getParameter("code");
+                    
+                    msgRequest.setParameter("delay", delay);
+                    msgRequest.setParameter("code", code);
+                    msgRequest.setTimeOut(delayInt + 15000);
+                    if (debug) {
+                        System.out.println("sessionId: " + cometId + "; delay: "
+                            + delay + "; code: " + code);
+                    }
+                } else {
+                    System.out.println("msg request is " + msgRequest.getPath());
+                }
+    
+                msgRequest.setRequestMethod(HttpRequestMessage.REQUEST_GET);            
                 
-                msgRequest.setParameter("delay", delay);
-                msgRequest.setParameter("code", code);
-                msgRequest.setTimeOut(delayInt + 1000);
-
-                System.out.println("sessionId: " + cometId + "; delay: "
-                        + delay + "; code: " + code);
-            } else {
-                System.out.println("msg request is " + msgRequest.getPath());
+                try {
+                    callback.setTime(System.nanoTime());
+                    ahc.sendRequest(msgRequest);
+                    //System.out.println("sessionId: " + cometId + " with request " + msgRequest + " sent");
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    // send an error response using the callback
+                    callback.onException(e);
+                    event.close();
+                }
+            } else {                
+                synchronized(eventResponse) {
+                    event.close();
+                }
             }
-
-            msgRequest.setRequestMethod(HttpRequestMessage.REQUEST_GET);            
-            
-            try {
-                callback.setTime(System.nanoTime());
-                ahc.sendRequest(msgRequest);
-            } catch (Exception e) {
-                e.printStackTrace();
-                // send an error response using the callback
-                callback.onException(e);
+        } else if (event.getEventType() == CometEvent.EventType.ERROR) {
+            if (debug) {    
+                System.out.println("Event type: " + event.getEventType().toString() + " Session ID: " + cometId + "\n Request:" + request + " Response: " + eventResponse);
+            }
+            synchronized(eventResponse) {
                 event.close();
             }
-        } else if (event.getEventType() == CometEvent.EventType.ERROR) {
-            event.close();
         } else if (event.getEventType() == CometEvent.EventType.END) {
-            event.close();
+            if (debug) {
+                System.out.println("Event type: " + event.getEventType().toString() + " Session ID: " + cometId + "\n Request:" + request + " Response: " + eventResponse);
+            }
+            synchronized(eventResponse) {
+                event.close();
+            }
         }
     }
     
@@ -179,5 +205,5 @@
         out.println("response time: " + monitor.getAverageResponseTime());
         out.println("connect time: " + monitor.getAverageConnectTime());
         out.close();
-    }
+    } 
 }

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=655505&r1=655504&r2=655505&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 Mon May 12 07:00:15 2008
@@ -19,6 +19,7 @@
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.net.URL;
 
@@ -56,52 +57,62 @@
      */
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws IOException, ServletException {
-
-        System.out.println("");
-        System.out.println("Inside BlockingServlet.doGet()");
-
-        String sessionId = request.getSession(true).getId();
-
-        if (request.getParameter("remoteUrl") != null) {
-            remoteUrl = request.getParameter("remoteUrl");
+        
+        boolean debug = Boolean.parseBoolean(request.getParameter("debug"));
+        boolean shortCircuit = Boolean.parseBoolean(request.getParameter("shortCircuit"));
+        if (debug) {
+            System.out.println("");
+            System.out.println("Inside BlockingServlet.doGet()");
         }
-
-        String remoteUri = request.getParameter("remoteUri");
-        if (remoteUri == null) {
-            remoteUri = "/remoteApp/page";
-        }       
-
-        String delay = request.getParameter("delay") == null ?
-                String.valueOf(Utils.generateRandomDelay()) :
-                request.getParameter("delay");
         
-        String code = request.getParameter("code") == null ?
-                String.valueOf(Utils.generateRandomCode()) : 
-                request.getParameter("code");
-        System.out.println("sessionId: " + sessionId + "; delay: " + delay + "; code: " + code);
+        String sessionId = request.getSession(true).getId();
 
-        String url_string = remoteUrl + remoteUri + "?sessionId=" + sessionId + "&delay=" + delay + "&code=" + code;        
-        URL url_connect = new URL(url_string);
-        
-        try {
-            BufferedReader input = new BufferedReader(new InputStreamReader(url_connect.openStream()));
-            String line = "";                       
-            response.setContentType("text/html");
-            PrintWriter out = response.getWriter();         
-            while ((line = input.readLine()) != null) {             
-                out.println(line);
+
+        if (!shortCircuit) {
+            if (request.getParameter("remoteUrl") != null) {
+                remoteUrl = request.getParameter("remoteUrl");
             }
-            out.flush();
-            out.close();
-            input.close();
-        }
-        catch(IOException ex) {
-            response.sendError(Integer.parseInt(code));         
+    
+            String remoteUri = request.getParameter("remoteUri");
+            if (remoteUri == null) {
+                remoteUri = "/remoteApp/page";
+            }       
+    
+            String delay = request.getParameter("delay") == null ?
+                    String.valueOf(Utils.generateRandomDelay()) :
+                    request.getParameter("delay");
+            
+            String code = request.getParameter("code") == null ?
+                    String.valueOf(Utils.generateRandomCode()) : 
+                    request.getParameter("code");
+            if (debug) {        
+                System.out.println("sessionId:" + sessionId + "; delay:" + delay + "; code:" + code);
+            }
+            
+            String url_string = remoteUrl + remoteUri + "?sessionId=" + sessionId + "&delay=" + delay + "&code=" + code;        
+            URL url_connect = new URL(url_string);
+            
+            try {
+                BufferedReader input = new BufferedReader(new InputStreamReader(url_connect.openStream()));
+                String line = "";                       
+                response.setContentType("text/html");
+                PrintWriter out = response.getWriter();         
+                while ((line = input.readLine()) != null) {             
+                    out.println(line);
+                }
+                out.flush();
+                out.close();
+                input.close();
+            }
+            catch(IOException ex) {
+                response.sendError(Integer.parseInt(code));         
+            }
+        } else {
+            return;
         }
         
-
-        System.out.println("doGet processed");
+        if (debug) {
+            System.out.println("doGet processed");
+        }
     }
-
-    
-}
+}
\ No newline at end of file

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=655505&r1=655504&r2=655505&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 Mon May 12 07:00:15 2008
@@ -18,7 +18,6 @@
 
 import java.io.IOException;
 import java.io.OutputStream;
-import java.io.PrintWriter;
 import java.util.Date;
 import java.util.concurrent.atomic.AtomicBoolean;
 
@@ -30,6 +29,7 @@
 public class Callback implements AsyncHttpClientCallback {
     private final HttpServletResponse response;
     private final String sessionId;
+    private final boolean debug;
     
     private final AtomicBoolean handled = new AtomicBoolean(false);
     
@@ -39,9 +39,10 @@
     // in nanoseconds
     private volatile long time;
 
-    public Callback(HttpServletResponse response, String sessionId) {
+    public Callback(HttpServletResponse response, String sessionId, boolean debug) {
         this.response = response;
         this.sessionId = sessionId;
+        this.debug = debug;
         clear();
     }
     
@@ -56,33 +57,38 @@
     /* (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);
-        
+    public synchronized void onResponse(HttpResponseMessage msg) {
+        if (debug) {
+            System.out.println("  onResponse()" + " - Status:" + msg.getStatusCode() + " - Length:" + msg.getContentLength() + " " + sessionId);
+        }
         if (!handled.compareAndSet(false, true)) {
             System.out.println("already responded to another callback method " + 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();
+        synchronized(response) {
+            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 (Exception e) {
+                    // TODO Auto-generated catch block
+                    e.printStackTrace();
+                }
             }
         }
-        System.out.println("  Responded to " + sessionId + " in " + (System.nanoTime() - this.time)/1000000);
+        if (debug) {
+            System.out.println("  Responded to " + sessionId + " in " + (System.nanoTime() - this.time)/1000000);
+        }
     }
 
-    public void onException(Throwable cause) {
+    public synchronized void onException(Throwable cause) {
         throwable = cause;
         System.out.println("  Exception by " + sessionId + " in " + (System.nanoTime() - this.time)/1000000);       
         cause.printStackTrace();    
@@ -94,7 +100,7 @@
         sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "exception occurred");
     }
 
-    public void onClosed() {
+    public synchronized void onClosed() {
         // if the response has not been received, this is an error: need to write a response
         if (!handled.get()) {
             sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Connection to the remote URL unexpectedly closed");
@@ -102,7 +108,7 @@
         }
     }
 
-    public void onTimeout() {
+    public synchronized void onTimeout() {
         System.out.println("  Timed out " + sessionId + " in " + (System.nanoTime() - this.time)/1000000);
         if (!handled.compareAndSet(false, true)) {
             System.out.println("already responded to another callback method " + sessionId);
@@ -112,15 +118,22 @@
         sendError(HttpServletResponse.SC_REQUEST_TIMEOUT, "Request Timed out!\n" + new Date().toString());
     }
     
-    private void sendError(int status, String msg) {
-        try {
-            response.setContentType("text/plain");
-            response.setStatus(status);
-            PrintWriter out = response.getWriter();
-            out.println(msg);
-            out.close();
-        } catch (IOException e) {
-            e.printStackTrace();
+    private synchronized void sendError(int status, String msg) {
+        synchronized(response) {
+            try {
+                if (response.isCommitted()) {
+                    System.out.println("already responded to another callback method " + sessionId);
+                    return;
+                }
+                response.setContentType("text/plain");
+                response.setStatus(status);
+                OutputStream out = response.getOutputStream();
+                out.write(msg.getBytes());
+                out.flush();
+                out.close();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
         }
     }
 

Modified: geronimo/samples/trunk/samples/async-http/http-local-app/src/main/java/org/apache/geronimo/Utils.java
URL: http://svn.apache.org/viewvc/geronimo/samples/trunk/samples/async-http/http-local-app/src/main/java/org/apache/geronimo/Utils.java?rev=655505&r1=655504&r2=655505&view=diff
==============================================================================
--- geronimo/samples/trunk/samples/async-http/http-local-app/src/main/java/org/apache/geronimo/Utils.java (original)
+++ geronimo/samples/trunk/samples/async-http/http-local-app/src/main/java/org/apache/geronimo/Utils.java Mon May 12 07:00:15 2008
@@ -1,5 +1,5 @@
 /**
- * Licensed to the Apache Software Foundation (ASF) under one or more
+ * 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

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=655505&r1=655504&r2=655505&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 Mon May 12 07:00:15 2008
@@ -1,55 +1,55 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <web-app id="web-app_1" 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"
-	version="2.4">
-	<display-name>ServerApp</display-name>
-	<distributable />
-
-	<servlet>
-		<display-name>AsyncServlet</display-name>
-		<servlet-name>AsyncServlet</servlet-name>
-		<servlet-class>org.apache.geronimo.AsyncServlet</servlet-class>
+    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"
+    version="2.4">
+    <display-name>ServerApp</display-name>
+    <distributable />
+
+    <servlet>
+        <display-name>AsyncServlet</display-name>
+        <servlet-name>AsyncServlet</servlet-name>
+        <servlet-class>org.apache.geronimo.AsyncServlet</servlet-class>
         <init-param>
-			<param-name>remoteUrl</param-name>
-			<param-value>http://festivus:8080</param-value>
-  	    </init-param>      
-	</servlet>
-
-	<servlet-mapping>
-		<servlet-name>AsyncServlet</servlet-name>
-		<url-pattern>/async</url-pattern>
-	</servlet-mapping>
+            <param-name>remoteUrl</param-name>
+            <param-value>http://festivus:8080</param-value>
+        </init-param>      
+    </servlet>
+
+    <servlet-mapping>
+        <servlet-name>AsyncServlet</servlet-name>
+        <url-pattern>/async</url-pattern>
+    </servlet-mapping>
 
     <servlet>
-		<display-name>BlockingServlet</display-name>
-		<servlet-name>BlockingServlet</servlet-name>
-		<servlet-class>org.apache.geronimo.BlockingServlet</servlet-class>
+        <display-name>BlockingServlet</display-name>
+        <servlet-name>BlockingServlet</servlet-name>
+        <servlet-class>org.apache.geronimo.BlockingServlet</servlet-class>
         <init-param>
-			<param-name>remoteUrl</param-name>
-			<param-value>http://festivus:8080</param-value>
-  	    </init-param>      
-	</servlet>
-
-	<servlet-mapping>
-		<servlet-name>BlockingServlet</servlet-name>
-		<url-pattern>/sync</url-pattern>
-	</servlet-mapping>
+            <param-name>remoteUrl</param-name>
+            <param-value>http://festivus:8080</param-value>
+        </init-param>      
+    </servlet>
+
+    <servlet-mapping>
+        <servlet-name>BlockingServlet</servlet-name>
+        <url-pattern>/sync</url-pattern>
+    </servlet-mapping>
 
      <servlet>
-		<display-name>NIOServlet</display-name>
-		<servlet-name>NIOServlet</servlet-name>
-		<servlet-class>org.apache.geronimo.NIOServlet</servlet-class>
+        <display-name>NIOServlet</display-name>
+        <servlet-name>NIOServlet</servlet-name>
+        <servlet-class>org.apache.geronimo.NIOServlet</servlet-class>
         <init-param>
-			<param-name>remoteUrl</param-name>
-			<param-value>festivus</param-value>
-  	    </init-param>      
-	</servlet>
-
-	<servlet-mapping>
-		<servlet-name>NIOServlet</servlet-name>
-		<url-pattern>/nio</url-pattern>
-	</servlet-mapping>
+            <param-name>remoteUrl</param-name>
+            <param-value>festivus</param-value>
+        </init-param>      
+    </servlet>
+
+    <servlet-mapping>
+        <servlet-name>NIOServlet</servlet-name>
+        <url-pattern>/nio</url-pattern>
+    </servlet-mapping>
 
 </web-app>

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=655505&r1=655504&r2=655505&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 Mon May 12 07:00:15 2008
@@ -16,53 +16,54 @@
  * 
  */
 public class PageServlet extends HttpServlet {
-	static final long serialVersionUID = 1L;
+    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 {
-		
-		String cometId = request.getParameter("sessionId");
-		String delay = request.getParameter("delay");
-		String codeStr = request.getParameter("code");
-		System.out.println("sessionId:" + cometId + "; delay:" + delay + "; code:" + codeStr);
-
-		try {
-			Thread.sleep(Integer.parseInt(delay));
-		} catch (NumberFormatException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (InterruptedException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-
-
-		String uri = "dummy.html";	
-
-		int code = Integer.parseInt(codeStr);
-		switch (code) {
-		case 200: request.getRequestDispatcher(uri).forward(request, response); break;
-		
-		case 302: 
+    /* (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 {
+        
+        String cometId = request.getParameter("sessionId");
+        String delay = request.getParameter("delay");
+        String codeStr = request.getParameter("code");
+        //Uncomment the following line to help with debugging
+        //System.out.println("sessionId:" + cometId + "; delay:" + delay + "; code:" + codeStr);
+
+        try {
+            Thread.sleep(Integer.parseInt(delay));
+        } catch (NumberFormatException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (InterruptedException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+
+
+        String uri = "dummy.html";  
+
+        int code = Integer.parseInt(codeStr);
+        switch (code) {
+        case 200: request.getRequestDispatcher(uri).forward(request, response); break;
+        
+        case 302: 
         response.sendRedirect("http://" + request.getServerName() + ":" + request.getLocalPort() + request.getContextPath() + "/" + uri);
-		    break;
-		
-		case 403:
-		case 404:
-		case 500: response.sendError(code, codeStr);
-			/*try  { 
-				int test = 1/0;
-			} 
-			catch (Exception e) {
-					throw new ServletException("Servlet caught a ServletException: " + e.getMessage()); 
-			}*/			
-			break;
-		}
-		
-		return;
-	}
+            break;
+        
+        case 403:
+        case 404:
+        case 500: response.sendError(code, codeStr);
+            /*try  { 
+                int test = 1/0;
+            } 
+            catch (Exception e) {
+                    throw new ServletException("Servlet caught a ServletException: " + e.getMessage()); 
+            }*/         
+            break;
+        }
+        
+        return;
+    }
 
 }
\ No newline at end of file