2012-03-06 72 views
5

Tomcat文档(http://tomcat.apache.org/tomcat-6.0-doc/config/context.html)的Tomcat的context.xml更新,但不应该

只有一个上下文文件不存在在 /META-INF/context.xml中的应用程序文件中,应用程序中的应用程序为 $ CATALINA_BASE/conf/[enginename]/[hostname] /。如果Web 应用程序打包为WAR,则将/META-INF/context.xml复制到$ CATALINA_BASE/conf/[enginename]/[hostname] /并将 复制到 以匹配应用程序的上下文路径。 一旦这个文件存在,如果新的/META-INF/context.xml中的新WAR被置于主机的appBase中,它将不会被替换为 。

粗体文本很清楚。但我通知并非如此。 (我需要的正是这种行为)

通过以下步骤:

  1. aaa.war与context.xml中纳入META-INF
  2. 副本的webapps。 tomcat部署。通过改变META-INF/context.xml的
  3. 副本的webapps
  4. 文件conf\Catalina\localhost\aaa.xml文件conf\Catalina\localhost\aaa.xml OK
  5. 变化aaa.war改变!

出了什么问题?它是一个错误还是隐藏的功能?

背景 - 我想解决的问题:

独立于配置的构建和安装。我种植战争文件。客户端使用他自己的设置来配置他的Tomcat。当我发布新版本时,我只是在没有配置的情况下交付战争,部署时将使用客户端特定的配置。

通过文档,最好的地方是context.xml但是如果它每次被覆盖,根本没有意义。 (我为什么要使用JNDI和这样的事情,如果新的交付创建已更改的集结时间的东西是不是一个很大的优势配置?)

环境:Windows下,Tomcat 6.0.33

+0

相似问题:http://stackoverflow.com/questions/4158468/tomcat-context-management – takacsot 2012-03-06 18:26:32

+0

已在本网站提出的答案:http://stackoverflow.com/questions/7142365/how-to-provide-a -context配置换一个-web的应用程序下的Tomcat – takacsot 2012-03-06 18:31:15

回答

6

我已经遇到同样的问题,文件至少不够,如果不是直接误导。

问题是,如果您将已部署的WAR文件的新版本复制到webapps目录,Tomcat将不会重新部署现有应用程序,而是取消部署旧应用程序,然后部署新应用程序。这种差异可能首先看起来并不重要,但问题是在取消部署旧应用程序时,conf/Catalina/localhost中的任何上下文文件也会被删除。然后,在部署新应用程序的过程中,当前WAR文件中的新上下文文件将被复制到conf/Catalina/localhost。

我发现的唯一可行的解​​决方案不是将新应用程序部署为WAR文件,而是替换或覆盖扩展的目录,例如,不要将aaa.war复制到webapps /,而是将aaa.war直接解压到webapps/aaa /中。

相关问题