2013-04-25 63 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腳本來獲得運行時,只是它不會是一個可移植的代碼。