启动时中止java webapp

启动时中止java webapp,java,websphere,web-applications,Java,Websphere,Web Applications,我的webapp是部署到websphere服务器的更大EAR的一部分。该服务器在同一虚拟服务器上承载其他应用程序的数量。我的webapp在servletContextListener->contextInitialized方法中进行了一些初始化/运行状况检查。如果初始化/健康检查失败,我想使webapp不可用。什么是可行的方法?从contextInitialized中抛出RuntimeException就足够了吗?耳朵的其余部分还可以使用吗?谢谢。抛出RuntimeException可能只会使该

我的webapp是部署到websphere服务器的更大EAR的一部分。该服务器在同一虚拟服务器上承载其他应用程序的数量。我的webapp在servletContextListener->contextInitialized方法中进行了一些初始化/运行状况检查。如果初始化/健康检查失败,我想使webapp不可用。什么是可行的方法?从contextInitialized中抛出RuntimeException就足够了吗?耳朵的其余部分还可以使用吗?谢谢。

抛出RuntimeException可能只会使该servlet不可用。更安全的方法可能是实现类似Spring拦截器的东西,如果检查没有成功,它将转发到错误页面或其他东西。这样,您不需要阻止应用加载,但可以在运行时更优雅地处理它。

我建议从
ServletContextListener.contextInitialized
抛出
RuntimeException

Servlet 2.3对此不是很清楚,但Servlet 2.4添加了以下细节:

某些例外情况不会发生在 中另一个组件的调用堆栈 应用这方面的一个例子是 …ServletContextListener 在运行期间引发未处理的异常 servlet上下文的通知 初始化…。在这种情况下,, 开发商没有机会 处理异常。容器 可以响应所有后续请求 使用HTTP连接到Web应用程序 状态代码500,表示出现故障 应用程序错误


因为它说servlet引擎“可能”禁用对应用程序的访问,所以您可能会找到一个执行其他操作的服务器。然而,Tomcat和WebLogic都禁用了应用程序,我能想到的唯一合理的方法就是忽略异常。我看不到这样做的容器非常流行,所以您最好自己在WebSphere中测试它。

Glassfish 3.0.1拒绝部署web应用程序,如果ServletContextListener.contextInitialized引发RuntimeException。但是,如果应用程序已经部署,并且在服务器重新启动时引发RuntimeException,GF 3.0.1将拒绝启动(这使得无法使用提供的工具取消部署)。在本例中,我们选择在侦听器中设置ServletContext属性,并在过滤器中输出错误消息。Websphere stil不=(在
运行时异常
错误
期间
#contextInitialized
,它只打印警告消息并继续运行,尽管为任何web请求返回HTTP 500。