Commit | Line | Data |
---|---|---|
13e578b1 FT |
1 | package dolda.jsvc.scgi; |
2 | ||
3 | import java.io.*; | |
22779185 | 4 | import java.net.*; |
13e578b1 FT |
5 | import dolda.jsvc.*; |
6 | import dolda.jsvc.util.*; | |
7 | ||
22779185 | 8 | public 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 | } |