我在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>
答案 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。