You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Nic Holbrook <mo...@xmission.com> on 2002/06/11 06:13:08 UTC

Classloader question between tomcat 3.3 and 4.0.3

I am deploying several web applications  which access data through the 
proxy/facade pattern into EJB's.  Some of this data is shared across 
applications.  I have 1 jar file that is shared, and handles some in 
memory caching of data, etc.  In tomcat 3.3, I have this jar in the 
lib/apps directory, and I don't have to bundle it in any of the 
WEB-INF/lib directories.  For some reason, I always get ClassNotFound 
Exceptions doing the same thing in 4.0.3.  Tomcat 4.0.3 wants me to have 
the jar in every WEB-INF/lib directory.   I have tried dropping it in 
common/lib, lib, server/lib, everything.  Is there something I am not 
quite understanding here, or does tomcat 4.x.x load classes differently? 
 I really wanted to use 4.0.x because my AppResources now is combined 
and in the classpath because my 3.3 doesn't find anything in the 
WEB-INF/classes directories of my web-apps....

Thanks

Nic Holbrook


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: Classloader question between tomcat 3.3 and 4.0.3

Posted by Jacob Kjome <ho...@visi.com>.
Do you use Class.forName("MyClass") to load classes anywhere?  If so, your 
libraries in WEB-INF/lib or WEB-INF/classes that attempt to load the 
caching library in TOMCAT_HOME/lb (called TOMCAT_HOME/shared/lib in 4.1.x) 
or TOMCAT_HOME/common/lib won't be able to find it because that package was 
loaded in a different classloader.

Replace:

Class.forName("MyClass")

With:

Thread.currentThread().getContextClassLoader().loadClass("MyClass")

That will find classes and resources across multiple classloaders like 
those that Tomcat provides.

Note that there could be one other issue.  There are some classloading 
problems that have been fixed in the latest 4.0.4 beta and the 4.1.3 
beta.  I *highly* suggest you drop 4.0.3 like a bad habit and move to a bug 
fixed release.  You will save yourself a *ton* of grief by doing so.  I 
wouldn't worry too much that they are marked as beta.  As far as I've been 
able to tell, 4.1.3 is quite robust and same with the latest beta of 4.0.4.

Jake


At 10:13 PM 6/10/2002 -0600, you wrote:
>I am deploying several web applications  which access data through the 
>proxy/facade pattern into EJB's.  Some of this data is shared across 
>applications.  I have 1 jar file that is shared, and handles some in 
>memory caching of data, etc.  In tomcat 3.3, I have this jar in the 
>lib/apps directory, and I don't have to bundle it in any of the 
>WEB-INF/lib directories.  For some reason, I always get ClassNotFound 
>Exceptions doing the same thing in 4.0.3.  Tomcat 4.0.3 wants me to have 
>the jar in every WEB-INF/lib directory.   I have tried dropping it in 
>common/lib, lib, server/lib, everything.  Is there something I am not 
>quite understanding here, or does tomcat 4.x.x load classes differently? I 
>really wanted to use 4.0.x because my AppResources now is combined and in 
>the classpath because my 3.3 doesn't find anything in the WEB-INF/classes 
>directories of my web-apps....
>
>Thanks
>
>Nic Holbrook
>
>
>--
>To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
>For additional commands, e-mail: <ma...@jakarta.apache.org>