2011-12-27 40 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