Tomcat 6.0.16
Linux 2.6.18
JDK 1.6.0_05

Imagine a webapp like this:
/index.jsp
/WEB-INF
-web.xml (of course)
-/classes
--ConfigFile.txt
-/lib
--MyConfigLoader.class

If I want to load ConfigFile.txt into an InputStream from inside my
webapp, all I have to do is this:

InputStream configStream =
this.getClass().getClassLoader().getResource("/ConfigFile.txt");

In some cases, I may want to run multiple instances of the application but
have them share one copy of the configuration file. The idea is that I
only want to have to maintain one version of the config file per Tomcat
and have all the webapps use the same copy. If I put ConfigFile.txt inside
/tmp, for instance, this works fine:

InputStream configStream = new FileInputStream("/tmp/ConfigFile.txt");

But what I tried doing was, symbolically linking all the different webapps
to one copy of the file. In other words,
tomcat/webapps/myapp1/WEB-INF/classes/ConfigFile.txt and
tomcat/webapps/myapp2/WEB-INF/classes/ConfigFile.txt would just be
symlinks to /tmp/ConfigFile.txt.

When I do this, the input stream comes up null:
InputStream configStream =
this.getClass().getClassLoader().getResource("/ConfigFile.txt");

I thought that symlinks were just treated like files, and that this should
just work. I stepped through org.apache.catalina.loader.WebappClassLoader
in the Eclipse debugger and I can't see anything that would obviously
prevent symlinks from working. But the only time that the ConfigFile.txt
shows up in the resourceEntries Map as a ResourceEntry is when I have the
file physically inside WEB-INF/classes - never when it is only a symlink.

I have googled many combinations of
java/linux/classloader/tomcat/symlink/symbolic link/classpath and not
found anything quite like this yet.

Any ideas?

Thanks!


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to