1 package dolda.jsvc.util;
8 public class JarContext implements ServerContext {
9 private final long ctime;
10 private final String name;
11 public final ClassLoader loader;
12 protected final Properties sysconfig, libconfig;
14 private static String mangle(File f) {
15 String ret = f.getName();
16 int p = ret.lastIndexOf('.');
18 ret = ret.substring(0, p);
19 for(f = f.getParentFile(); f != null; f = f.getParentFile())
20 ret = f.getName() + "/" + ret;
24 private void loadconfig() {
26 InputStream pi = loader.getResourceAsStream("jsvc.properties");
34 } catch(IOException e) {
39 public Class<?> findboot() {
40 String clnm = libconfig("jsvc.bootstrap", null);
45 bc = loader.loadClass(clnm);
46 } catch(ClassNotFoundException e) {
52 public JarContext(ClassLoader cl, String name) {
53 this.ctime = System.currentTimeMillis();
56 sysconfig = new Properties();
57 libconfig = new Properties();
62 private static URL makingmewanttokilljavac(File jar) {
64 return(jar.toURI().toURL());
65 } catch(MalformedURLException e) {
66 throw(new RuntimeException(e));
70 public JarContext(File jar) {
71 this(new URLClassLoader(new URL[] {makingmewanttokilljavac(jar)}, JarContext.class.getClassLoader()), mangle(jar));
74 public long starttime() {
78 public String name() {
82 public String sysconfig(String key, String def) {
83 return(sysconfig.getProperty(key, def));
86 public String libconfig(String key, String def) {
87 return(libconfig.getProperty(key, def));
90 public RequestThread worker(Responder root, Request req, ThreadGroup tg, String name) {
91 return(new RequestThread(root, req, tg, name));