View Javadoc

1   package org.apache.geronimo;
2   
3   import java.io.BufferedReader;
4   import java.io.IOException;
5   import java.io.InputStreamReader;
6   import java.io.PrintWriter;
7   import java.net.URL;
8   import java.util.Random;
9   
10  import javax.servlet.ServletException;
11  import javax.servlet.http.HttpServlet;
12  import javax.servlet.http.HttpServletRequest;
13  import javax.servlet.http.HttpServletResponse;
14  
15  /**
16   * Servlet implementation class for Servlet: AsyncServlet
17   * 
18   * @web.servlet name="AsyncServlet" display-name="AsyncServlet"
19   * 
20   * @web.servlet-mapping url-pattern="/async"
21   * 
22   */
23  public class BlockingServlet extends HttpServlet {
24  	static final long serialVersionUID = 1L;
25  
26  	private String remoteUrl;
27  
28  	public void init() throws ServletException {
29  		getServletContext().log("getinit init");
30  		// Get the value of an initialization parameter
31  		remoteUrl = getServletConfig().getInitParameter("remoteUrl");
32  	}
33  
34  	/**
35  	 * Process the given Comet event.
36  	 * 
37  	 * @param event
38  	 *            The Comet event that will be processed
39  	 * @throws IOException
40  	 * @throws ServletException
41  	 */
42  	public void doGet(HttpServletRequest request, HttpServletResponse response)
43  			throws IOException, ServletException {
44  
45  		System.out.println("");
46  		System.out.println("Inside BlockingServlet.doGet()");
47  
48  		String sessionId = request.getSession(true).getId();
49  
50  		if (request.getParameter("remoteUrl") != null) {
51  			remoteUrl = request.getParameter("remoteUrl");
52  		}
53  
54  		String remoteUri = request.getParameter("remoteUri");
55  		if (remoteUri == null) {
56  			remoteUri = "/remoteApp/page";
57  		}		
58  
59  		Integer[] params = generateRandomParams();
60  		System.out.println("sessionId:" + sessionId + "; delay:" + params[0]
61  				+ "; code:" + params[1]);
62  
63  		String url_string = remoteUrl + remoteUri + "?sessionId=" + sessionId + "&delay=" + params[0] + "&code=" + params[1];		
64  		URL url_connect = new URL(url_string);
65  		
66  		try {
67  			BufferedReader input = new BufferedReader(new InputStreamReader(url_connect.openStream()));
68  			String line = "";						
69  			response.setContentType("text/html");
70  			PrintWriter out = response.getWriter();			
71  			while ((line = input.readLine()) != null) {				
72  				out.println(line);
73  			}
74  			out.flush();
75  			out.close();
76  			input.close();
77  		}
78  		catch(IOException ex) {
79  			response.sendError(params[1].intValue());			
80  		}
81  		
82  
83  		System.out.println("doGet processed");
84  	}
85  
86  	protected Integer[] generateRandomParams() {
87  		Integer[] params = new Integer[2];
88  		final int[] codes = new int[] { 200, 302, 403, 404, 500 };
89  
90  		Random generator = new Random();
91  
92  		// generate a random delay between 10ms and 250 ms
93  		int delay = generator.nextInt(2000) + 10;
94  		params[0] = new Integer(delay);
95  
96  		// generate randomly one of http status codes.
97  		int index = generator.nextInt(codes.length);
98  		params[1] = new Integer(codes[index]);
99  
100 		return params;
101 	}
102 
103 }