java - 在 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")
?
解决方案
我正在重新审视这个(我是提问者)。受这个答案的启发,我决定实施 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/
命名空间中的所有名称,以制作更通用的侦听器。现在我只是绑定单个名称,因为应用程序使用的名称很少。
推荐阅读
- git - --skip-worktree 不会让我更改分支
- xml - Schematron 快速修复问题
- python - ImportError: No module with Popen subprocess other file in the same folder from terminal/cron
- ballerina - Ballerina V 1.0 - 从文件中获取配置值
- bash - bash 试图将变量传递给 curl 命令
- reactjs - 如何在网格列中显示数据
- asp.net - 如何从 dotnet core 3.0 中的 HttpContext.Request 获取 applicationPath
- python - teradatasql Python 模块仅在编写脚本时有效,但在运行代码时无效
- arrays - 将值分配给数组中的每个其他索引
- c++ - 致命错误 C1083:无法打开包含文件:'GL/glew.h':没有这样的文件或目录