代码之家  ›  专栏  ›  技术社区  ›  Lehane

Tomcat中的常见JNDI资源

  •  6
  • Lehane  · 技术社区  · 15 年前

    我在Tomcat(5.5)中运行了几个servlet应用程序。所有servlet都使用一个使用JNDI共享的通用工厂资源。目前,我可以通过将工厂资源作为全局动态资源包含在/conf/server.xml文件中,然后让每个servlet的meta-inf/context.xml文件包含指向该资源的资源链接来获得所有工作。下面包含XML文件中的代码段。注意:我对Tomcat不太熟悉,所以我没有说这是一个好的配置!!!

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

    在全球添加资源的最佳方式是什么?我不太热衷于编写一个脚本,该脚本将进入server.xml文件并以这种方式添加到资源中。 是否有任何方法可以添加多个server.xml文件,以便编写一个新的server-app.xml文件,并将设置连接到server.xml?或者,最好还是在根本不使用server.xml的情况下将这个JNDI资源添加到所有servlet中?

    另外,重新启动服务器不会是一个问题,所以我不介意这些更改是否会自动恢复。

    谢谢

    server.xml中的代码段

      <!-- Global JNDI resources -->
      <GlobalNamingResources>
    
      <Resource name="bean/MyFactory"
                    auth="Container"
                    type="com.somewhere.Connection"
                    factory="com.somewhere.MyFactory"/> 
      </GlobalNamingResources> 
    

    整个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>
    
    4 回复  |  直到 13 年前
        1
  •  1
  •   rtperson    14 年前

    自Tomcat4以来,建议不要在 服务器.xml 文件。检查 Tomcat 5.5's documentation :

    对于Tomcat 5,与Tomcat 4.x不同,它是 不建议放置 直接在server.xml中的元素 文件。这是因为它 修改上下文配置 更具侵略性 conf/server.xml文件不能 重新加载而不重新启动Tomcat。

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

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

    祝你好运!

        2
  •  1
  •   Riccardo Cossu    13 年前

    实际上,我们有一个例子,我们不能将JDBC配置放在战争中:客户永远不会让我们知道生产服务器的用户名和密码,所以我们必须在全局服务器配置中定义数据源,并在应用的context.xml中放置一个链接,就像OP那样。 全局配置可以放在server.xml或tomcat的context.xml中(第二种方法似乎是Windows平台上的首选方法)。

        3
  •  0
  •   Brian    15 年前

    这并不能直接回答您的问题,但您是否考虑将所有配置放入 上下文XML 文件,而不是 服务器XML ?这使您的Web应用更加独立,这听起来对您的部署需求很重要。

    我想说的是,如果目前不能做到这一点,那么考虑任何必要的重构,以确保您的应用程序能够完全独立。

    我在部署了/common/lib jar和公共资源的项目上工作过,并以令人困惑和微妙的方式被它们咬伤(我最终发现这些都是我自己的错,顺便说一句,并没有把责任归咎于tomcat),现在我赞成对我的webapps采用一种完全保护的方法:让它们完全独立。

    但我当然不完全了解你的情况,只是一些建议。

        4
  •  0
  •   user177800    13 年前

    这就是我要做的,我正在使用Maven 3,我会把 server.xml 在我的 resources 目录或其他可以运行的目录 filter 动态替换并生成适当的 服务器XML 当我做包裹的时候。然后您可以使用MavenRPM插件并自动生成RPM。