如果在應用程序初始化期間發生異常,是否有任何方法可以阻止Java EE應用程序啓動?基本上我正在尋找一種方法,在應用程序初始化期間,從應用程序的ServletContextListener
或Singleton
Startup
bean中引發未處理的異常,從而使應用程序輸入「j2ee.state.failed
」狀態(每JSR-77)。Java EE應用程序啓動失敗
EJB specification似乎表明,如果在初始化一個Singleton
bean期間發生異常,應用程序將繼續啓動並且運行時沒有錯誤;但是,只有bean本身可能處於無法調用的狀態。不幸的是,這不是我正在尋找的行爲。
4.8.4辛格爾頓錯誤處理辛格爾頓初始化期間發生
錯誤被認爲是致命的,必須導致Singleton實例的丟棄。可能的初始化錯誤包括注入失敗,從
PostConstruct
方法拋出的系統異常,或方法容器管理事務成功提交的PostConstruct
失敗。如果單例初始化失敗,對Singleton的嘗試調用將導致第3.4.3節和第3.4.4節定義的異常。
的Servlet specification是在它的要求更加模糊一點,似乎不要求容器以任何特定方式來運轉,而僅是暗示(通過使用術語「可以」),該幅材模塊繼續啓動,但任何請求都應導致內部服務器錯誤。再次,這不幸的不是我正在尋找的行爲。爲什麼Web應用程序如果無法處理任何請求,會繼續啓動並顯示爲正在運行?
11.6監聽器異常
該容器可以對所有後續請求與HTTP狀態代碼500中的Web應用程序來指示應用程序的錯誤響應。
根據我的經驗,我已經看到了應用服務器不同的方式處理這一要求。一些容器實際上會阻止應用程序在這些情況下啓動,而其他容器只會抑制異常並按照規範中的建議迴應500個錯誤的請求。
我忽略了規範的任何部分,如果在初始化過程中發生異常,會阻止應用程序啓動?
+1;好問題。這也是我的經驗 - 它們的做法有所不同...... – home