tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Arion Yu <ario...@stt.com.hk>
Subject Re: jar's still not picked up in WEB-INF/lib
Date Mon, 09 Oct 2000 06:38:01 GMT
Hi!

Let me introduce a hypothesis and see if it suits the phenomeon you encounter.

ClassLoader and package:
No 2 classloader can load the same package. 1st come 1st serve.

Who is the first?
1. java core
2. extension
3. classpath
4. $TOMCAT_HOME/lib
5. $YOUR_APP/WEB-INF/lib/*.jar and $YOUR_APP/WEB-INF/classes

If the package is already loaded in 4, the package can't be loaded again in 5.

Any amendment ?

Arion

Barry Dunne wrote:

> Thanks for that, I have been trying to get a test case that shows this and
> have narrowed down the problem as follows....
>
> If we have this calling structure:
>
> Servlet s1
> Class c1 in package p1 in jar j1
> Class c2 in package p2 in jar j2
>
> s1 calls c1.doSomething(),
> c1.doSomething() calls c2.doSomethingElse()
>
> Then there are a number of different ways the files can be located:
> (the test results are with tomcat 4.0m1)
>
> A) this works:
>
> <context>WEB-INF/classes/s1.class
> <context>WEB-INF/classes/p1/c1.class
> <context>WEB-INF/classes/p2/c2.class
>
> B) this works:
>
> <context>WEB-INF/classes/s1.class
> <context>WEB-INF/classes/p1/c1.class
> <context>WEB-INF/lib/j2.jar
>
> C) this works:
>
> <context>WEB-INF/classes/s1.class
> <context>WEB-INF/classes/p1/c1.class
> /usr/local/tomcat/lib/j2.jar
>
> D) this works:
>
> <context>WEB-INF/classes/s1.class
> <context>WEB-INF/lib/j1.jar
> <context>WEB-INF/classes/p2/c2.class
>
> E) this works:
>
> <context>WEB-INF/classes/s1.class
> <context>WEB-INF/lib/j1.jar
> <context>WEB-INF/lib/j2.jar
>
> F) this works:
>
> <context>WEB-INF/classes/s1.class
> <context>WEB-INF/lib/j1.jar
> /usr/local/tomcat/lib/j2.jar
>
> G) this FAILS:
>
> <context>WEB-INF/classes/s1.class
> /usr/local/tomcat/lib/j1.jar
> <context>WEB-INF/classes/p2/c2.class
>
> H) this FAILS:
>
> <context>WEB-INF/classes/s1.class
> /usr/local/tomcat/lib/j1.jar
> <context>WEB-INF/lib/j2.jar
>
> I) this works:
>
> <context>WEB-INF/classes/s1.class
> /usr/local/tomcat/lib/j1.jar
> /usr/local/tomcat/lib/j2.jar
>
> As this shows, G and H fail but all other combinations work.
>
> To give some more detail as to what I am doing here, I am running EJB's in
> Oracle 8i and using servlets to communicate with them.
>
> Originally I was using tomcat 3.1 and my web application used several jar
> files, 1 for my classes and other 3rd party ones (including the Oracle
> aurora naming jar).
>
> I wanted to use case E but with tomcat 3.1 I got class not found exceptions,
> so I ended up putting the 3rd party jars in tomcat/lib and expanding my own
> jar into WEB-INF/classes - i.e. case G.
> This worked but was not ideal.
>
> So with tomcat 3.1 case E failed and G worked.
>
> When I tried different versions I was testing case H, which as far as I can
> tell does not work on any version.
>
> The big difference now though is that after testing I have found that what I
> originally wanted to do, case E, will work so I am happy now.
>
> I hope you followed all that, apologies if it is not clear, it is now 5:45am
> and I am quite tired having been doing this stuff for way too long now.
>
> Thanks,
> Barry.
>
> From: "Craig R. McClanahan" <Craig.McClanahan@eng.sun.com>
> Reply-To: tomcat-user@jakarta.apache.org
> To: tomcat-user@jakarta.apache.org
> Subject: Re: jar's still not picked up in WEB-INF/lib
> Date: Sun, 08 Oct 2000 19:23:54 -0700
>
> Barry Dunne wrote:
>
>  > This problem has been posted so many times for different versions of
> tomcat
>  > but it is still there.
>  >
>  > To summarise the problem, if you put a jar file into WEB-INF/lib you get
> a
>  > class not found exception when you try to use one of the classes from the
>  > jar in a servlet. However, this does not happen when you either move the
> jar
>  > to /usr/local/tomcat/lib or extract the jar into WEB-INF/classes.
>  >
>  > Neither of these workarounds are very nice, the former makes sharing a
>  > server between multiple contexts/developers tricky and the latter makes a
>  > mess of the classes directory.
>  >
>  > There have been so many posts about this feature not working over time
> and I
>  > have had the problem myself on linux with tomcat 3.1, 3.2 and now 4.0m1.
>  >
>
> You will find that there are three fairly different classloader
> implementations
> (the 4.0m1 implemenation is 100% different) on these three versions -- it
> certainly is not the same bug just being carried forward.
>
>  >
>  > This is a pretty fundemental flaw as the lib is a fairly significant part
> of
>  > the specifications to be able to use WEB-INF/lib.
>  >
>  > Does anybody know why this problem has been left for so long now?
>  >
>  > Thanks,
>  > Barry.
>  >
>
> The problem is that it is not just one "problem".  Classloaders are
> intricate
> beasts, and one of the flaws of most implementations is that you don't get
> much
> evidence of what's really going on when they return ClassNotFoundException.
>
> As others have reported, putting JAR files in WEB-INF/lib works for most
> people
> (but not all) under 3.2b and 4.0m1 (3.1 has problems in this area that were
> addressed in 3.2).  Here's a partial list of the kinds of problems that will
> cause it to fail.
>
> * Having a JAR file in *both* WEB-INF/lib and on your classpath
>
> * Having a JAR file in *both* WEB-INF/lib and the system extensions
>    classpath ($JAVA_HOME/jre/lib/ext).
>
> * Having a class library that is on the class path and (from a
>    class in that class library) trying to reference a class in the
>    WEB-INF/lib area -- it's not accessible.  (This is why the
>    "struts.jar" file for Struts *must* be in WEB-INF/lib and *not*
>    on the classpath, for example).
>
> * User error in untold varieties:
>    - Putting ZIP files instead of JAR files in WEB-INF/lib
>    - Forgetting to put the JAR file there
>    - Corrupted JAR file (it will be *silently* ignored)
>    - JAR file that doesn't really have the class you think it has
>    - Operating system permissions problems
>
> Given how many people have trouble getting CLASSPATHs for Java applications
> and
> compilation right, it's not certainly an issue that is not unique to Tomcat.
>
> The challenge is to narrow down, in every single circumstance, exactly what
> is
> going on.  The requires knowing all of the following facts:
> * OS and JDK versions
> * If a Java2 platform, what do you have installed as system
>    extensions?
> * What is on your CLASSPATH (not an issue for Tomcat 4.0m1,
>    which totally ignores it)?
> * What libraries do you have in your $TOMCAT_HOME/lib or
>    $CATALINA_HOME/lib directory?
> * What libraries do you have in your WEB-INF/lib directory?
> * Where was the class that threw the ClassNotFoundException
>    loaded from?
> * Where was the class that wasn't found supposed to be loaded
>    from?
>
> As you can see, there are many possibilities for having a problem -- and any
> one
> of them leads to the same symptom:  ClassNotFoundException.
>
> You can help us narrow these things down by being tediously specific in
> error
> reports.  If you can create a small WAR file that reproduces the problem,
> that
> is absolutely the best tool for resolving things like this.
>
> Craig McClanahan
>
> ====================
> See you at ApacheCon Europe <http://www.apachecon.com>!
> Session VS01 (23-Oct 13h00-17h00):  Sun Technical Briefing
> Session T06  (24-Oct 14h00-15h00):  Migrating Apache JServ
>                                      Applications to Tomcat
>
> _________________________________________________________________________
> Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com.
>
> Share information about yourself, create your own public profile at
> http://profiles.msn.com.

--
[This email and any files transmitted with it are confidential and may contain
information that is legally privileged. They are intended solely for the
addressee(s). Access to this email by anyone else is unauthorized. If you are
not the intended recipient, please delete it and notify the sender by email
immediately; you should not copy or use it for any purpose, nor disclose its
contents to any other person. Thank you.]



Mime
View raw message