如果在应用程序初始化期间发生异常,是否有任何方法可以阻止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