配置上下文查找以查找Tomcat 8上的JNDI资源环境



我有一个servlet,其中有一个类需要引用Tomcat 8的全局JNDI资源中的值。我在Tomcat server.xml文件中定义了资源,如下所示:

<GlobalNamingResources>
<Environment name="MAX_LANDMARK_RESULT" value="100000" type="java.lang.Integer" override="false"/>
</GlobalNamingResources>

我在webapp context.xml中定义了资源链接:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/pathname">
    <ResourceLink name="MAX_QUERY" global="MAX_LANDMARK_QUERY" type="java.lang.Integer"/>
</Context>
我还在servlet web.xml中定义了引用:
<resource-env-ref>
        <resource-env-ref-name>MAX_LANDMARK_QUERY</resource-env-ref-name>
        <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
</resource-env-ref>

,我试图在我的servlet中引用它,像这样:

try {
        Context ct = new InitialContext();
        Context ctx = (Context) ct.lookup("java:comp/env");
        MAX_QUERY_SIZE = (Integer)ctx.lookup("MAX_QUERY");
    } catch (NamingException ex) {
        MAX_QUERY_SIZE = 99999;
    }

我已经三次检查了我如何设置XML文件,它们应该是正确的,所以我确信问题来自我如何定义ct.lookup("java:comp/env");行。我如何定义它,使它找到正确的资源,而不是抛出一个NamingException?

编辑:因此,我一直在深入调试器并检查我的上下文,MAX_QUERY显示为链接到MAX_LANDMARK_QUERY的继承资源链接。我应该做一些特殊的时候,拉资源链接,使它引用MAX_LANDMARK_QUERY在我的代码?

对于任何有同样问题的人,我找到了一个解决方案。

<Environment>应该在Tomcat context.xml文件中定义。这是您必须为值做出的唯一定义。

在你的代码中,你应该这样调用它:
Context ctx = new InitialContext();
value = (valuetype) ctx.lookup("java:/comp/env/valueName");

相关内容

  • 没有找到相关文章

最新更新