Added some JMX support.
[jsvc.git] / src / dolda / jsvc / scgi / DSContext.java
1 package dolda.jsvc.scgi;
2
3 import java.io.*;
4 import java.net.*;
5 import dolda.jsvc.*;
6 import dolda.jsvc.util.*;
7
8 public class DSContext extends SimpleContext {
9     public final long mtime;
10     public final ThreadContext tg;
11     private final Environment env;
12     public final dolda.jsvc.jmx.Context mbean;
13
14     private static String mangle(File f) {
15         String ret = f.getName();
16         int p = ret.lastIndexOf('.');
17         if(p > 0)
18             ret = ret.substring(0, p);
19         for(f = f.getParentFile(); f != null; f = f.getParentFile())
20             ret = f.getName() + "/" + ret;
21         return(ret);
22     }
23
24     private static URL makingmewanttokilljavac(File jar) {
25         try {
26             return(jar.toURI().toURL());
27         } catch(MalformedURLException e) {
28             throw(new RuntimeException(e));
29         }
30     }
31
32     public DSContext(File jar, Environment env) throws ThreadContext.CreateException {
33         super(URLClassLoader.newInstance(new URL[] {makingmewanttokilljavac(jar)}, env.libloader()), mangle(jar));
34         this.mtime = jar.lastModified();
35         this.env = env;
36         loadconfig();
37         this.tg = ThreadContext.create(this, loader);
38         mbean = new dolda.jsvc.jmx.Context(tg);
39     }
40     
41     private void loadconfig() {
42         if(env.root != null) {
43             File sroot = new File(new File(env.root, "store"), name());
44             sysconfig.put("jsvc.storage", "file:" + sroot.getPath());
45         }
46         sysconfig.putAll(env.sysconfig);
47     }
48     
49     public RequestThread worker(Responder root, Request req, ThreadGroup tg, String name) {
50         java.net.Socket sk = ((ScgiRequest)req).sk;
51         if(req.path().equals("")) {
52             return(new ScgiReqThread(new RootRedirect(""), req, tg, name, sk));
53         } else {
54             return(new ScgiReqThread(root, RequestWrap.chpath(req, req.path().substring(1)), tg, name, sk));
55         }
56     }
57 }