Skip to content

Commit 56cb968

Browse files
committed
Make Jetty Server fail when its WebAppContext fails to start
Closes gh-13803
1 parent 912eb53 commit 56cb968

File tree

3 files changed

+41
-1
lines changed

3 files changed

+41
-1
lines changed

spring-boot/src/main/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ protected void doStart() throws Exception {
104104
this.server.start();
105105
this.server.setStopAtShutdown(false);
106106
}
107-
catch (Exception ex) {
107+
catch (Throwable ex) {
108108
// Ensure process isn't left running
109109
stopSilently();
110110
throw new EmbeddedServletContainerException(

spring-boot/src/main/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainerFactory.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,7 @@ protected final void configureWebAppContext(WebAppContext context,
368368
Configuration[] configurations = getWebAppContextConfigurations(context,
369369
initializersToUse);
370370
context.setConfigurations(configurations);
371+
context.setThrowUnavailableOnStartupException(true);
371372
configureSession(context);
372373
postProcessWebAppContext(context);
373374
}

spring-boot/src/test/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainerFactoryTests.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.net.InetAddress;
2121
import java.nio.charset.Charset;
2222
import java.util.Arrays;
23+
import java.util.Collection;
2324
import java.util.Locale;
2425
import java.util.Map;
2526
import java.util.concurrent.TimeUnit;
@@ -28,6 +29,8 @@
2829
import javax.servlet.FilterChain;
2930
import javax.servlet.FilterConfig;
3031
import javax.servlet.ServletContext;
32+
import javax.servlet.ServletContextEvent;
33+
import javax.servlet.ServletContextListener;
3134
import javax.servlet.ServletException;
3235
import javax.servlet.ServletRequest;
3336
import javax.servlet.ServletResponse;
@@ -369,6 +372,42 @@ public void destroy() {
369372
}
370373
}
371374

375+
@Test
376+
public void faultyListenerCausesStartFailure() throws Exception {
377+
JettyEmbeddedServletContainerFactory factory = getFactory();
378+
factory.addServerCustomizers(new JettyServerCustomizer() {
379+
380+
@Override
381+
public void customize(Server server) {
382+
Collection<WebAppContext> contexts = server.getBeans(WebAppContext.class);
383+
contexts.iterator().next().addEventListener(new ServletContextListener() {
384+
385+
@Override
386+
public void contextInitialized(ServletContextEvent sce) {
387+
throw new RuntimeException();
388+
}
389+
390+
@Override
391+
public void contextDestroyed(ServletContextEvent sce) {
392+
393+
}
394+
});
395+
}
396+
397+
});
398+
this.thrown.expect(EmbeddedServletContainerException.class);
399+
JettyEmbeddedServletContainer jettyContainer = (JettyEmbeddedServletContainer) factory
400+
.getEmbeddedServletContainer();
401+
try {
402+
jettyContainer.start();
403+
}
404+
finally {
405+
QueuedThreadPool threadPool = (QueuedThreadPool) jettyContainer.getServer()
406+
.getThreadPool();
407+
assertThat(threadPool.isRunning()).isFalse();
408+
}
409+
}
410+
372411
@Test
373412
public void startFailsWhenThreadPoolIsTooSmall() throws Exception {
374413
JettyEmbeddedServletContainerFactory factory = getFactory();

0 commit comments

Comments
 (0)