2011-09-05 87 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应用程序。