自动部署 - 用例

目录

简介

本页定义了自动部署器在许多典型用例中的预期行为。这是Tomcat功能中一个复杂的领域。本文档与Tomcat行为之间的任何差异都被视为一个bug,而修复可能涉及修改本文档、Tomcat的行为或两者。

图例

术语描述
XML 位于主机 (Host) 的 configBase 中的 XML 配置文件。它必须包含一个单独的 <Context> 元素,并且可以包含可选的嵌套元素。它不定义显式的 docBase 属性。它表示一个单独的 Web 应用程序。它通常被称为 context.xml 文件。
XML+EW 位于主机 (Host) 的 configBase 中的 XML 配置文件。它必须包含一个单独的 <Context> 元素,并且可以包含可选的嵌套元素。它包含一个指向外部 WAR 的显式 docBase 属性。它表示一个单独的 Web 应用程序。它通常被称为 context.xml 文件。
XML+ED 位于主机 (Host) 的 configBase 中的 XML 配置文件。它必须包含一个单独的 <Context> 元素,并且可以包含可选的嵌套元素。它包含一个指向外部目录的显式 docBase 属性。它表示一个单独的 Web 应用程序。它通常被称为 context.xml 文件。
WAR 位于主机 (Host) 的 appBase 中的 WAR 文件。该 WAR 文件不包含嵌入的 context.xml 文件。
WAR+XML 位于主机 (Host) 的 appBase 中的 WAR 文件。该 WAR 文件包含嵌入的 context.xml 文件。
DIR 位于主机 (Host) 的 appBase 中的目录。该目录不包含嵌入的 context.xml 文件。
DIR+XML 位于主机 (Host) 的 appBase 中的目录。该目录包含嵌入的 context.xml 文件。
重新部署 (redeploy) 代表 Web 应用程序的 Context 对象被销毁,并创建一个新的 Context 对象。如果存在且配置允许,这个新的 Context 对象是通过解析 context.xml 文件创建的。web.xml 文件在应用程序启动过程中被解析。默认配置中存储在标准 Manager 中的任何会话都不会被持久化。重新部署期间对 Web 应用程序的任何请求都将被视为该 Web 应用程序未部署。
重新加载 (reload) 代表 Web 应用程序的 Context 对象被停止,然后启动。web.xml 文件在应用程序启动过程中被解析。默认配置中存储在标准 Manager 中的任何会话都不会被持久化。重新加载期间对 Web 应用程序的任何请求都将被保留,直到重新加载完成,此时它们将继续使用已重新加载的 Web 应用程序。

新文件

本节描述了当自动部署过程发现新的 Web 应用程序时 Tomcat 的行为。

启动工件 配置设置 结果
deployXMLcopyXMLunpackWARs XMLWARDIR注意事项
XML 任意一个任意一个任意一个 1, 2, 3
XML+EW 任意一个任意一个false 1
XML+EW 任意一个任意一个true 1
XML+ED 任意一个任意一个任意一个 1, 2
WAR+XML false任意一个false 4
WAR+XML false任意一个true 4
WAR+XML truefalsefalse
WAR+XML truefalsetrue
WAR+XML truetruefalse
WAR+XML truetruetrue
WAR 任意一个任意一个false
WAR 任意一个任意一个true
DIR+XML false任意一个任意一个 4
DIR+XML truefalse任意一个
DIR+XML truetrue任意一个
DIR false任意一个任意一个

已删除文件

本节描述了当自动部署过程检测到 Web 应用程序文件已被删除时 Tomcat 的行为。

当文件被删除或修改时,列在被修改/删除资源之后的任何重新部署资源本身也会被删除(并可能被重新创建)。重新部署资源的顺序是

  1. WAR
  2. DIR
  3. XML
  4. 全局资源

上述删除规则有一些例外

  • 全局资源永远不会被删除
  • 外部资源永远不会被删除
  • 如果 WAR 或 DIR 已被修改,则仅当 copyXMLtruedeployXMLtrue 时,XML 文件才会被删除。

