Hi all;

I am trying to share some jars across multiple web-apps, each of which runs in its own environment (i.e, JVM). To do this I make use of the CATALINA_BASE environment variable. My problem is in regards to class loading.

I have a number of jar files that are common to each webapp but I also have a couple that are unique to each app. According to the documentation for Tomcat 4.1: "from the perspective of a web application, class or resource loading looks in the following repositories, in this order:"

    1) /WEB-INF/classes of your web application
    2) /WEB-INF/lib/*.jar of your web application
    3) Bootstrap classes of your JVM
    4) System class loader classes
    5) $CATALINA_HOME/common/classes
    6) $CATALINA_HOME/common/endorsed/*.jar
    7) $CATALINA_HOME/common/lib/*.jar
    8) $CATALINA_BASE/shared/classes
    9) $CATALINA_BASE/shared/lib/*.jar

I have therefore tried two different approaches, both of which fail for the same reason.

1st approach: I modified the standard startup script to add the shared jars to the CLASSPATH, thereby treating them as System class loader classes (i.e., category #4 in the above sequence).

2nd approach: I placed the shared jars in $CATALINA_HOME/common/lib (i.e., category #7 in the above sequence).

In both cases everything works fine UNTIL one of these shared classes needs to access a class located in one of the /WEB-INF/lib/*.jar of a web application (i.e., category #2). At that point my code throws a ClassNotFoundException.

My impression is that something in the class loader procedures prevents "loading backwards" by which I mean:

IF Class X was loaded by the nth loader in the sequence (e.g., #4, the system loader),
AND Class X references a previously unloaded class,
THEN Tomcat will ignore any loader lower in the sequence the Class X's loader
(e.g., loaders 1-3 (the /WEB-INF and bootstrap loaders in this example))
when attempting to resolve the reference.


Is this a correct assumption and does anyone have a suggestion for working around this "feature"?

Thanks

   Larry





--

Lawrence J Levin
Critical Architectures, LLC
Skillman NJ 08558
email: [EMAIL PROTECTED]
voice: (609) 333-9750
cell:  (908) 227-8485
fax:   (609) 333-9751


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



Reply via email to