Thread: [Simpleweb-Support] Multiple File Roots
Brought to you by:
niallg
From: Brian D. <wic...@gm...> - 2005-11-28 16:55:11
|
Hi I am using a FileContext with a LoaderEngine to set the 'root' of the web server. FileContext context =3D new FileContext(new File("webserverroot/"))= ; LoaderEngine engine =3D new LoaderEngine(context); This works just dandy.. but I would like to support the concept of multiple server roots... Do I have to rewrite the LoaderEngine to accomplish this? LoaderEngine engine =3D new LoaderEngine(); engine.addContext(new FileContext(new File("root1")); engine.addContext(new FileContext(new File("root2")); Also.. would be nice if the resolver tried to resolve in root1.. then root2.. then fail.. Any help would be much appreciated.. Thanks! Brian |
From: Niall G. <gal...@ya...> - 2005-11-28 17:40:30
|
Hi Brian, No, you do not have to rewrite the LoaderEngine to do this. What you can do is extend it in much the same way as the MapperEngine does. If you wish to add multiple paths to the classpath used by the loader engine then you can delegate to the following constructor. LoaderEngine(Context context, URL[] codebase); Simply add additional URLs in the form file:///a/b/c/path, etc. If you would like the Context to find files from multiple roots, then you should consider using the Locator. The locator performs a search for files from multiple locations. I typically use this for loading configuration files. The simple.http.serve.FileLocator is good for this. For example you could use: Locator loc = context.getLocator(); loc.getFile("/my/file.txt"); The file is searched for within all roots specified to the FileLocator. To increase the number of roots you can do the following: new FileLocator(new File[]{new File("root1"), new File("root2")}); Also you will have to extend the FileContext like follows: class MyFileContext extends FileContext { private Locator loc; public MyFileContext(File base, Locator loc) { super(base); this.loc = loc; } public Locator getLocator() { return loc; } } Hope this helps. Niall --- Brian Davis <wic...@gm...> wrote: > Hi > > I am using a FileContext with a LoaderEngine to set > the 'root' of the > web server. > > FileContext context = new FileContext(new > File("webserverroot/")); > > LoaderEngine engine = new > LoaderEngine(context); > > > This works just dandy.. but I would like to support > the concept of > multiple server roots... > > Do I have to rewrite the LoaderEngine to accomplish > this? > > LoaderEngine engine = new LoaderEngine(); > > engine.addContext(new FileContext(new > File("root1")); > engine.addContext(new FileContext(new > File("root2")); > > Also.. would be nice if the resolver tried to > resolve in root1.. then > root2.. then fail.. > > Any help would be much appreciated.. > > Thanks! > > Brian > > > ------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. Do > you grep through log files > for problems? Stop! Download the new AJAX search > engine that makes > searching your log files as easy as surfing the > web. DOWNLOAD SPLUNK! > http://ads.osdn.com/?ad_idv37&alloc_id865&op=click > _______________________________________________ > Simpleweb-Support mailing list > Sim...@li... > https://lists.sourceforge.net/lists/listinfo/simpleweb-support > Niall Gallagher __________________________________ Yahoo! Mail - PC Magazine Editors' Choice 2005 http://mail.yahoo.com |
From: Brian D. <wic...@gm...> - 2005-11-28 21:21:33
|
Hmm.. this works... can it be better? public class Server { public Server(Host host) throws Exception { _host =3D host; MyLoaderEngine engine =3D new MyLoaderEngine(); Iterator it =3D _host.roots(); while (it.hasNext()) { File root =3D (File) it.next(); engine.addContext(new FileContext(root)); } engine.load("directory", "com.wickedfastsolutions.server.app.DirectoryListingService"); engine.load("default", "com.wickedfastsolutions.server.app.WickedfastService"); engine.link("*", "default"); ProtocolHandler handler =3D ProtocolHandlerFactory.getInstance(engi= ne); handler =3D new ServerHandler(handler); Connection connection =3D ConnectionFactory.getConnection(handler); connection.connect(new ServerSocket(_host.getPort(), 50, InetAddress.getByName(_host.getAddress()))); System.err.println("Current Time is " + new Date()); System.err.println("Server is running at " + _host.getAddress() + " port " + _host.getPort()); } public static void main(String[] args) throws Exception { Host host =3D new Host(); host.addRoot(new File("test/templates")); host.addRoot(new File("test/templates2")); host.setAddress("127.0.0.1"); host.setPort(2000); new Server(host); } public Host getHost() { return _host; } private Host _host; } =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D public class MyLoaderEngine implements LoaderManager, ResourceEngine { public MyLoaderEngine() { } public void addContext(Context context) { try { _contexts.add(new LoaderEngine(context)); } catch (IOException ex) { throw new RuntimeException(ex.getMessage()); } } public void update(String name, Loader loader) { Iterator it =3D _contexts.iterator(); while (it.hasNext()) { LoaderEngine engine =3D (LoaderEngine) it.next(); engine.update(name, loader); } } public void remove(String name) { Iterator it =3D _contexts.iterator(); while (it.hasNext()) { LoaderEngine engine =3D (LoaderEngine) it.next(); engine.remove(name); } } public void load(String name, String className) throws LoadingException { Iterator it =3D _contexts.iterator(); while (it.hasNext()) { LoaderEngine engine =3D (LoaderEngine) it.next(); engine.load(name, className); } } public void load(String name, String className, Object data) throws LoadingException { Iterator it =3D _contexts.iterator(); while (it.hasNext()) { LoaderEngine engine =3D (LoaderEngine) it.next(); engine.load(name, className, data); } } public void unload(String name) { Iterator it =3D _contexts.iterator(); while (it.hasNext()) { LoaderEngine engine =3D (LoaderEngine) it.next(); engine.unload(name); } } public void link(String pattern, String name) { Iterator it =3D _contexts.iterator(); while (it.hasNext()) { LoaderEngine engine =3D (LoaderEngine) it.next(); engine.link(pattern, name); } } public void link(String pattern, String name, int pos) { Iterator it =3D _contexts.iterator(); while (it.hasNext()) { LoaderEngine engine =3D (LoaderEngine) it.next(); engine.link(pattern, name, pos); } } public void unlink(String pattern) { Iterator it =3D _contexts.iterator(); while (it.hasNext()) { LoaderEngine engine =3D (LoaderEngine) it.next(); engine.unlink(pattern); } } public void unlink(Match match) { Iterator it =3D _contexts.iterator(); while (it.hasNext()) { LoaderEngine engine =3D (LoaderEngine) it.next(); engine.unlink(match); } } public synchronized Resource resolve(String target) { Iterator it =3D _contexts.iterator(); while (it.hasNext()) { try { LoaderEngine engine =3D (LoaderEngine) it.next(); String path =3D engine.context.getRequestPath(target); String name =3D engine.resolver.resolve(path); if (engine.registry.contains(name)) { Context context =3D engine.context; File file =3D context.getLocator().getFile(target); if (!file.isHidden() && file.canRead()) { return engine.registry.retrieve(name); } } } catch (LocateException ex) { } } return new NotFound(new FileContext(new File("/"))); } private class NotFound extends BasicResource { public NotFound(Context context) { this.context =3D context; } public void process(Request req, Response resp) { handle(req, resp, new StatusReport(404)); } } private ArrayList _contexts =3D new ArrayList(); } Thanks! On 11/28/05, Niall Gallagher <gal...@ya...> wrote: > Hi Brian, > > No, you do not have to rewrite the LoaderEngine to do > this. What you can do is extend it in much the same > way as the MapperEngine does. If you wish to add > multiple paths to the classpath used by the loader > engine then you can delegate to the following > constructor. > > LoaderEngine(Context context, URL[] codebase); > > Simply add additional URLs in the form > file:///a/b/c/path, etc. If you would like the Context > to find files from multiple roots, then you should > consider using the Locator. The locator performs a > search for files from multiple locations. I typically > use this for loading configuration files. The > simple.http.serve.FileLocator is good for this. For > example you could use: > > Locator loc =3D context.getLocator(); > > loc.getFile("/my/file.txt"); > > The file is searched for within all roots specified to > the FileLocator. To increase the number of roots you > can do the following: > > new FileLocator(new File[]{new File("root1"), new > File("root2")}); > > Also you will have to extend the FileContext like > follows: > > class MyFileContext extends FileContext { > > private Locator loc; > > public MyFileContext(File base, Locator loc) { > super(base); > this.loc =3D loc; > } > > public Locator getLocator() { > return loc; > } > } > > Hope this helps. > > Niall > > > --- Brian Davis <wic...@gm...> wrote: > > > Hi > > > > I am using a FileContext with a LoaderEngine to set > > the 'root' of the > > web server. > > > > FileContext context =3D new FileContext(new > > File("webserverroot/")); > > > > LoaderEngine engine =3D new > > LoaderEngine(context); > > > > > > This works just dandy.. but I would like to support > > the concept of > > multiple server roots... > > > > Do I have to rewrite the LoaderEngine to accomplish > > this? > > > > LoaderEngine engine =3D new LoaderEngine(); > > > > engine.addContext(new FileContext(new > > File("root1")); > > engine.addContext(new FileContext(new > > File("root2")); > > > > Also.. would be nice if the resolver tried to > > resolve in root1.. then > > root2.. then fail.. > > > > Any help would be much appreciated.. > > > > Thanks! > > > > Brian > > > > > > > ------------------------------------------------------- > > This SF.net email is sponsored by: Splunk Inc. Do > > you grep through log files > > for problems? Stop! Download the new AJAX search > > engine that makes > > searching your log files as easy as surfing the > > web. DOWNLOAD SPLUNK! > > http://ads.osdn.com/?ad_idv37&alloc_id=16865&op=3Dclick > > _______________________________________________ > > Simpleweb-Support mailing list > > Sim...@li... > > > https://lists.sourceforge.net/lists/listinfo/simpleweb-support > > > > > Niall Gallagher > > > > > __________________________________ > Yahoo! Mail - PC Magazine Editors' Choice 2005 > http://mail.yahoo.com > > > ------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. Do you grep through log fi= les > for problems? Stop! Download the new AJAX search engine that makes > searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! > http://ads.osdn.com/?ad_id=3D7637&alloc_id=3D16865&op=3Dclick > _______________________________________________ > Simpleweb-Support mailing list > Sim...@li... > https://lists.sourceforge.net/lists/listinfo/simpleweb-support > |
From: Carfield Y. <car...@ca...> - 2005-11-29 04:12:00
|
On 11/29/05, Brian Davis <wic...@gm...> wrote: > Hmm.. this works... can it be better? > > public class Server > { > public Server(Host host) throws Exception > { > _host =3D host; > > MyLoaderEngine engine =3D new MyLoaderEngine(); > > Iterator it =3D _host.roots(); > > while (it.hasNext()) > { > File root =3D (File) it.next(); > > engine.addContext(new FileContext(root)); > } > > engine.load("directory", > "com.wickedfastsolutions.server.app.DirectoryListingService"); > engine.load("default", > "com.wickedfastsolutions.server.app.WickedfastService"); > > engine.link("*", "default"); > > ProtocolHandler handler =3D ProtocolHandlerFactory.getInstance(en= gine); > > handler =3D new ServerHandler(handler); > > Connection connection =3D ConnectionFactory.getConnection(handler= ); > > connection.connect(new ServerSocket(_host.getPort(), 50, > InetAddress.getByName(_host.getAddress()))); > > System.err.println("Current Time is " + new Date()); > System.err.println("Server is running at " + > _host.getAddress() + " port " + _host.getPort()); > } > > public static void main(String[] args) throws Exception > { > Host host =3D new Host(); > > host.addRoot(new File("test/templates")); > host.addRoot(new File("test/templates2")); > host.setAddress("127.0.0.1"); > host.setPort(2000); > > new Server(host); > } > > public Host getHost() > { > return _host; > } > > private Host _host; > } > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > public class MyLoaderEngine implements LoaderManager, ResourceEngine > { > public MyLoaderEngine() > { > } > > public void addContext(Context context) > { > try > { > _contexts.add(new LoaderEngine(context)); > } > > catch (IOException ex) > { > throw new RuntimeException(ex.getMessage()); > } > } > > public void update(String name, Loader loader) > { > Iterator it =3D _contexts.iterator(); > > while (it.hasNext()) > { > LoaderEngine engine =3D (LoaderEngine) it.next(); > > engine.update(name, loader); > } > } > > public void remove(String name) > { > Iterator it =3D _contexts.iterator(); > > while (it.hasNext()) > { > LoaderEngine engine =3D (LoaderEngine) it.next(); > > engine.remove(name); > } > } > > public void load(String name, String className) throws LoadingExceptio= n > { > Iterator it =3D _contexts.iterator(); > > while (it.hasNext()) > { > LoaderEngine engine =3D (LoaderEngine) it.next(); > > engine.load(name, className); > } > } > > public void load(String name, String className, Object data) throws > LoadingException > { > Iterator it =3D _contexts.iterator(); > > while (it.hasNext()) > { > LoaderEngine engine =3D (LoaderEngine) it.next(); > > engine.load(name, className, data); > } > } > > public void unload(String name) > { > Iterator it =3D _contexts.iterator(); > > while (it.hasNext()) > { > LoaderEngine engine =3D (LoaderEngine) it.next(); > > engine.unload(name); > } > } > > public void link(String pattern, String name) > { > Iterator it =3D _contexts.iterator(); > > while (it.hasNext()) > { > LoaderEngine engine =3D (LoaderEngine) it.next(); > > engine.link(pattern, name); > } > } > > public void link(String pattern, String name, int pos) > { > Iterator it =3D _contexts.iterator(); > > while (it.hasNext()) > { > LoaderEngine engine =3D (LoaderEngine) it.next(); > > engine.link(pattern, name, pos); > } > } > > public void unlink(String pattern) > { > Iterator it =3D _contexts.iterator(); > > while (it.hasNext()) > { > LoaderEngine engine =3D (LoaderEngine) it.next(); > > engine.unlink(pattern); > } > } > > public void unlink(Match match) > { > Iterator it =3D _contexts.iterator(); > > while (it.hasNext()) > { > LoaderEngine engine =3D (LoaderEngine) it.next(); > > engine.unlink(match); > } > } > > public synchronized Resource resolve(String target) > { > Iterator it =3D _contexts.iterator(); > > while (it.hasNext()) > { > try > { > LoaderEngine engine =3D (LoaderEngine) it.next(); > > String path =3D engine.context.getRequestPath(target); > String name =3D engine.resolver.resolve(path); > > if (engine.registry.contains(name)) > { > Context context =3D engine.context; > > File file =3D context.getLocator().getFile(target); > > if (!file.isHidden() && file.canRead()) > { > return engine.registry.retrieve(name); > } > } > } > > catch (LocateException ex) > { > } > } > > return new NotFound(new FileContext(new File("/"))); > } > > private class NotFound extends BasicResource { > public NotFound(Context context) { > this.context =3D context; > } > public void process(Request req, Response resp) { > handle(req, resp, new StatusReport(404)); > } > } > > private ArrayList _contexts =3D new ArrayList(); > } > > Thanks! > > > On 11/28/05, Niall Gallagher <gal...@ya...> wrote: > > Hi Brian, > > > > No, you do not have to rewrite the LoaderEngine to do > > this. What you can do is extend it in much the same > > way as the MapperEngine does. If you wish to add > > multiple paths to the classpath used by the loader > > engine then you can delegate to the following > > constructor. > > > > LoaderEngine(Context context, URL[] codebase); > > > > Simply add additional URLs in the form > > file:///a/b/c/path, etc. If you would like the Context > > to find files from multiple roots, then you should > > consider using the Locator. The locator performs a > > search for files from multiple locations. I typically > > use this for loading configuration files. The > > simple.http.serve.FileLocator is good for this. For > > example you could use: > > > > Locator loc =3D context.getLocator(); > > > > loc.getFile("/my/file.txt"); > > > > The file is searched for within all roots specified to > > the FileLocator. To increase the number of roots you > > can do the following: > > > > new FileLocator(new File[]{new File("root1"), new > > File("root2")}); > > > > Also you will have to extend the FileContext like > > follows: > > > > class MyFileContext extends FileContext { > > > > private Locator loc; > > > > public MyFileContext(File base, Locator loc) { > > super(base); > > this.loc =3D loc; > > } > > > > public Locator getLocator() { > > return loc; > > } > > } > > > > Hope this helps. > > > > Niall > > > > > > --- Brian Davis <wic...@gm...> wrote: > > > > > Hi > > > > > > I am using a FileContext with a LoaderEngine to set > > > the 'root' of the > > > web server. > > > > > > FileContext context =3D new FileContext(new > > > File("webserverroot/")); > > > > > > LoaderEngine engine =3D new > > > LoaderEngine(context); > > > > > > > > > This works just dandy.. but I would like to support > > > the concept of > > > multiple server roots... > > > > > > Do I have to rewrite the LoaderEngine to accomplish > > > this? > > > > > > LoaderEngine engine =3D new LoaderEngine(); > > > > > > engine.addContext(new FileContext(new > > > File("root1")); > > > engine.addContext(new FileContext(new > > > File("root2")); > > > > > > Also.. would be nice if the resolver tried to > > > resolve in root1.. then > > > root2.. then fail.. > > > > > > Any help would be much appreciated.. > > > > > > Thanks! > > > > > > Brian > > > > > > > > > > > ------------------------------------------------------- > > > This SF.net email is sponsored by: Splunk Inc. Do > > > you grep through log files > > > for problems? Stop! Download the new AJAX search > > > engine that makes > > > searching your log files as easy as surfing the > > > web. DOWNLOAD SPLUNK! > > > http://ads.osdn.com/?ad_idv37&alloc_id=16865&op=3Dclick > > > _______________________________________________ > > > Simpleweb-Support mailing list > > > Sim...@li... > > > > > https://lists.sourceforge.net/lists/listinfo/simpleweb-support > > > > > > > > > Niall Gallagher > > > > > > > > > > __________________________________ > > Yahoo! Mail - PC Magazine Editors' Choice 2005 > > http://mail.yahoo.com > > > > > > ------------------------------------------------------- > > This SF.net email is sponsored by: Splunk Inc. Do you grep through log = files > > for problems? Stop! Download the new AJAX search engine that makes > > searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! > > http://ads.osdn.com/?ad_id=3D7637&alloc_id=3D16865&op=3Dclick > > _______________________________________________ > > Simpleweb-Support mailing list > > Sim...@li... > > https://lists.sourceforge.net/lists/listinfo/simpleweb-support > > > > > ------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. Do you grep through log fi= les > for problems? Stop! Download the new AJAX search engine that makes > searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! > http://ads.osdn.com/?ad_idv37&alloc_id=16865&opclick > _______________________________________________ > Simpleweb-Support mailing list > Sim...@li... > https://lists.sourceforge.net/lists/listinfo/simpleweb-support > |
From: Carfield Y. <car...@gm...> - 2005-11-29 03:52:07
|
> engine.addContext(new FileContext(new File("root1")); > engine.addContext(new FileContext(new File("root2")); > I have thought of doing similar thing, but what in my mind is to extend java.io.File() object (which is not final) which accepting multiple files at constructor, then overload approach method, like list() and listFiles() . I think this should work |