Added some JMX support.
[jsvc.git] / src / dolda / jsvc / scgi / DSContext.java
CommitLineData
13e578b1
FT
1package dolda.jsvc.scgi;
2
3import java.io.*;
22779185 4import java.net.*;
13e578b1
FT
5import dolda.jsvc.*;
6import dolda.jsvc.util.*;
7
22779185 8public class DSContext extends SimpleContext {
13e578b1 9 public final long mtime;
13e578b1 10 public final ThreadContext tg;
22779185 11 private final Environment env;
32994173 12 public final dolda.jsvc.jmx.Context mbean;
13e578b1 13
22779185
FT
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));
13e578b1 34 this.mtime = jar.lastModified();
22779185 35 this.env = env;
13e578b1
FT
36 loadconfig();
37 this.tg = ThreadContext.create(this, loader);
32994173 38 mbean = new dolda.jsvc.jmx.Context(tg);
13e578b1
FT
39 }
40
41 private void loadconfig() {
7f4f5d6a
FT
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 }
22779185 46 sysconfig.putAll(env.sysconfig);
13e578b1
FT
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}