2009-07-29 52 views
4

我在JBoss中實現了一個基於EJB的系統。JBoss/EJB - 定製配置文件的位置

我的一個消息驅動bean將負責發送電子郵件。我希望將電子郵件模板存儲在外部(可能爲XML),以便在不更改代碼/重新部署bean等情況下輕鬆更改電子郵件模板。

此文件應該放在哪裏以及如何引用它?

回答

2

JBoss文檔指定環境變量jboss.server.data.dir是「可供希望在文件系統中存儲內容的服務使用的位置」。有關更多詳細信息,請參閱here。 您可以通過

System.getProperty("jboss.server.data.dir"); 

得到變量的值,如圖中的鏈接,服務器/ [配置]/data目錄中的位置將被退回。在部署應用程序時將模板文件存儲在那裏,並指示管理員在那裏修改它。

+0

剛試過這個成功。這對我們來說似乎是最好的解決方案 - 但是我有點困惑,因爲我認爲它違背了EJB規範能夠訪問文件系統? – William 2009-08-06 18:04:17

1

這個question和這個blog post是指屬性文件,但是討論的內容也適用於其他類型的文件。一個解決方案是將XML文件放置在一個標準的位置,這樣(從上面的鏈接採取代碼)閱讀:

String path = System.getProperty("catalina.base") 

        + System.getProperty("file.seperator") 

        + "YOUR_FILE.properties"; 

FileInputStream fis = new FileInputStream(path); 

相反catalina.base,你可以使用user.dir來,甚至定義自己環境變量(mypath_to_xml_file)並使用System.getProperty讀取它。

另一個解決方案是使用JNDI來定義文件的路徑。

0

或者把它放在一個數據庫中,你可以通過SQL客戶端獲取它。在啓動時加載它或者輪詢檢查時間戳更改並重新加載它。

你是指什麼樣的模板?它是一個Velocity模板,你以郵件合併的方式填充?
我喜歡關於數據庫設計的一件事情是,您可以向超過單純文件的模式添加更多信息。您可以包含時間戳,更新模板的人員的用戶ID,版本,元數據,系統名稱,布爾值以指示「實時」或「休眠」等。您的EJB可以非常聰明地選擇哪個模板。如果您只是將文件停放在服務器驅動器上,您可能會發現自己擁有的選擇甚至超出您的選擇範圍。它們也可以用於其他應用程序。如果你運行一點點,可能是一個不錯的設計。

如果將其添加到爆炸部署的WEB-INF/classes目錄中,可以使用「getResourceAsStream()」輕鬆引用它。如果您不想要退回服務器,請添加輪詢功能。