| 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 | } |