防止Java EE应用程序在异常时启动WebSphere

时间:2009-08-26 20:53:06

标签: java-ee websphere

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

我还尝试将servlet设置为load-on-startup,并从init()中抛出异常,这并没有产生我想要的效果。

1 个答案:

答案 0 :(得分:4)

是的,有办法实现,但我相信它仍然是特定于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,则返回成功的start,否则返回false会停止应用程序启动,因此在控制台中应用程序将指示它无法启动。我们实现了一个Delegate来完成工作,所以如果容器没有实现启动bean,我们可以将它连接到启动bean或ServletContextListener。

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

我也相信IBM红皮书中有更详细的信息,但目前我无法找到它。

相关问题