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

标签 java tomcat servlets jndi tomcat8

我有一个 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");

关于java - 配置上下文查找以查找 Tomcat 8 上的 JNDI 资源环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31437564/

相关文章:

Apache Tomac Web 服务器和 LOG4J 框架

java - 加载类时出错 [org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor]

java - 如何使用requestDispatcher重定向到jsp页面?

java - 单击提交按钮后如何运行多个 servlet?

java - FrameLayout onClick 事件不起作用

java - 我想为所有环境 DEV/UAT/PROD 单独部署 WAR 文件,但我有属性文件的依赖性让我知道我将如何做?

java - 尝试制作一个基本的 webview android 应用程序-启动时崩溃

java - Web.xml 异常类型

java - 我们可以将 ojdbc14.jar 与 Oracel11g 和 jdk1.5 一起使用吗

java - 如何更新sqlite数据库,只需要更改一个字段