tomcat 6中特定于上下文的JNDI参数问题

scu*_*uro 9 tomcat jndi

在Tomcat 6上部署两个或更多应用程序时,我无法使用JNDI.请考虑以下情形:我有2个webapps,其中每个web.xml包含一个JNDI参数.

web.xml webapp A:

<env-entry>
<env-entry-name>testEntry</env-entry-name>
<env-entry-value>value A</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>

web.xml webapp B:

<env-entry>
<env-entry-name>testEntry</env-entry-name>
<env-entry-value>value B</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>

当我部署两个webapps并查找testEntry的值时,两个 webapps都返回值A.似乎只有第一个加载的web.xml中的JNDI参数可用.根据我对JNDI的理解,每个web.xml都包含webapp特定的JNDI值,这些值仅在各自的上下文中可用.我在做什么/想错了?

这导致了我的下一个问题.如何定义所有上下文中可用的全局JNDI参数?在tomcat文档中,我读过你应该使用{CATALINA_HOME} /conf/context.xml来达到这个目的.但环境条目在上下文中不可用.将它们放在{CATALINA_HOME} /conf/web.xml中使它们可以全局访问,但我怀疑这是正确的方法.

这是我的Java代码来查找它们:

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

任何帮助都会受到欢迎,因为关于JNDI的好文档是伤痕.

tom*_*ger 0

从您给出的示例中,我认为“值 A”只能为 webapp A 定义(并可从 webapp A 访问),反之亦然。

一种实现方法是将它们定义为每个 Web 应用程序的 META-INF/context.xml 文件中的上下文参数(而不是 JNDI 资源),如此处所述。如果这样做,您可以确保每个参数只能从其自己的 Web 应用程序访问。