We have an webapp that has been running fine on Tomcat 7.0.99, but failed to 
load properly on Tomcat 7.0.100, upon investigation, it looks like

javax.servlet.ServletContainerInitializer that we defined in jar is not being 
loaded, and to make sure, we created a blank new webapp with a blank 
implementation of ServletContainerInitializer



public class TestSCI implements ServletContainerInitializer{

                @Override

                public void onStartup(Set<Class<?>> arg0, ServletContext arg1) 
throws ServletException {

                                
System.out.println("********************************");

                }

}



And add this class and also the 
“META-INF/services/javax.servlet.ServletContainerInitializer” entry in a jar 
and place this jar in WEB-INF/lib folder, with this simple setup, test shows 
that the ServletContainerInitializer is being loaded on Tomcat 7.0.99, but is 
not being loaded on Tomcat 7.0.100, is this change intentional on Tomcat 
7.0.100 or is this a bug?



Looking at org.apache.catalina.startup.WebappServiceLoader from source code of 
Tomcat 7.0.100, it seems that the leading slash added on line 111 may have 
caused the issue, but I am not entirely sure.



On Tomat 7.0.100, ServletContainerInitializer will load if it is placed as 
plain text file entry in WEB-INF/classes, but the same 
ServletContainerInitializer will NOT load when the 
“META-INF/services/javax.servlet.ServletContainerInitializer” entry is placed 
in a jar file, Tomcat 7.0.99 will load the ServletContainerInitializer 
regardless where the 
“META-INF/services/javax.servlet.ServletContainerInitializer” entry is placed.



Has anyone encountered this issue on Tomcat 7.0.100 and if this behavior change 
is intentional?



Thanks.

Reply via email to