Hello, I'm having issues with using a custom classloader in Tomcat 3.3.1. I have a need to load servlets from a runtime-determined classpath. The solution worked fine in 3.2.x. Here's what I think the problem is (let me know where my understanding is flawed):
I'm pretty confident any custom classloader that tries to load servlets is doomed on newer versions of Tomcat. By this I mean, TC4x and TC5x won't work either as they employ a similar classpath paradigm as that of TC3.3x. It seems that the classloader alchemy the Jakarta people are doing to allow web application classpaths to be independent of each other and that used by the core Tomcat components is going to prevent me from instantiating a servlet via a runtime-determined classpath. A JVM process will only allow a single instance of any class type within its process space. Every JVM process has a SystemClassLoader that manages loading the core java stuff, like the String class. Any other classLoader in the process space that tries to load a String.class object after the SystemClassLoader has done so will throw a NoClassDefFoundException or some other instantiation error. What's nice about the SystemClassLoader is that any other ClassLoader in the process can check with it to see whether it's created a certain class before trying to do so, and use the one it has. A ClassLoader can also do this if it is chained with other class loaders. It needs only traverse the chain via the getParent() method and query each for the class in question. The problem with Tomcat creating its own class loaders is that my custom class loader has no way of knowing what classes they've loaded nor can I use any of those instances. So, when I try to create my servlet object, its super class, HttpServlet is also instantiated and pow, the JVM dumps a stack trace claiming it can't find resources. (sample Stack trace) ----------------------- Attempting to load class: java.lang.NoClassDefFoundError Class name: java.lang.NoClassDefFoundError 2002-12-15 23:51:07 - Ctx() : Exception in R( + /servlet/MyServlet + null) - java.lang.ExceptionInInitializerError: java.util.MissingResourceException: Can't find bundle for base name javax.servlet.http.LocalStrings, locale en_US at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:7 07) at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:678) at java.util.ResourceBundle.getBundle(ResourceBundle.java:541) at javax.servlet.http.HttpServlet.<clinit>(HttpServlet.java) ----------------------- I'm guessing this is a nonsense error because the ResourceBundle it's looking for is in the same jar that HttpServlet is in. So, it's definitely on the classpath. Anyway, what else might I try to remedy this? Thanks. -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>