在下表中

  • '-' 表示“与未存在时保持不变”。即,工件在更改之前不存在,更改之后也不存在。使用 '-' 而不是 'N' 是为了突出显示发生了什么变化。
  • 'R' 表示目录通过解压 WAR 文件被重新创建。这只会在 unpackWARstrue 时发生。
  • 'XW' 表示如果 WAR 包含 META-INF/context.xml 文件,它将被提取并放置在主机 (Host) 的 configBase 中。这只会在 copyXMLtruedeployXMLtrue 时发生。
  • 'XD' 表示如果目录包含 META-INF/context.xml 文件,它将被复制到主机 (Host) 的 configBase 中。这只会在 copyXMLtruedeployXMLtrue 时发生。
现有工件 已移除工件 剩余工件
XMLWARDIR XMLWARDIR注意事项
DIR --
WAR --
DIR -R
WAR -
XML --
DIR -5
XML XD-
WAR -5
XML XW-
DIR XWR
WAR
XML XW
Y (外部) WAR -3
Y (外部) XML Y (外部)-6
Y (外部) DIR -3
Y (外部) XML -Y (外部)6
Y (外部) DIR Y (外部)R
Y (外部) WAR 3
Y (外部) XML Y (外部)6

已修改文件

本节描述了当自动部署过程检测到 Web 应用程序文件已被修改时 Tomcat 的行为。

在下表中

  • '-' 表示“与未存在时保持不变”。即,工件在更改之前不存在,更改之后也不存在。使用 '-' 而不是 'N' 是为了突出显示发生了什么变化。
  • 'M' 表示工件已被修改。
  • 'R' 表示目录被删除并通过解压 WAR 文件重新创建。这只会在 unpackWARstrue 时发生。
现有工件 已修改工件 剩余工件
XMLWARDIR XMLWARDIR操作
DIR --M
WAR -M-重新部署
DIR -M
WAR -MR重新部署
XML M--重新部署
DIR -M
XML M-重新部署
WAR M-重新加载
XML M-重新部署
DIR M
WAR MR重新加载
XML M重新部署
Y(外部) WAR M(外部)-重新加载
Y(外部) XML MY(外部)-重新部署
Y(外部) DIR -M(外部)
Y(外部) XML M-Y(外部)重新部署
Y(外部) DIR Y(外部)M
Y(外部) WAR M(外部)R重新加载
Y(外部) XML MY(外部)重新部署

已添加文件

这被视为已添加文件已被修改,并附加以下操作

  • 如果添加了 WAR,则任何 DIR 都会被移除,并可能根据 unpackWARs 的设置重新创建。
  • 如果添加的 XML 文件引用了外部 docBase,则 appBase 中的任何 WAR 或 DIR 都将被移除。如果外部资源是 WAR 且 unpackWARs 为 true,则 DIR 可能会被重新创建。
  • 如果在 WAR 已存在且 unpackWARsfalse 时添加了 DIR,则该 DIR 将被忽略,但在首次检测到该 DIR 时会记录警告。如果 WAR 被移除,DIR 将保留并可以通过自动部署进行部署。
  • 如果在外部 WAR 已存在时将 WAR 添加到 appBase,则 appBase 中的 WAR 将被忽略,但在首次检测到 appBase 中的 WAR 时会记录警告。如果外部 WAR 被移除,appBase 中的 WAR 将保留并可以通过自动部署进行部署。
  • 如果将 XML 文件添加到从该 DIR 部署的应用程序的 META-INF 目录中,则应用程序将始终被重新部署。结果将与新部署相同。

注意事项

  1. deployXMLcopyXML 被忽略,因为在 configBase 中发现了一个 XML 文件。
  2. unpackWARs 被忽略,因为没有 WAR 文件。
  3. Context 将无法启动,因为预期的 docBase 中没有内容。
  4. Web 应用程序部署失败,因为它包含一个嵌入的 META-INF/context.xml 文件,deployXMLfalse,并且 configBase 中未提供 XML 文件。
  5. 仅当 copyXMLtruedeployXMLtrue 时,XML 文件才会被删除。
  6. 尽管外部资源仍然存在,但由于 Tomcat 不了解该外部资源,Web 应用程序将被完全卸载。