Made thread management more predictable.
[jsvc.git] / src / dolda / jsvc / j2ee / Servlet.java
1 package dolda.jsvc.j2ee;
2
3 import dolda.jsvc.*;
4 import java.lang.reflect.*;
5 import java.util.*;
6 import java.io.*;
7 import javax.servlet.http.*;
8 import javax.servlet.*;
9
10 public class Servlet extends HttpServlet {
11     private ThreadContext tg;
12
13     public void init() throws ServletException {
14         Properties sprop = new Properties();
15         try {
16             InputStream pi = Servlet.class.getClassLoader().getResourceAsStream("jsvc.properties");
17             try {
18                 sprop.load(pi);
19             } finally {
20                 pi.close();
21             }
22         } catch(IOException e) {
23             throw(new Error(e));
24         }
25         String clnm = (String)sprop.get("jsvc.bootstrap");
26         if(clnm == null)
27             throw(new ServletException("No JSvc bootstrapper specified"));
28         Class<?> bc;
29         try {
30             bc = Class.forName(clnm);
31         } catch(ClassNotFoundException e) {
32             throw(new ServletException("Invalid JSvc bootstrapper specified", e));
33         }
34         tg = new ThreadContext(null, "JSvc service", bc);
35         ServletContext ctx = getServletContext();
36         ctx.setAttribute("jsvc.starttime", System.currentTimeMillis());
37     }
38     
39     public void destroy() {
40         tg.shutdown();
41     }
42     
43     public void service(HttpServletRequest req, HttpServletResponse resp) {
44         try {
45             req.setCharacterEncoding("UTF-8");
46             resp.setCharacterEncoding("UTF-8");
47         } catch(UnsupportedEncodingException e) {
48             throw(new Error(e));
49         }
50         Request rr = new J2eeRequest(getServletConfig(), req, resp);
51         RequestThread w = tg.respond(rr);
52         w.start();
53         try {
54             w.join();
55         } catch(InterruptedException e) {
56             w.interrupt();
57             return;
58         }
59     }
60 }