【问题标题】:Tomcat updates context.xml but should notTomcat 更新 context.xml 但不应该
【发布时间】:2012-03-24 06:24:01
【问题描述】:

Tomcat 文档 (http://tomcat.apache.org/tomcat-6.0-doc/config/context.html)

仅当应用程序的上下文文件不存在时 $CATALINA_BASE/conf/[enginename]/[hostname]/,在一个单独的文件中 /META-INF/context.xml 在应用程序文件中。如果网络 应用程序被打包为 WAR 然后 /META-INF/context.xml 将是 复制到 $CATALINA_BASE/conf/[enginename]/[hostname]/ 并重命名为 匹配应用程序的上下文路径。 一旦该文件存在,它将 如果具有较新 /META-INF/context.xml 的新 WAR 被替换 放置在宿主的appBase中。

粗体字清晰。但我通知不正确。 (我正是需要这种行为)

以下是步骤:

  1. 带有 context.xml 的 aaa.war 包含在 META-INF 中
  2. 复制到网络应用程序。 Tomcat 部署。文件conf\Catalina\localhost\aaa.xml好的
  3. 通过更改 META-INF/context.xml 来更改 aaa.war
  4. 复制到网络应用程序
  5. 文件conf\Catalina\localhost\aaa.xml已更改!!!

怎么了?是错误还是隐藏功能?

背景 - 我要解决的问题:

配置独立的构建和安装。我厂出货战争档案。客户端使用他自己的设置来配置他的 Tomcat。当我发布一个新版本时,我只是在没有配置的情况下交付战争,而在部署时它将使用客户端特定的配置。

根据文档,最好的地方是 context.xml 但如果每次都将其覆盖,则使用起来毫无意义。 (如果必须创建新的交付物,我为什么要使用 JNDI 之类的东西?在构建时更改某些东西并不是一个很大的配置优势。)

环境:windows,tomcat 6.0.33

【问题讨论】:

标签: java tomcat jndi context.xml


【解决方案1】:

我也遇到了同样的问题,而且文档至少不充分,如果不是直接误导的话。

问题是,如果你将已经部署的 WAR 文件的新版本复制到 webapps 目录中,Tomcat 不会重新部署现有应用程序,而是取消部署旧应用程序,然后部署新应用程序。差异可能首先看起来微不足道,但问题是在取消部署旧应用程序期间,conf/Catalina/localhost 中的所有上下文文件也会被删除。然后,在部署新应用程序期间,当前 WAR 文件中的新上下文文件将被复制到 conf/Catalina/localhost。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 2015-09-09
    • 2017-10-07
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多