2009-08-26 24 views
5

WebSphere 6.1.0.25有沒有辦法阻止企業應用程序由於異常而啓動?我有一個ServletContextListener,我在操作contextInitialized()期間拋出了一個RuntimeException。這將在服務器日誌中生成堆棧跟蹤,但是WebSphere控制檯仍然顯示應用程序已成功啓動,並且仍然可以訪問WAR資源。有沒有一種機制可以阻止WebSphere標記應用程序可以成功啓動,這可以通過in-WAR工件生成?阻止WebSphere上的Java EE應用程序在異常時啓動

我也試着設置一個servlet時加載的啓動,並從的init()拋出一個異常,而這並沒有產生我一直在尋找的效果。

+0

可能的複製 - http://stackoverflow.com/questions/272194/abort-java-webapp-on-startup – 2009-08-26 21:15:37

回答

4

是的,有辦法做到這一點,但我相信它仍然是特定於WebSphere的。幾年前我們遇到了同樣的問題,即使發生嚴重錯誤,需要大量配置的應用程序仍會顯示爲已啓動。唯一的辦法是查看日誌文件並查看是否發生了任何異常(並且Web UI不能很好地工作)。

處理生命週期,這似乎在大多數集裝箱工作的標準方法,是了ServletContextListener但你發現沒有處理啓動錯誤沒有得體的方式。

在WebSphere(反正有幾個版本)中,有一個啓動bean的概念。而不是試圖去解釋它的細節,因爲它在幾年前,我做到了,這是你可以看看這個鏈接http://publib.boulder.ibm.com/inforcenter...

這實質上是允許您創建一個EJB Bean上實現了兩個方法:

public boolean start() { 
    return new Delegate().start(); 
} 

public void stop() { 
    new Delegate().stop(); 
} 

如果返回從它返回一個成功的開始啓動方法true,否則返回false停在控制檯應用程序將表明它未能啓動開始,因此應用程序。我們實現了一個Delegate來完成這個工作,所以如果容器沒有實現啓動Bean,我們可以將它連接到啓動bean或ServletContextListener。

啓動Bean的唯一附加事情是,在WebSphere中,您需要在管理控制檯中啓用啓動Bean服務,否則它們將不會運行,並且您的應用程序不會執行任何初始化,但仍會顯示爲啓動時你嘗試並啓動它。有關於如何從上述頁面做到這一點的信息。

我也確信IBM紅皮書中有關於此的更多詳細信息,但目前似乎找不到它。

+0

感謝您對這個領先。不確定我可以在項目的當前依賴關係圖中找到它,但這是很好的信息。我可能需要在這上面打個招呼,然後設置一個標誌,然後通過servlet過濾器運行所有內容,以便在內部啓動失敗時返回500。 – 2009-08-27 14:06:57

相關問題