Merge branch '2.0.x'

This commit is contained in:
Andy Wilkinson
2018-07-18 11:22:15 +01:00
3 changed files with 43 additions and 1 deletions

View File

@@ -223,6 +223,7 @@ public class JettyServletWebServerFactory extends AbstractServletWebServerFactor
Configuration[] configurations = getWebAppContextConfigurations(context,
initializersToUse);
context.setConfigurations(configurations);
context.setThrowUnavailableOnStartupException(true);
configureSession(context);
postProcessWebAppContext(context);
}

View File

@@ -107,7 +107,7 @@ public class JettyWebServer implements WebServer {
this.server.start();
this.server.setStopAtShutdown(false);
}
catch (Exception ex) {
catch (Throwable ex) {
// Ensure process isn't left running
stopSilently();
throw new WebServerException("Unable to start embedded Jetty web server",

View File

@@ -20,9 +20,13 @@ import java.net.InetAddress;
import java.nio.charset.Charset;
import java.time.Duration;
import java.util.Arrays;
import java.util.Collection;
import java.util.Locale;
import java.util.Map;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.jasper.servlet.JspServlet;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Handler;
@@ -41,6 +45,7 @@ import org.mockito.InOrder;
import org.springframework.boot.web.server.PortInUseException;
import org.springframework.boot.web.server.Ssl;
import org.springframework.boot.web.server.WebServerException;
import org.springframework.boot.web.servlet.server.AbstractServletWebServerFactory;
import org.springframework.boot.web.servlet.server.AbstractServletWebServerFactoryTests;
@@ -296,6 +301,42 @@ public class JettyServletWebServerFactoryTests
.isEqualTo(localhost.getHostAddress());
}
@Test
public void faultyListenerCausesStartFailure() throws Exception {
JettyServletWebServerFactory factory = getFactory();
factory.addServerCustomizers(new JettyServerCustomizer() {
@Override
public void customize(Server server) {
Collection<WebAppContext> contexts = server.getBeans(WebAppContext.class);
contexts.iterator().next().addEventListener(new ServletContextListener() {
@Override
public void contextInitialized(ServletContextEvent sce) {
throw new RuntimeException();
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
});
}
});
this.thrown.expect(WebServerException.class);
JettyWebServer jettyWebServer = (JettyWebServer) factory.getWebServer();
try {
jettyWebServer.start();
}
finally {
QueuedThreadPool threadPool = (QueuedThreadPool) jettyWebServer.getServer()
.getThreadPool();
assertThat(threadPool.isRunning()).isFalse();
}
}
@Override
protected JspServlet getJspServlet() throws Exception {
WebAppContext context = (WebAppContext) ((JettyWebServer) this.webServer)