2012-02-18 73 views
1

我正在編寫一個由Tomcat 6託管的JSF 2.1 Web應用程序。如何向Tomcat提供複雜的運行時參數?

在運行時,我想檢索一組與外部服務相關的複雜參數。

在開發時,我不知道這些參數會是什麼,或者會有什麼樣的參數。

參數將由我們的操作人員設置,因此必須在.war文件之外定義。

我認爲context.xml會有所幫助(即TOMCAT_HOME/conf/Catalina/localhost/MyWebApp.xml),但是這隻能接受標量參數,並且似乎沒有任何方法可以迭代它們。

這是我想在運行時訪問的一個例子。

<services> 
    <service id="bbc" name="BBC Weather" url="http://www.bbc.co.uk/weather/" /> 

    <service id="underground" name="Weather Underground" url="http://www.wunderground.com/weather/api/"> 
     <login username="test" password="test" /> 
    </service> 

    <service id="network" name="The Weather Network" url="http://www.theweathernetwork.com/"> 
     <method type="post" /> 
    </service> 
</services> 

有沒有萬無一失的方法,我可以編程方式獲得對TOMCAT_HOME/conf/Catalina/localhost/MyWebApp.xml訪問?我知道how to get the path to TOMCAT_HOME,但我們的操作人員可能會選擇更改Tomcat主機或引擎名稱。

作爲一種解決方法,我總是可以按如下方式向context.xml中編寫單個參數。

<Parameter name="config.file" value="C:/Program Files/Apache Software Foundation/Tomcat 6.0/conf/Catalina/localhost/MyConfigFile.xml" /> 

但是,這也是錯誤的加分,在安裝說明一個額外的步驟,需要維護等

我敢肯定,必須有一個簡單的方法來做到這一點,有什麼我錯過了嗎?

在此先感謝,亞當。

回答

2

創建自己的XML文件,並把它放在通過Tomcat的默認運行時類路徑覆蓋如Tomcat/lib現有的路徑之一,或者在Tomcat的/conf/catalina.propertiesshared.loader財產指定它的路徑添加到運行時類路徑。

一旦它在類路徑中,您可以通過類加載器來獲得它。

ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
InputStream input = loader.getResourceAsStream("services.xml"); 
// ... 
相關問題