Merge branch '1.5.x'
This commit is contained in:
commit
6acf789264
|
|
@ -94,6 +94,9 @@ public class TomcatWebServer implements WebServer {
|
||||||
// Start the server to trigger initialization listeners
|
// Start the server to trigger initialization listeners
|
||||||
this.tomcat.start();
|
this.tomcat.start();
|
||||||
|
|
||||||
|
// We can re-throw failure exception directly in the main thread
|
||||||
|
rethrowDeferredStartupExceptions();
|
||||||
|
|
||||||
Context context = findContext();
|
Context context = findContext();
|
||||||
try {
|
try {
|
||||||
ContextBindings.bindClassLoader(context, context.getNamingToken(),
|
ContextBindings.bindClassLoader(context, context.getNamingToken(),
|
||||||
|
|
@ -140,6 +143,25 @@ public class TomcatWebServer implements WebServer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void rethrowDeferredStartupExceptions() throws Exception {
|
||||||
|
Container[] children = this.tomcat.getHost().findChildren();
|
||||||
|
for (Container container : children) {
|
||||||
|
if (container instanceof TomcatEmbeddedContext) {
|
||||||
|
TomcatStarter tomcatStarter = ((TomcatEmbeddedContext) container)
|
||||||
|
.getStarter();
|
||||||
|
if (tomcatStarter != null) {
|
||||||
|
Exception exception = tomcatStarter.getStartUpException();
|
||||||
|
if (exception != null) {
|
||||||
|
throw exception;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!LifecycleState.STARTED.equals(container.getState())) {
|
||||||
|
throw new IllegalStateException(container + " failed to start");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void startDaemonAwaitThread() {
|
private void startDaemonAwaitThread() {
|
||||||
Thread awaitThread = new Thread("container-" + (containerCounter.get())) {
|
Thread awaitThread = new Thread("container-" + (containerCounter.get())) {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,13 @@ import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import javax.servlet.Filter;
|
||||||
|
import javax.servlet.FilterChain;
|
||||||
|
import javax.servlet.FilterConfig;
|
||||||
|
import javax.servlet.ServletContext;
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.ServletRequest;
|
||||||
|
import javax.servlet.ServletResponse;
|
||||||
import javax.servlet.http.HttpServlet;
|
import javax.servlet.http.HttpServlet;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
@ -45,6 +51,8 @@ import org.mockito.InOrder;
|
||||||
import org.springframework.boot.web.server.Compression;
|
import org.springframework.boot.web.server.Compression;
|
||||||
import org.springframework.boot.web.server.PortInUseException;
|
import org.springframework.boot.web.server.PortInUseException;
|
||||||
import org.springframework.boot.web.server.Ssl;
|
import org.springframework.boot.web.server.Ssl;
|
||||||
|
import org.springframework.boot.web.server.WebServerException;
|
||||||
|
import org.springframework.boot.web.servlet.ServletContextInitializer;
|
||||||
import org.springframework.boot.web.servlet.ServletRegistrationBean;
|
import org.springframework.boot.web.servlet.ServletRegistrationBean;
|
||||||
import org.springframework.boot.web.servlet.server.AbstractServletWebServerFactory;
|
import org.springframework.boot.web.servlet.server.AbstractServletWebServerFactory;
|
||||||
import org.springframework.boot.web.servlet.server.AbstractServletWebServerFactoryTests;
|
import org.springframework.boot.web.servlet.server.AbstractServletWebServerFactoryTests;
|
||||||
|
|
@ -277,6 +285,38 @@ public class JettyServletWebServerFactoryTests
|
||||||
.isSameAs(threadPool);
|
.isSameAs(threadPool);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void faultyFilterCausesStartFailure() throws Exception {
|
||||||
|
JettyServletWebServerFactory factory = getFactory();
|
||||||
|
factory.addInitializers(new ServletContextInitializer() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStartup(ServletContext servletContext) throws ServletException {
|
||||||
|
servletContext.addFilter("faulty", new Filter() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(FilterConfig filterConfig) throws ServletException {
|
||||||
|
throw new ServletException("Faulty filter");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doFilter(ServletRequest request, ServletResponse response,
|
||||||
|
FilterChain chain) throws IOException, ServletException {
|
||||||
|
chain.doFilter(request, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void destroy() {
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
this.thrown.expect(WebServerException.class);
|
||||||
|
factory.getWebServer().start();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("serial")
|
@SuppressWarnings("serial")
|
||||||
// Workaround for Jetty issue - https://bugs.eclipse.org/bugs/show_bug.cgi?id=470646
|
// Workaround for Jetty issue - https://bugs.eclipse.org/bugs/show_bug.cgi?id=470646
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,13 @@ import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import javax.naming.InitialContext;
|
import javax.naming.InitialContext;
|
||||||
import javax.naming.NamingException;
|
import javax.naming.NamingException;
|
||||||
|
import javax.servlet.Filter;
|
||||||
|
import javax.servlet.FilterChain;
|
||||||
|
import javax.servlet.FilterConfig;
|
||||||
|
import javax.servlet.ServletContext;
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.ServletRequest;
|
||||||
|
import javax.servlet.ServletResponse;
|
||||||
|
|
||||||
import org.apache.catalina.Container;
|
import org.apache.catalina.Container;
|
||||||
import org.apache.catalina.Context;
|
import org.apache.catalina.Context;
|
||||||
|
|
@ -51,6 +57,7 @@ import org.mockito.InOrder;
|
||||||
import org.springframework.boot.testutil.InternalOutputCapture;
|
import org.springframework.boot.testutil.InternalOutputCapture;
|
||||||
import org.springframework.boot.web.server.Ssl;
|
import org.springframework.boot.web.server.Ssl;
|
||||||
import org.springframework.boot.web.server.WebServerException;
|
import org.springframework.boot.web.server.WebServerException;
|
||||||
|
import org.springframework.boot.web.servlet.ServletContextInitializer;
|
||||||
import org.springframework.boot.web.servlet.server.AbstractServletWebServerFactory;
|
import org.springframework.boot.web.servlet.server.AbstractServletWebServerFactory;
|
||||||
import org.springframework.boot.web.servlet.server.AbstractServletWebServerFactoryTests;
|
import org.springframework.boot.web.servlet.server.AbstractServletWebServerFactoryTests;
|
||||||
import org.springframework.test.util.ReflectionTestUtils;
|
import org.springframework.test.util.ReflectionTestUtils;
|
||||||
|
|
@ -444,6 +451,38 @@ public class TomcatServletWebServerFactoryTests
|
||||||
assertThat(sessionIdGenerator.getJvmRoute()).isEqualTo("test");
|
assertThat(sessionIdGenerator.getJvmRoute()).isEqualTo("test");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void faultyFilterCausesStartFailure() throws Exception {
|
||||||
|
TomcatServletWebServerFactory factory = getFactory();
|
||||||
|
factory.addInitializers(new ServletContextInitializer() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStartup(ServletContext servletContext) throws ServletException {
|
||||||
|
servletContext.addFilter("faulty", new Filter() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(FilterConfig filterConfig) throws ServletException {
|
||||||
|
throw new ServletException("Faulty filter");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doFilter(ServletRequest request, ServletResponse response,
|
||||||
|
FilterChain chain) throws IOException, ServletException {
|
||||||
|
chain.doFilter(request, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void destroy() {
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
this.thrown.expect(WebServerException.class);
|
||||||
|
factory.getWebServer().start();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected JspServlet getJspServlet() throws ServletException {
|
protected JspServlet getJspServlet() throws ServletException {
|
||||||
Tomcat tomcat = ((TomcatWebServer) this.webServer).getTomcat();
|
Tomcat tomcat = ((TomcatWebServer) this.webServer).getTomcat();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue