A couple of bugfixes.
[jsvc.git] / src / dolda / jsvc / j2ee / Servlet.java
index d050c01..d726474 100644 (file)
@@ -1,14 +1,47 @@
 package dolda.jsvc.j2ee;
 
 import dolda.jsvc.*;
+import java.lang.reflect.*;
+import java.util.*;
 import java.io.*;
 import javax.servlet.http.*;
+import javax.servlet.*;
 
 public class Servlet extends HttpServlet {
-    private Responder root;
+    private ThreadContext tg;
+
+    public void init(ServletConfig cfg) throws ServletException {
+       Properties sprop = new Properties();
+       try {
+           InputStream pi = Servlet.class.getClassLoader().getResourceAsStream("jsvc.properties");
+           try {
+               sprop.load(pi);
+           } finally {
+               pi.close();
+           }
+       } catch(IOException e) {
+           throw(new Error(e));
+       }
+       String clnm = (String)sprop.get("jsvc.bootstrap");
+       if(clnm == null)
+           throw(new ServletException("No JSvc bootstrapper specified"));
+       Class<?> bc;
+       try {
+           bc = Class.forName(clnm);
+       } catch(ClassNotFoundException e) {
+           throw(new ServletException("Invalid JSvc bootstrapper specified", e));
+       }
+       ServerContext ctx = J2eeContext.create(cfg);
+       String tgn;
+       if(ctx.name() != null)
+           tgn = "JSvc service for " + ctx.name();
+       else
+           tgn = "JSvc service";
+       tg = new ThreadContext(null, tgn, ctx, bc);
+    }
     
-    public void init() {
-       
+    public void destroy() {
+       tg.shutdown();
     }
     
     public void service(HttpServletRequest req, HttpServletResponse resp) {
@@ -19,6 +52,13 @@ public class Servlet extends HttpServlet {
            throw(new Error(e));
        }
        Request rr = new J2eeRequest(getServletConfig(), req, resp);
-       root.respond(rr);
+       RequestThread w = tg.respond(rr);
+       w.start();
+       try {
+           w.join();
+       } catch(InterruptedException e) {
+           w.interrupt();
+           return;
+       }
     }
 }