gpt4 book ai didi

servlets - 如何让 ServletContextListener 停止 Java EE 应用程序?

转载 作者:行者123 更新时间:2023-12-02 13:53:01 24 4
gpt4 key购买 nike

我有一个 ServletContextListener,它在我的 Java EE 应用程序启动时执行一些数据库管理功能。它在 JPA 和应用程序的其他部分启动/加载之前在我的应用程序中运行。如果数据库维护失败,我会记录错误。如果数据库维护失败,应用程序将无法正常运行,我想停止该应用程序。

如何从 ServletContextListener.contextInitialized 中优雅且正确地停止应用程序?

下面 Viven 给出的解决方案很接近,但并不完全。当我抛出 RuntimeException 时,Glassfish 处于不一致的状态,其管理控制台无法访问,但某些进程仍在运行并保持端口 3700(IIOP?)打开,从而阻止重新启动。

最佳答案

在监听器中,捕获任何异常并使用 servlet 上下文属性来存储有关错误的标志或其他有用信息。您可能还应该记录一些内容来表明该应用程序无法运行。

此时,您的选择可能取决于应用程序的架构。如果所有请求都由单个 Controller /调度程序 Servlet 处理,则让它的 init 方法检查上下文属性并抛出 UnavailableException 可能是有意义的。请注意,该异常仅适用于引发该异常的特定 servlet。如果您的应用程序包含许多 servlet 或允许直接访问其他资源,这会使该方法更难以管理。

另一种选择是创建一个过滤器来拦截每个请求,检查上下文属性,然后抛出异常。其他变化当然也是可能的。

关于servlets - 如何让 ServletContextListener 停止 Java EE 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6657319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com