I found a little time to increase my "expertise" on classloaders.
I created a little test jsp to see what types of ClassLoaders (CL)
are returned from the Thread.currentThread.contextClassLoader()
as well as the CLs that are used to load up classes in servlets/jsps.

These are the results (I was going to include some non-Tomcat servers,
but did not get a chance).

  ServletContainer      ContextClassLoader returns
  --------------------------------------------------
  Tomcat
        3.1.1             web-app CL
        3.2.3             system CL
        3.3-b1            "dependency-wrapped" system CL (?)
        4.0-b6            web-app CL

What I'm seeing is that the contextClassLoader() method basically
returns a "system" ClassLoader for Tomcat 3.2.3 and 3.3-b1, whereas
3.1.1 and 4.0-b6 return web-app CL.  So it does not look like
one can safely rely on "contextClassLoader()" for getting the
"context" CL for applications deployed in a server environment.

Are these results what you would expect?

- Gidado


p.s. Here are the actual results (the first classname is the
CL being used, and the subsequent classnames are the parents):

Tomcat 3.1.1:
----------------------------
CONTEXT CLASSLOADER:
org.apache.tomcat.loader.AdaptiveClassLoader@8df60
sun.misc.Launcher$AppClassLoader@71732b (parent)
sun.misc.Launcher$ExtClassLoader@7fdcde (parent)


CLASSLOADER:
org.apache.tomcat.loader.AdaptiveClassLoader@8df60
sun.misc.Launcher$AppClassLoader@71732b
sun.misc.Launcher$ExtClassLoader@7fdcde




Tomcat 3.2.3:
----------------------------
CONTEXT CLASSLOADER:
sun.misc.Launcher$AppClassLoader@404536
sun.misc.Launcher$ExtClassLoader@7d8483


CLASSLOADER:
AdaptiveClassLoader(  )
sun.misc.Launcher$AppClassLoader@404536
sun.misc.Launcher$ExtClassLoader@7d8483



Tomcat 3.3 Beta 1:
----------------------------
CONTEXT CLASSLOADER:
org.apache.tomcat.util.depend.DependClassLoader@71f189
sun.misc.Launcher$AppClassLoader@71732b
sun.misc.Launcher$ExtClassLoader@7fdcde


CLASSLOADER:
java.net.FactoryURLClassLoader@147496
java.net.FactoryURLClassLoader@724a9d
java.net.FactoryURLClassLoader@e3e60
sun.misc.Launcher$AppClassLoader@71732b
sun.misc.Launcher$ExtClassLoader@7fdcde



Tomcat 4.0 Beta 6:
----------------------------
CONTEXT CLASSLOADER & CLASSLOADER:
WebappClassLoader
  available:
  delegate: false
  repositories:
    /WEB-INF/classes/
  required:
----------> Parent Classloader:
StandardClassLoader
  available:
  delegate: false
  repositories:
    file:D:\jakarta\jakarta-tomcat-4.0-b6\lib\jasper-runtime.jar
    file:D:\jakarta\jakarta-tomcat-4.0-b6\lib\namingfactory.jar
  required:
----------> Parent Classloader:
StandardClassLoader
  available:
  delegate: false
  repositories:
    file:D:\jakarta\jakarta-tomcat-4.0-b6\common\lib\naming.jar
    file:D:\jakarta\jakarta-tomcat-4.0-b6\common\lib\resources.jar
    file:D:\jakarta\jakarta-tomcat-4.0-b6\common\lib\servlet.jar
  required:
----------> Parent Classloader:
sun.misc.Launcher$AppClassLoader@71732b

sun.misc.Launcher$ExtClassLoader@7fdcde

Reply via email to