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 }