On 01/08/18 08:20, Thorsten Schöning wrote:
> Guten Tag Mark Thomas,
> am Dienstag, 31. Juli 2018 um 19:30 schrieben Sie:
>
>> Correct.[...]
>
> But as could have been read in the following paragraph of my mail and
> the SO-link, it doesn't work that way at least in Tomcat 7.0.90 even
> without absolute ordering in web.xml.
>
>> Enumeration<URL> resources;
>> if (loader == null) {
>> resources = ClassLoader.getSystemResources(configFile);
>> } else {
>> resources = loader.getResources(configFile);
>> }
>
> https://github.com/apache/tomcat/blob/trunk/java/org/apache/catalina/startup/WebappServiceLoader.java#L132
>
> That code is NOT using "META-INF/services" at the top level of the web>
> project,
Nor should it. foo.war!/META-INF/services is not a valid location for an
SPI file.
> but "WEB-INF/classes/META-INF/services" instead. That can be
> clearly seen e.g. using Process Monitor.
The correct locations are:
foo.war!/WEB-INF/lib/*.jar!/META-INF/services
which is where Tomcat looks.
Tomcat uses ClassLoader.getResources() which will also pick up
foo.war!/WEB-INF/classes/META-INF/services since the class loader
doesn't differentiate between a resource located at the root of a JAR or
a resource located in at the root of /WEB-INF/classes
There are benefits to this as IDE / Tomcat integrations have a habit of
placing classes in /WEB-INF/classes rather than in JAR file in /WEB-INF/lib
> So is this a bug or needs some configuration or has changed in newer
> versions of Tomcat or whatever?
No bug. No configuration required. No change in newer Tomcat versions.
Mark
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]