001    package org.apache.geronimo;
002    
003    import java.io.BufferedReader;
004    import java.io.IOException;
005    import java.io.InputStreamReader;
006    import java.io.PrintWriter;
007    import java.net.URL;
008    import java.util.Random;
009    
010    import javax.servlet.ServletException;
011    import javax.servlet.http.HttpServlet;
012    import javax.servlet.http.HttpServletRequest;
013    import javax.servlet.http.HttpServletResponse;
014    
015    /**
016     * Servlet implementation class for Servlet: AsyncServlet
017     * 
018     * @web.servlet name="AsyncServlet" display-name="AsyncServlet"
019     * 
020     * @web.servlet-mapping url-pattern="/async"
021     * 
022     */
023    public class BlockingServlet extends HttpServlet {
024            static final long serialVersionUID = 1L;
025    
026            private String remoteUrl;
027    
028            public void init() throws ServletException {
029                    getServletContext().log("getinit init");
030                    // Get the value of an initialization parameter
031                    remoteUrl = getServletConfig().getInitParameter("remoteUrl");
032            }
033    
034            /**
035             * Process the given Comet event.
036             * 
037             * @param event
038             *            The Comet event that will be processed
039             * @throws IOException
040             * @throws ServletException
041             */
042            public void doGet(HttpServletRequest request, HttpServletResponse response)
043                            throws IOException, ServletException {
044    
045                    System.out.println("");
046                    System.out.println("Inside BlockingServlet.doGet()");
047    
048                    String sessionId = request.getSession(true).getId();
049    
050                    if (request.getParameter("remoteUrl") != null) {
051                            remoteUrl = request.getParameter("remoteUrl");
052                    }
053    
054                    String remoteUri = request.getParameter("remoteUri");
055                    if (remoteUri == null) {
056                            remoteUri = "/remoteApp/page";
057                    }               
058    
059                    Integer[] params = generateRandomParams();
060                    System.out.println("sessionId:" + sessionId + "; delay:" + params[0]
061                                    + "; code:" + params[1]);
062    
063                    String url_string = remoteUrl + remoteUri + "?sessionId=" + sessionId + "&delay=" + params[0] + "&code=" + params[1];           
064                    URL url_connect = new URL(url_string);
065                    
066                    try {
067                            BufferedReader input = new BufferedReader(new InputStreamReader(url_connect.openStream()));
068                            String line = "";                                               
069                            response.setContentType("text/html");
070                            PrintWriter out = response.getWriter();                 
071                            while ((line = input.readLine()) != null) {                             
072                                    out.println(line);
073                            }
074                            out.flush();
075                            out.close();
076                            input.close();
077                    }
078                    catch(IOException ex) {
079                            response.sendError(params[1].intValue());                       
080                    }
081                    
082    
083                    System.out.println("doGet processed");
084            }
085    
086            protected Integer[] generateRandomParams() {
087                    Integer[] params = new Integer[2];
088                    final int[] codes = new int[] { 200, 302, 403, 404, 500 };
089    
090                    Random generator = new Random();
091    
092                    // generate a random delay between 10ms and 250 ms
093                    int delay = generator.nextInt(2000) + 10;
094                    params[0] = new Integer(delay);
095    
096                    // generate randomly one of http status codes.
097                    int index = generator.nextInt(codes.length);
098                    params[1] = new Integer(codes[index]);
099    
100                    return params;
101            }
102    
103    }