2013-12-18 17 views
4

我試圖從語法上確定我的程序是在Jboss 5還是Jboss 7(eap-6.1)上運行的最佳方式。到目前爲止,我一直在尋找的方式是jboss 5或者jboss 7,這是行不通的,因爲代碼必須同時工作。嘗試從這裏兩個解決方案:How do I programmatically obtain the version in JBoss AS 5.1?,他們沒有工作。一個抱怨org.jboss.Main不存在於jboss 7中,另一個抱怨aobut沒有找到「jmx/rmi/RMIAdaptor」。以jboss編程方式確定jboss 5和7之間的版本

我可以看到的唯一方法是做Class.forName以查找「org.jboss.Version」(應該在jboss 5中找到),如果失敗,請執行Class.forName「org.jboss.util。 xml.catalog.Version「(jboss 7)。但這似乎是一個可怕的想法。

我需要知道戰爭是在jboss 5或7上運行的原因是因爲有一些自定義文件位於兩個不同的地方。所以,這就像「如果JBoss的5,執行這段代碼,如果JBoss的7執行等。

+0

我真的對這個問題的感覺很感興趣。唯一可以相信的是讓應用程序與所有服務器兼容。這在我看來完全不可能。請告訴我更多關於你的意圖。 – Diversity

+0

那麼,應用程序正在尋找另一個戰爭文件。在jboss 5上,它在jboss 7的「部署」中,它位於「部署」文件夾中。我想另一種方法,我可以做到這一點只是檢查「jboss.server.base.dir」內的一個或其他文件夾 – Creature

+0

我剛剛更新了我的最新答案 – Diversity

回答

2

好吧,我剛剛看到了什麼問題。

我建議你考慮設計問題/重構你的軟件。

如果您想在不同的環境中提供您的軟件,請將您的邏輯與 之間的技術依賴關係分開。

構建面向接口以滿足環境要求。

在我看來,這更好地認爲我們必須支持所有集成平臺並支持所有版本。這完全不可能。

因此解耦您的業務邏輯並提供特定的接口。這些接口(適配器)的實現和維護非常簡單。

希望它有幫助。


更新由於評論。


我認爲一個解決方案是服務器4〜6是使用JBoss的 的MBean服務器查找其相關聯的部署WarFile註冊的Web應用程序 。

我建議首先使用JBoss jmx控制檯手動查找Web應用程序的註冊MBean。 Web應用程序的名稱應該在jmx控制檯中的大寫「web」或「web-deployment」下找到。

如果您發現該名稱,您可以實現一個基於jmx的查找機制 來檢查該名稱。

這是一個教程:很老,但我認爲它給你一個想法如何做。 必須有此問題的詳細教程:

http://www.theserverside.com/news/1364648/Using-JMX-to-Manage-Web-Applications

在JBoss的7我可以給你,它的架構是基於OSGI的提示。所以要查找其他服務,你應該看看這個機制。

在任何情況下,您都無法直接訪問文件系統和部署目錄 ,這些應用程序部署在JEE容器中,但使用容器提供的機制的 除外。 JNDI查找,JMX ManagedBean機制,Java連接器Archicture(JCA)(在你的情況下沒有任何意義)

1

這不是一個答案只是一個建議,因爲實現是完全不同的

的一種方法是使用」這是引導過程中,你可以訪問換句話說EJB容器調用上下文之前的任何EJB調用和那裏執行攔截器」。

我不能給你任何的例子,但這將是一個接入點開始。

另一個接入點是通過查看系統範圍的JMX Beans JBoss服務器的管理員控制檯。 您可以通過Context Mechansim將JMX Bean狀態注入到您的應用程序中。 在JMX Managed Bean機制中查看版本4到6。 JMX Achitecture是JBoss 3到6的主要概念,因此您可以影響和維護JBoss行爲。

此外,我認爲你有4到6.x版本和7.0的區別,因爲從 7它是一個全新的體系結構。從7.0開始,JMX體系結構再也不存在了。