Fix OoM error when starting Tomcat with max int load on startup

Fixes gh-17927
This commit is contained in:
Andy Wilkinson 2019-08-21 15:05:38 +01:00
parent ab87b2a39b
commit abe3d38527
2 changed files with 16 additions and 2 deletions

View File

@ -71,8 +71,7 @@ class TomcatEmbeddedContext extends StandardContext {
Wrapper wrapper = (Wrapper) child;
int order = wrapper.getLoadOnStartup();
if (order >= 0) {
grouped.computeIfAbsent(order, ArrayList::new);
grouped.get(order).add(wrapper);
grouped.computeIfAbsent(order, (o) -> new ArrayList<>()).add(wrapper);
}
}
return grouped.values().stream().flatMap(List::stream);

View File

@ -519,6 +519,21 @@ public class TomcatServletWebServerFactoryTests extends AbstractServletWebServer
() -> factory.getWebServer((context) -> context.addListener(new FailingServletContextListener())));
}
@Test
public void registerJspServletWithDefaultLoadOnStartup() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(0);
factory.addInitializers(new ServletContextInitializer() {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.addServlet("manually-registered-jsp-servlet", JspServlet.class);
}
});
this.webServer = factory.getWebServer();
this.webServer.start();
}
@Override
protected JspServlet getJspServlet() throws ServletException {
Tomcat tomcat = ((TomcatWebServer) this.webServer).getTomcat();