Tomcat JNDI查找问题

时间:2011-09-05 06:38:53

标签: java tomcat jndi

我正在尝试在Tomcat中读取属性值。我的计划是使用System.getProperty("LOGPATH")访问该值,其中LOGPATH是我的媒体资源的名称。但是我没有找到在Tomcat中设置System属性值的方法。

我们有什么办法可以在Tomcat中设置System属性吗?

由于我没有获得有关设置System属性的任何文档,我想到使用JNDI访问该值。所以我添加了以下条目

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

之后

<GlobalNamingResources>

server.xml档案中。

我用来查找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)

我现在做错了什么?谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

您还需要在Web应用程序的上下文中使用资源链接。上下文通常放在META-INF / context.xml中,看起来像这样:

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

这“授予”网络应用程序查看特定Environment值的权利。

至于设置系统属性,只需在tomcat / conf / catalina.properties中添加一行,如下所示:

LOGPATH=C:/temp

请注意,系统属性适用于所有网络应用,其中每个网络应用都会控制JNDI条目。

答案 1 :(得分:0)

将它作为web.xml中的init-param,并通过ServetContext访问它。

答案 2 :(得分:0)

我在conf / Catalina / localhost下的上下文文件中编写了我的环境字符串,并将其命名为与我的webapp相同。然后我使用Spring的JndiObjectFactoryBean来检索它。希望这有一些帮助。