代码之家  ›  专栏  ›  技术社区  ›  Susannah Potts

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

  •  2
  • Susannah Potts  · 技术社区  · 9 年前

    我有一个servlet,它有一个类,需要引用Tomcat 8的全局JNDI资源中的值。我已经在Tomcat服务器中定义了资源。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?

    1 回复  |  直到 9 年前
        1
  •  3
  •   Susannah Potts    9 年前

    对于其他有同样问题的人,我找到了解决办法。

    <Environment> 应该在Tomcat上下文中定义。xml文件。这是您必须对值进行的唯一定义。

    在代码内部,您应该这样称呼它:

    Context ctx = new InitialContext();
    value = (valuetype) ctx.lookup("java:/comp/env/valueName");