A couple of bugfixes.
[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(ServletConfig cfg) 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         ServerContext ctx = J2eeContext.create(cfg);
35         String tgn;
36         if(ctx.name() != null)
37             tgn = "JSvc service for " + ctx.name();
38         else
39             tgn = "JSvc service";
40         tg = new ThreadContext(null, tgn, ctx, bc);
41     }
42     
43     public void destroy() {
44         tg.shutdown();
45     }
46     
47     public void service(HttpServletRequest req, HttpServletResponse resp) {
48         try {
49             req.setCharacterEncoding("UTF-8");
50             resp.setCharacterEncoding("UTF-8");
51         } catch(UnsupportedEncodingException e) {
52             throw(new Error(e));
53         }
54         Request rr = new J2eeRequest(getServletConfig(), req, resp);
55         RequestThread w = tg.respond(rr);
56         w.start();
57         try {
58             w.join();
59         } catch(InterruptedException e) {
60             w.interrupt();
61             return;
62         }
63     }
64 }