【问题标题】:Prevent Java EE application start on WebSphere on exception防止 Java EE 应用程序在异常时在 WebSphere 上启动
【发布时间】:2009-08-26 20:53:06
【问题描述】:

WebSphere 6.1.0.25 有没有办法防止企业应用程序由于异常而启动?我有一个 ServletContextListener,我操纵它在 contextInitialized() 期间抛出 RuntimeException。这会在服务器日志中生成堆栈跟踪,但是 WebSphere 控制台仍将应用程序显示为成功启动,并且仍然可以访问 WAR 资源。是否有一种机制可以阻止 WebSphere 标记应用程序无法成功启动,这种机制可以由 WAR 中的工件生成?

我还尝试将 servlet 设置为启动时加载,并从 init() 中抛出异常,这并没有产生我想要的效果。

【问题讨论】:

标签: jakarta-ee websphere


【解决方案1】:

是的,有办法做到这一点,但我相信它仍然是特定于 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();
}

如果从 start 方法返回 true,则返回成功启动,否则返回 false 将停止应用程序启动,因此在控制台中应用程序将指示它无法启动。我们实现了一个 Delegate 来完成这项工作,因此如果容器没有实现启动 bean,我们可以将它连接到启动 bean 或 ServletContextListener。

启动 bean 唯一的附加功能是,在 WebSphere 中,您需要在管理控制台中启用启动 bean 服务,否则它们将无法运行,并且您的应用程序不会进行任何初始化,但仍会在您启动时显示为已启动尝试启动它。上面的页面提供了有关如何执行此操作的信息。

我也确信 IBM 红皮书中有关于此的更详细信息,但目前我似乎无法找到它。

【讨论】:

  • 感谢您对此的领导。不确定我能否让它在项目的当前依赖关系图中工作,但这是一个很好的信息。如果内部启动不成功,我可能需要对此进行处理并设置一个标志,然后通过 servlet 过滤器运行所有内容以返回 500。
猜你喜欢
  • 2011-06-27
  • 2011-02-23
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2014-05-20
  • 2015-01-04
  • 2013-02-25
  • 1970-01-01
相关资源
最近更新 更多