Tomcat中的常见JNDI资源

时间:2010-02-23 12:23:39

标签: java tomcat resources 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?

P.S。重新启动服务器不会成为问题,所以我不介意更改是否自动获取。

由于

来自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 个答案:

答案 0 :(得分:1)

自Tomcat 4以来,建议不要在 server.xml 文件中放置任何JNDI信息。检查Tomcat 5.5's documentation

  

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

我知道您声称不关心这一点,但相信我,您的部署团队会这样做,维护团队会在以后感谢您。即使这意味着你最终还是要感谢自己。

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

祝你好运!

答案 1 :(得分:1)

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

答案 2 :(得分:0)

这不会直接回答您的问题,但您是否考虑将所有配置放在 context.xml 文件中,而不是放在 server.xml 中?这使您的Web应用程序更加完全自包含,这对您的部署要求非常重要。

如果目前无法做到这一点,我还是可以考虑进行必要的重构以确保您的应用程序完全自包含。

参与了我部署/ common / lib JAR和公共资源的项目,并被他们以混乱和微妙的方式被他们咬了(我最终发现这些总是我自己的错,顺便说一句,而不是责怪Tomcat),我现在支持对我的webapps采取完全保护的方法:让它们完全独立。

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

答案 3 :(得分:0)

这就是我要做的,我正在使用Maven 3,我会将server.xml放在我的resources目录或其他目录中,我可以运行filter并动态替换和在我做包时生成一个合适的server.xml。然后,您可以使用maven-rpm-plugin并自动生成rpm。