> No..  :-)

Well, thanks for not answering :-)

> It's not clear to me exactly WHAT your exact problem is... but can I
> hazard a guess that you have your application classloaders configured to
> load the webapp classes before the appserver host classes?

Not on purpose. Tomcat default perhaps.

> IF that is true, then the following occurs [and the ramifications of this
> problem extend well beyond commons-logging, it is my opinion that we are
> only seeing the tip of this iceburg :-]

Yes, I've seen other people not the same thing on Cocoon and Tomcat lists.

> First, some nomenclature:
>
> - let <classLoader>:: be a classloader
> - let <classLoader>::<Class> be a <Class> loaded by <classLoader>.
>
> Note that <classLoaderA>::<YourClass> is NOT the same class as
> <classLoaderB>::<YourClass>  [the same class resource loaded by two
> different classloaders does NOT result in equivalent classes within the
> JVM].
>
> - let a.jar & b.jar both be in an appserver/lib directory (used
> internally
> & exposed to applications).
> - A class A defined in a.jar.
> - A class B, such that B extends on A, defined in b.jar
> - A property file, system property, or service definition defines B as "a
> desired" implementation of A.
> - During host startup, appserver::A and appserver::B are loaded (by
> whatever means).
>
> Now, drop a copy of a.jar into a webapp (classloader hierarchy:
> webapp/lib
> --(isChildOf)--> appserver/lib).
> In a first case, webapp::A is never seen: the class loaders
> typically find
> appserver::A first.
> However, Tomcat (and others) often allow a flag to be set to allow local
> classes to be loaded before appserver classes.
>
> Remember our property file/system property defining B as "the desired"
> implementation of A?
>
> If the system now attempts to locate & load B, without being aware of
> which classloader actually found it (A is unaware of whether webapp:: or
> appserver:: finds the resource), then in this case it will find & load
> appserver::B.
>
> The class loaded (appserver::B) does NOT extend webapp::A, instead it
> extends a different class: appserver::A.

Quite.

All that said, I'm glad I have something working, and shouldn't have asked
the follow up in the first place.

Per

Reply via email to