2

我参与了一个在 EE 中重写 SE 应用程序的项目。我们目前使用 JBoss 7.1.3 作为我们支持的应用程序服务器,但显然为了可移植性而尽量减少特定于 AS 的代码。

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

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

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

4

2 回答 2

1

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

不过,您可以通过执行 shell 脚本、获取运行时来做到这一点,只是它并不是真正的可移植代码。

于 2013-04-26T00:37:23.200 回答
0

当您说停止应用程序时,您的意思是 System.exit(0) ?您也可以在 Jboss/EE 代码中执行此操作,只要正在运行的应用程序只是您的(不是共享的 jboss)

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

  1. 向您服务的客户发送错误响应
  2. 写入日志文件,如果成功则继续服务(日志可以传输到数据库 - 如果数据库必须始终是最新的,这将不起作用)
  3. 使用连接池来维护数据库连接 - >只是一个保持它更好的建议。如果 main 无法访问,也可以使用备用数据库。再次,这取决于业务/您的具体情况
  4. 便携且响应迅速 - 以 null/空集响应。还有一个状态屏幕 - > 告诉客户/支持应用程序和/或事件的状态的方式(如 db 或其他资源有时不可用)。实现:每个 API 函数都可以先有一个 AOP 相交,以便以通用方式处理此问题。

如果你想取消部署,可以有一个抽象类的基本设计,然后为每个应用服务器/应用服务器变体提供一个版本。一旦您在应用程序服务器上几乎不认为您会经常更改或添加更多内容。也许你可以向 oracle 建议这个未来的 JSR / web / ejb 应用程序的特性

于 2013-04-26T01:02:24.370 回答