DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=26622>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=26622 WebappClassLoader is inconsistent on delegation of resource loading Summary: WebappClassLoader is inconsistent on delegation of resource loading Product: Tomcat 5 Version: 5.0.18 Platform: All OS/Version: All Status: NEW Severity: Major Priority: Other Component: Catalina AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] The servlet specification recommends (Section 9.7.2) that containers be "implemented so that classes and resources packaged within the WAR are loaded in preference to classes and resources residing in container-wide library JARs." Catalina implements this such that, when the "delegate" property is set to false (which is the default), WebappClassLoader will look locally first for the loadClass() and getResource() methods. However, WebappClassLoader does *not* override the getResources() method inherited from the URLClassLoader base class -- so getResources() behaves as if the "delegate" property is always "true". This causes problems for applications that have a resource defined in both the parent and webapp class loaders. From the descriptions of getResource() and getResources() in the ClassLoader javadocs, and from the servlet spec statement above, it is natural to expect that the first URL returned by getResources(), for a given resource name, will be the one retrieved if you call getResource() with that same resource name. This assumption is satisfied if the "delegate" property is set to "true", but is *not* satisfied when the "delegate" property is set to "false". This behavior is more problematic than it might otherwise be, because "false" is the default setting. The recommended solution is to override the getResources() method in WebappClassLoader. If "delegate" is set to "true", return the concatentation of calling "getParent().getResources()" followed by the list of matching resources in the webapp class loader. If "delegate" is false, however, concatenation order should be reversed. Note that this problem exists in Tomcat 4.1 as well. However, because that version is primarily in maintenance mode now, I did not bother to submit a separate bug report for it. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]