2011-12-27 43 views
6

我正在启动包含单个Web应用程序的嵌入式Jetty实例。该webapp启动时启动。 我想知道如何检测Web应用程序的contextInitialized是否抛出异常。码头:检测Webapp是否无法启动

当webapp引发异常时,Server.start()不会,server.isRunning()返回true。有没有办法让我从容器外部听Web应用程序异常?

回答

5

回答我自己的问题。

设置WebAppContext.setThrowUnavailableOnStartupException(true)会导致服务器将任何webapp例外传播到Server.start()。我猜在服务器启动后,你也可以调用WebAppContext.isFailed()来检查个别上下文。

+0

在Jetty 9方法'WebAppContext.setThrowUnavailableOnStartupException(true)'中,但您可以检查webapp是否可用于'webappContext.isAvailable()',并且在启动时可能会出现'webappContext.getUnavailableException()'错误。 – reap 2013-12-19 08:43:43

+0

org.eclipse.jetty.deploy.DeploymentManager requestAppGoal方法不会重新抛出异常,它只会记录由org.eclipse.jetty.webappWebAppContext.java.doStart()生成的异常堆栈跟踪。那么,它如何传播到Server.start()呢? – quintin 2017-12-06 07:52:42

4

我偶然发现了这个试图使这个工作为非嵌入式的解决方案。如果有任何人拥有类似的船,这种情况下的解决方案是创建WEB-INF/jetty-env.xml具有以下内容:如预期

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> 

<Configure class="org.eclipse.jetty.webapp.WebAppContext"> 
    <Set name="throwUnavailableOnStartupException">true</Set> 
</Configure> 

服务器将在一个异常失败的启动。

+0

注意:该DTD对于Jetty 9.3+无效。 – 2017-03-13 23:07:38