You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by "Mark R. Diggory" <md...@latte.harvard.edu> on 2002/10/07 21:07:40 UTC

Class Loading Question

I'm looking in the ClassLoading documentation and I see this as the 
loading order

/WEB-INF/classes of your web application
/WEB-INF/lib/*.jar of your web application
Bootstrap classes of your JVM
System class loader classses (described above)
$CATALINA_HOME/common/classes
$CATALINA_HOME/common/endorsed/*.jar
$CATALINA_HOME/common/lib/*.jar
$CATALINA_HOME/shared/classes
$CATALINA_HOME/shared/lib/*.jar

but when I look at the chart it looks like this:

       Bootstrap
           |
        System
           |
        Common
       /      \
  Catalina   Shared
              /   \
         Webapp1  Webapp2


seems as though the the ordering of the CLASSPATH for my webapp should 
look like this when I consider the chart:

/WEB-INF/classes of your web application
/WEB-INF/lib/*.jar of your web application
$CATALINA_HOME/shared/classes
$CATALINA_HOME/shared/lib/*.jar
$CATALINA_HOME/common/classes
$CATALINA_HOME/common/endorsed/*.jar
$CATALINA_HOME/common/lib/*.jar
System class loader classses (described above)
Bootstrap classes of your JVM

Then each level can have "precidence" over the last level, this would be 
benificial in situations where the first package of a particualr type is 
used as a default (ie XML parsers).

Why are the System/bootstrap/common classes listed before shared? Seems 
when one uses the "default" configuration strategy for XML parsers one 
would get stuck with jdk's default crimson instead of tomcat's default 
xerces when working with a "out-of-the-box" installation of Tomcat.

This would allow one to more easily override default settings in the JVM 
Classpath and Tomcat "out-of-the-box" wouldn't have any problems 
associated with using an unfamiliar parser.

-Mark Diggory



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


Re: Class Loading Question

Posted by "Craig R. McClanahan" <cr...@apache.org>.

On Mon, 7 Oct 2002, Mark R. Diggory wrote:

> Date: Mon, 07 Oct 2002 15:07:40 -0400
> From: Mark R. Diggory <md...@latte.harvard.edu>
> Reply-To: Tomcat Users List <to...@jakarta.apache.org>
> To: tomcat-user@jakarta.apache.org
> Subject: Class Loading Question
>
> I'm looking in the ClassLoading documentation and I see this as the
> loading order
>
> /WEB-INF/classes of your web application
> /WEB-INF/lib/*.jar of your web application
> Bootstrap classes of your JVM
> System class loader classses (described above)
> $CATALINA_HOME/common/classes
> $CATALINA_HOME/common/endorsed/*.jar
> $CATALINA_HOME/common/lib/*.jar
> $CATALINA_HOME/shared/classes
> $CATALINA_HOME/shared/lib/*.jar
>
> but when I look at the chart it looks like this:
>
>        Bootstrap
>            |
>         System
>            |
>         Common
>        /      \
>   Catalina   Shared
>               /   \
>          Webapp1  Webapp2
>
>
> seems as though the the ordering of the CLASSPATH for my webapp should
> look like this when I consider the chart:
>
> /WEB-INF/classes of your web application
> /WEB-INF/lib/*.jar of your web application
> $CATALINA_HOME/shared/classes
> $CATALINA_HOME/shared/lib/*.jar
> $CATALINA_HOME/common/classes
> $CATALINA_HOME/common/endorsed/*.jar
> $CATALINA_HOME/common/lib/*.jar
> System class loader classses (described above)
> Bootstrap classes of your JVM
>
> Then each level can have "precidence" over the last level, this would be
> benificial in situations where the first package of a particualr type is
> used as a default (ie XML parsers).
>
> Why are the System/bootstrap/common classes listed before shared? Seems
> when one uses the "default" configuration strategy for XML parsers one
> would get stuck with jdk's default crimson instead of tomcat's default
> xerces when working with a "out-of-the-box" installation of Tomcat.
>
> This would allow one to more easily override default settings in the JVM
> Classpath and Tomcat "out-of-the-box" wouldn't have any problems
> associated with using an unfamiliar parser.
>

The standard class loader functionality in Java is "delegate to the parent
before looking locally".  Among other things, this is a security issue --
it guarantees that you can't do wierd things like override the standard
implementation of java.lang.SecurityManager with one of your own.

The servlet spec gives webapp class loaders the option to modify this
class loading order for the webapp class loader, and Tomcat 4 (by default)
does this.  Doing so requires a large number of extra checks to ensure
that a webapp doesn't try to override JDK or servlet API classes.
However, all the other class loaders follow the standard pattern.

> -Mark Diggory

Craig


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