I'm trying to upgrade a Tomcat (development) server from 5.0.16 to 5.0.25
and have found some classloader frustrations.  Ultimately, I'd like to have
the webapp JAR file under its webapp/WEB-INF/lib directory and a set of
shared classes (in several JARs) residing in the $CATALINA_BASE/shared/lib
directory (to be shared among several web apps).  Everything else being
equal between the 5.0.16 and 5.0.25 environments, listed below are JAR
placements that work and those that throw exceptions:

Key:
"wa"             =   webapp;
"$CB"          =   $CATALINA_BASE
":    :    :"       =   stack trace continues

"com.squirrelydo.core."    = package prefix indicating a shared class
"com.squirrelydo.lnal."      = package prefix indicating a webapp class


version         webapp classes            shared classes
result
======      ===========           =============           ==========
5.0.16          wa/WEB-INF/lib         wa/WEB-INF/lib              works
fine
----------------------------------------------------------------
5.0.16          wa/WEB-INF/lib         $CB/shared/lib
java.lang.ClassNotFoundException: com.squirrelydo.lnal.LNAL$Session
        at
org.apache.catalina.loader.StandardClassLoader.loadClass(StandardClassLoader
.java:891)
        at
org.apache.catalina.loader.StandardClassLoader.loadClass(StandardClassLoader
.java:756)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at com.squirrelydo.core.util.ClassAsEnum.<init>(ClassAsEnum.java:35)
        at com.squirrelydo.core.prefs.Property.<init>(Property.java:45)
        at com.squirrelydo.lnal.LNAL.<init>(LNAL.java:30)
        at com.squirrelydo.lnal.LNAL$Session.<clinit>(LNAL.java:43)
                :                :                :

The class initialization for LNAL$Session triggers the constructor for a
super class (ClassAsEnum) that spans the divide between webapp and
shared classloaders.  The ClassAsEnum super class can't "see" LNAL$Session.
----------------------------------------------------------------
5.0.16          $CB/shared/lib         $CB/shared/lib
works fine
----------------------------------------------------------------
5.0.25          wa/WEB-INF/lib      wa/WEB-INF/lib                  works
fine
----------------------------------------------------------------
5.0.25          wa/WEB-INF/lib       $CB/shared/lib
java.lang.NoClassDefFoundError: com/squirrelydo/core/servlet/TMLServlet
 at java.lang.ClassLoader.defineClass0(Native Method)
 at java.lang.ClassLoader.defineClass(Unknown Source)
 at java.security.SecureClassLoader.defineClass(Unknown Source)
 at
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLo
ader.java:1634)
 at
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.jav
a:860)
 at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.jav
a:1307)
 at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.jav
a:1189)
 at java.lang.ClassLoader.loadClassInternal(Unknown Source)
 at java.lang.ClassLoader.defineClass0(Native Method)
 at java.lang.ClassLoader.defineClass(Unknown Source)
 at java.security.SecureClassLoader.defineClass(Unknown Source)
 at
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLo
ader.java:1634)
 at
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.jav
a:860)
 at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.jav
a:1307)
 at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.jav
a:1189)
 at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:95
4)
                :                :                :

A webapp class's (I'm not sure exactly which) constructor is attempting to
find the (shared) super class TMLServlet.
----------------------------------------------------------------
5.0.25          $CB/shared/lib         $CB/shared/lib
java.lang.ClassNotFoundException: com.squirrelydo.lnal.Calendar

org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.jav
a:1340)

org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.jav
a:1189)
            :            :            :

>From the Tomcat log:
----------------------------------------------------------------------------
---------------
2004-07-04 13:16:10 StandardContext[/LNAL]Marking servlet Calendar as
unavailable
2004-07-04 13:16:10 StandardContext[/LNAL]Error loading WebappClassLoader
  delegate: false
  repositories:
    /WEB-INF/classes/
----------> Parent Classloader:
StandardClassLoader
  delegate: true
  repositories:
----------> Parent Classloader:
StandardClassLoader
  delegate: true
  repositories:
    file:D:\zVAR\tomcat\5.0.25\common\classes\
    file:D:\zVAR\tomcat\5.0.25\common\endorsed\xercesImpl.jar
    file:D:\zVAR\tomcat\5.0.25\common\endorsed\xmlParserAPIs.jar
    file:D:\zVAR\tomcat\5.0.25\common\lib\ant.jar
    file:D:\zVAR\tomcat\5.0.25\common\lib\commons-collections.jar
    file:D:\zVAR\tomcat\5.0.25\common\lib\commons-dbcp-1.1.jar
    file:D:\zVAR\tomcat\5.0.25\common\lib\commons-el.jar
    file:D:\zVAR\tomcat\5.0.25\common\lib\commons-pool-1.1.jar
    file:D:\zVAR\tomcat\5.0.25\common\lib\jasper-compiler.jar
    file:D:\zVAR\tomcat\5.0.25\common\lib\jasper-runtime.jar
    file:D:\zVAR\tomcat\5.0.25\common\lib\jsp-api.jar
    file:D:\zVAR\tomcat\5.0.25\common\lib\naming-common.jar
    file:D:\zVAR\tomcat\5.0.25\common\lib\naming-factory.jar
    file:D:\zVAR\tomcat\5.0.25\common\lib\naming-java.jar
    file:D:\zVAR\tomcat\5.0.25\common\lib\naming-resources.jar
    file:D:\zVAR\tomcat\5.0.25\common\lib\phpsrvlt.jar
    file:D:\zVAR\tomcat\5.0.25\common\lib\servlet-api.jar
----------> Parent Classloader:
[EMAIL PROTECTED]
----------------------------------------------------------------------------
---------------

In this last case, the Tomcat classloader hierarchy doesn't seem to
recognize the presence of any JAR files in $CATALINA_BASE/shared/lib.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to