2013-04-25 68 views
2

我是重写EE中的SE应用程序的一部分。我们目前使用JBoss 7.1.3作为我们支持的应用程序服务器,但显然是为了便于携带而尽量减少AS特定的代码。以编程方式Java EE停止应用程序

我们的应用程序的一点背景......它接受来自系统(MDB/Webservice)的处理请求,并通过与许多其他系统接口来满足请求。系统处理审计是数据库驱动的。

现有应用程序中的当前功能是应用程序在数据库连接丢失的情况下关闭以防止未经审计的处理。所以,我一直在四处观察,看看是否有任何标准方式以便携方式重新创建此功能。我想我想知道是否有任何标准方式从应用程序本身编程地停止应用程序,或者如果您有任何关于提供类似功能的想法。

到目前为止,我已经看到可能有方法通过JMX挂钩到JBoss并取消部署应用程序或可能停止MDB交付......但是我担心可移植性,因为它们都是特定于AS的。我不仅关心跨AS的可移植性,甚至跨越不同版本的AS ......因为这些操作的流程似乎已经在不同的JBoss发行版中发生了变化。

回答

0

当你说停止你的意思System.exit(0)的应用程序?你可以做,在JBoss中/ EE代码,只要过的应用程序正在运行的仅是你的(不是共享的JBoss)

如果(在贵公司的其他应用程序或共享的提供者)

    共享
  1. 发送错误响应您服务
  2. 写入日志文件,如果成功则继续服务客户端(日志可以被转移到数据库 - 这不会工作,如果数据库必须是最新的所有的时间)
  3. 使用连接池来维护数据库连接 - >只是让它更好的建议。如果主要不可达,也可以使用备用数据库。再次,这取决于业务/你的特定情况
  4. 要便携和响应 - 与空/空集响应。还有一个状态屏幕 - >告诉客户/支持应用程序和/或事件状态的方式(如db或其他资源在时间和日期之间不可用)。实现:每个API函数都可以首先有一个AOP相交来以通用的方式处理这个问题。
如果你想取消部署可以有一个抽象类的基本设计,然后为每个应用服务器/应用服务器变种版本

。一旦你在应用服务器上几乎认为你会经常改变或增加更多。也许你可以建议这对于未来的JSR/Web/ejb应用程序的功能提供

+0

感谢您的输入以及@Pradeep。本质上,我们的遗留应用程序处理这种情况归结为系统退出。我个人认为,我们不应该停止应用程序,但我们应该阻止关键处理,直到数据库再次可用。感谢您的反馈,并会在讨论中提出。 – Marc 2013-04-26 14:34:40

+0

又增加了一个,并且好奇地想知道你最终做了什么,为什么? – tgkprog 2013-06-05 14:01:52

+1

决定不采取任何措施停止应用程序。由于数据库故障应该在太迟之前终止事务,因此我们决定让它们适当地死亡。 – Marc 2013-11-26 17:36:26

1

我相信如果存在这样的功能,它确实是一个漏洞,因为AS旨在运行多个应用程序。如果在一个这样的共享服务器上,一个应用程序变得流氓,这会导致其他应用程序中断。

尽管如此,您还是可以通过执行shell脚本来获得运行时,只是它不会是一个可移植的代码。

相关问题