2011-09-05 100 views
1

我正在嘗試讀取Tomcat中的屬性值。我的計劃是使用System.getProperty("LOGPATH")訪問該值,其中LOGPATH是我的財產的名稱。但是我沒有找到在Tomcat中設置系統屬性值的方法。Tomcat JNDI查找問題

有沒有什麼辦法可以在Tomcat中設置System屬性?

由於我沒有得到有關設置系統屬性的任何文檔,我想使用JNDI訪問該值。所以,我在server.xml文件中添加以下條目

<Environment name="LOGPATH" type="java.lang.String" value="c:/temp" /> 

<GlobalNamingResources> 

後。

我用於查找的JNDI的代碼是

Context initCtx = new InitialContext(); 
Context envCtx = (Context) initCtx.lookup("java:comp/env/"); 

String path = (String) envCtx.lookup("LOGPATH"); 

當我執行上面的代碼,我得到了下面的錯誤消息。

javax.servlet.ServletException: Name LOGPATH is not bound in this Context 
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825) 
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758) 

然後我說在我的web.xml

<resource-env-ref> 
    <resource-env-ref-name>LOGPATH</resource-env-ref-name> 
<resource-env-ref-type>java.lang.String</resource-env-ref-type> 
</resource-env-ref> 

的條目現在的錯誤信息更改爲

javax.naming.NamingException: Cannot create resource instance 
org.apache.naming.factory.ResourceEnvFactory.getObjectInstance(ResourceEnvFactory.java:99) 

什麼我現在做錯了嗎?感謝您的幫助。

回答

0

使其成爲您web.xml中的init-param,並通過ServetContext訪問它。

+1

我不想這樣做,因爲它會迫使我在每次部署時爲每個環境更改/編輯Web應用程序。 –

0

我在conf/Catalina/localhost下的上下文文件中編寫了我的環境字符串,並將其命名爲我的webapp。然後我用Spring的JndiObjectFactoryBean來檢索它。希望這個對你有幫助。

1

您還需要在您的web應用程序的上下文中的資源鏈接。上下文一般放置在META-INF/context.xml的,將是這個樣子:

<Context> 
    <Resource name="LOGPATH" global="LOGPATH" type="java.lang.String" /> 
</Context> 

這種「授權」 Web應用程序的權利,看到特定Environment值。

至於設置系統屬性,只需添加一條線,像這樣到tomcat/conf目錄/ catalina.properties:

LOGPATH=C:/temp 

不過請注意系統屬性可到爲JNDI條目每個控制的所有Web應用程序web應用程序。