Tomcat中的常见JNDI资源

Leh*_*ane 6 java resources tomcat jndi

我在Tomcat(5.5)中运行了几个servlet应用程序.所有servlet都使用通过JNDI共享的公共工厂资源.目前,我可以通过在/conf/server.xml文件中将工厂资源包含为GlobalNamingResource来使一切正常工作,然后让每个servlet的META-INF/context.xml文件包含资源的ResourceLink.XML文件中的代码段包含在下面.注意:我对tomcat并不熟悉,所以我不是说这是一个很好的配置!

但是,我现在希望能够使用RPM自动将这些servlet安装到多个tomcat实例中.RPM将首先将WAR复制到webapps目录,将工厂的jar复制到common/lib目录(这很好).但它还需要确保将工厂资源作为所有servlet的资源包含在内.

全局添加资源的最佳方法是什么?我不太热衷于编写一个进入server.xml文件的脚本,并以这种方式添加资源.有没有办法让我添加多个server.xml文件,以便我可以编写一个新的server-app.xml文件,它会将我的设置连接到server.xml?或者,最好还是将这个JNDI资源添加到所有servlet而不使用server.xml?

ps重新启动服务器不会是一个问题,所以我不介意更改是否自动获取.

谢谢

来自server.xml的代码段

  <!-- Global JNDI resources -->
  <GlobalNamingResources>

  <Resource name="bean/MyFactory"
                auth="Container"
                type="com.somewhere.Connection"
                factory="com.somewhere.MyFactory"/> 
  </GlobalNamingResources> 
Run Code Online (Sandbox Code Playgroud)

整个servlet的META-INF/context.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <ResourceLink global="bean/MyFactory"
                name="bean/MyFactory"
                type="com.somewhere.MyFactory"/>
  </Context>
Run Code Online (Sandbox Code Playgroud)

rtp*_*son 1

从 Tomcat 4 开始,建议不要将任何 JNDI 信息放入server.xml文件中。查看Tomcat 5.5 的文档

对于 Tomcat 5,与 Tomcat 4.x 不同,不建议将元素直接放置在 server.xml 文件中。这是因为它使得修改 Context 配置更具侵入性,因为如果不重新启动 Tomcat 就无法重新加载主 conf/server.xml 文件。

我知道您声称不关心这个,但相信我,您的部署团队会关心,维护团队稍后会感谢您。即使这意味着你最终会感谢自己。

如果您需要在服务器上的所有 Web 应用程序之间共享 JNDI 设置,则应将其放入文件 $CATALINA_HOME/conf/context.xml 中。很可能,该位置已经存在一个现有的 context.xml,但您应该能够编写一个简单的应用程序,通过您最喜欢的语言以及与之捆绑的任何 DOM 构建器来添加资源节点。或者,如果您想坚持使用命令行,请查看这篇文章,其中提供了一些 XML 处理 shell 脚本来帮助您。

祝你好运!

  • 您必须将所有应用程序共享的内容放在“server.xml”中,没有其他方法可以做到这一点,这就是OP正在做的事情,因为他们提到了“&lt;ResourceLink/&gt;” (4认同)