Java EE以编程方式停止应用程序

时间:2013-04-25 16:04:37

标签: java-ee

我是在EE中重写SE应用程序的项目的一部分。我们目前正在使用JBoss 7.1.3作为我们支持的应用程序服务器,但显然是为了便于移植而尝试最小化AS特定代码。

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

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

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

2 个答案:

答案 0 :(得分:1)

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

但是,您可以通过执行shell脚本,通过获取运行时来实现它,只是它不是真正的可移植代码。

答案 1 :(得分:0)

当你说停止应用程序时你的意思是System.exit(0)?你可以在Jboss / EE代码中做到这一点,只要运行的应用程序只是你的(不是共享的jboss)

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

  1. 向您所服务的客户发送错误回复
  2. 写入日志文件,如果成功则继续服务(日志可以转移到数据库 - 如果db必须一直是最新的,这将不起作用)
  3. 使用连接池来维护数据库连接 - >只是建议保持更好。如果main无法访问,也可以使用备用数据库。再次,这取决于业务/您的特定情况
  4. 要便携和响应 - 使用null / empty设置进行响应。还有一个状态屏幕 - >告诉客户/支持应用程序和/或事件状态的方式(如数据库或其他资源在时间上不可用)。实现:每个API函数都可以首先使用AOP相交来以常见方式处理它。
  5. 如果要取消部署,可以具有一个抽象类的基本设计,然后是每个应用服务器/应用服务器变体的版本。一旦你在app服务器上几乎没有想到你会改变或增加更多,经常。也许你可以向oracle建议这个未来的JSR / web / ejb应用程序的功能