2009-08-26 62 views
5

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

我也试着设置一个servlet时加载的启动,并从的init()抛出一个异常,而这并没有产生我一直在寻找的效果。

+0

可能的复制 - http://stackoverflow.com/questions/272194/abort-java-webapp-on-startup – 2009-08-26 21:15:37

回答

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(); 
} 

如果返回从它返回一个成功的开始启动方法true,否则返回false停在控制台应用程序将表明它未能启动开始,因此应用程序。我们实现了一个Delegate来完成这个工作,所以如果容器没有实现启动Bean,我们可以将它连接到启动bean或ServletContextListener。

启动Bean的唯一附加事情是,在WebSphere中,您需要在管理控制台中启用启动Bean服务,否则它们将不会运行,并且您的应用程序不会执行任何初始化,但仍会显示为启动时你尝试并启动它。有关于如何从上述页面做到这一点的信息。

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

+0

感谢您对这个领先。不确定我可以在项目的当前依赖关系图中找到它,但这是很好的信息。我可能需要在这上面打个招呼,然后设置一个标志,然后通过servlet过滤器运行所有内容,以便在内部启动失败时返回500。 – 2009-08-27 14:06:57

相关问题