首页 > 解决方案 > 在 Tomcat 上的 java:comp/env 之外查找 JNDI 名称?

问题描述

我正在使用最初为 IBM WebSphere 设计的应用程序,但我还想将它托管在 Tomcat 上。该应用程序无法更改,并且正在执行一个new InitialContext().lookup("servername")在 WebSphere 上工作的应用程序。

但是在 Tomcat 上,当我<Environment>在特定于应用程序的上下文 xml 中指定名称时,它们的前缀是java:comp/env,并且上面的查找找不到这些名称。

它将在容器中运行,因此server.xml如果我必须更新,当然也可以更新应用程序特定的上下文 xml。

如何让 Tomcat 返回一个字符串lookup("servername")

标签: javatomcatjndi

解决方案


我正在重新审视这个(我是提问者)。受这个答案的启发,我决定实施 a ServletContextListener

总之,您不能让 Tomcat 将环境资源放在外面,java:comp/env/但您可以从那里读取它们并“在任何地方”重新分配它们。

当 ServletContext 被初始化时,我的监听器只是重新绑定它们:

    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        Context ctx = new InitialContext();
        ctx.bind("servername", ctx.lookup("java:comp/env/servername"));
    }

这是一个更好的解决方案——它不会摆弄部署上下文之外的任何东西。

也可能只重新绑定comp/env/命名空间中的所有名称,以制作更通用的侦听器。现在我只是绑定单个名称,因为应用程序使用的名称很少。


推荐阅读