自动部署 - 用例
目录
简介
本页定义了自动部署器在许多典型用例中的预期行为。这是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 的行为。
启动工件 | 配置设置 | 结果 | |||||
---|---|---|---|---|---|---|---|
deployXML | copyXML | unpackWARs | XML | WAR | DIR | 注意事项 | |
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 | true | false | false | 否 | 是 | 否 | |
WAR+XML | true | false | true | 否 | 是 | 是 | |
WAR+XML | true | true | false | 是 | 是 | 否 | |
WAR+XML | true | true | true | 是 | 是 | 是 | |
WAR | 任意一个 | 任意一个 | false | 否 | 是 | 否 | |
WAR | 任意一个 | 任意一个 | true | 否 | 是 | 是 | |
DIR+XML | false | 任意一个 | 任意一个 | 否 | 否 | 是 | 4 |
DIR+XML | true | false | 任意一个 | 否 | 否 | 是 | |
DIR+XML | true | true | 任意一个 | 是 | 否 | 是 | |
DIR | false | 任意一个 | 任意一个 | 否 | 否 | 是 |
已删除文件
本节描述了当自动部署过程检测到 Web 应用程序文件已被删除时 Tomcat 的行为。
当文件被删除或修改时,列在被修改/删除资源之后的任何重新部署资源本身也会被删除(并可能被重新创建)。重新部署资源的顺序是
- WAR
- DIR
- XML
- 全局资源
上述删除规则有一些例外
- 全局资源永远不会被删除
- 外部资源永远不会被删除
- 如果 WAR 或 DIR 已被修改,则仅当 copyXML 为
true
且 deployXML 为true
时,XML 文件才会被删除。
在下表中
- '-' 表示“与未存在时保持不变”。即,工件在更改之前不存在,更改之后也不存在。使用 '-' 而不是 'N' 是为了突出显示发生了什么变化。
- 'R' 表示目录通过解压 WAR 文件被重新创建。这只会在 unpackWARs 为
true
时发生。 - 'XW' 表示如果 WAR 包含 META-INF/context.xml 文件,它将被提取并放置在主机 (Host) 的 configBase 中。这只会在 copyXML 为
true
且 deployXML 为true
时发生。 - 'XD' 表示如果目录包含 META-INF/context.xml 文件,它将被复制到主机 (Host) 的 configBase 中。这只会在 copyXML 为
true
且 deployXML 为true
时发生。
现有工件 | 已移除工件 | 剩余工件 | |||||
---|---|---|---|---|---|---|---|
XML | WAR | DIR | XML | WAR | DIR | 注意事项 | |
否 | 否 | 是 | DIR | - | - | 否 | |
否 | 是 | 否 | WAR | - | 否 | - | |
否 | 是 | 是 | DIR | - | 是 | R | |
否 | 是 | 是 | WAR | - | 否 | 否 | |
是 | 否 | 否 | XML | 否 | - | - | |
是 | 否 | 是 | DIR | 否 | - | 否 | 5 |
是 | 否 | 是 | XML | XD | - | 是 | |
是 | 是 | 否 | WAR | 否 | 否 | - | 5 |
是 | 是 | 否 | XML | XW | 是 | - | |
是 | 是 | 是 | DIR | XW | 是 | R | |
是 | 是 | 是 | 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 文件重新创建。这只会在 unpackWARs 为
true
时发生。
现有工件 | 已修改工件 | 剩余工件 | |||||
---|---|---|---|---|---|---|---|
XML | WAR | DIR | XML | WAR | DIR | 操作 | |
否 | 否 | 是 | DIR | - | - | M | 无 |
否 | 是 | 否 | WAR | - | M | - | 重新部署 |
否 | 是 | 是 | DIR | - | 是 | M | 无 |
否 | 是 | 是 | WAR | - | M | R | 重新部署 |
是 | 否 | 否 | XML | M | - | - | 重新部署 |
是 | 否 | 是 | DIR | 是 | - | M | 无 |
是 | 否 | 是 | XML | M | - | 是 | 重新部署 |
是 | 是 | 否 | WAR | 是 | M | - | 重新加载 |
是 | 是 | 否 | XML | M | 是 | - | 重新部署 |
是 | 是 | 是 | DIR | 是 | 是 | M | 无 |
是 | 是 | 是 | WAR | 是 | M | R | 重新加载 |
是 | 是 | 是 | XML | M | 是 | 是 | 重新部署 |
是 | Y(外部) | 否 | WAR | 是 | M(外部) | - | 重新加载 |
是 | Y(外部) | 否 | XML | M | Y(外部) | - | 重新部署 |
是 | 否 | Y(外部) | DIR | 是 | - | M(外部) | 无 |
是 | 否 | Y(外部) | XML | M | - | Y(外部) | 重新部署 |
是 | Y(外部) | 是 | DIR | 是 | Y(外部) | M | 无 |
是 | Y(外部) | 是 | WAR | 是 | M(外部) | R | 重新加载 |
是 | Y(外部) | 是 | XML | M | Y(外部) | 是 | 重新部署 |
已添加文件
这被视为已添加文件已被修改,并附加以下操作
- 如果添加了 WAR,则任何 DIR 都会被移除,并可能根据 unpackWARs 的设置重新创建。
- 如果添加的 XML 文件引用了外部 docBase,则 appBase 中的任何 WAR 或 DIR 都将被移除。如果外部资源是 WAR 且 unpackWARs 为 true,则 DIR 可能会被重新创建。
- 如果在 WAR 已存在且 unpackWARs 为
false
时添加了 DIR,则该 DIR 将被忽略,但在首次检测到该 DIR 时会记录警告。如果 WAR 被移除,DIR 将保留并可以通过自动部署进行部署。 - 如果在外部 WAR 已存在时将 WAR 添加到 appBase,则 appBase 中的 WAR 将被忽略,但在首次检测到 appBase 中的 WAR 时会记录警告。如果外部 WAR 被移除,appBase 中的 WAR 将保留并可以通过自动部署进行部署。
- 如果将 XML 文件添加到从该 DIR 部署的应用程序的 META-INF 目录中,则应用程序将始终被重新部署。结果将与新部署相同。
注意事项
- deployXML 和 copyXML 被忽略,因为在 configBase 中发现了一个 XML 文件。
- unpackWARs 被忽略,因为没有 WAR 文件。
- Context 将无法启动,因为预期的 docBase 中没有内容。
- Web 应用程序部署失败,因为它包含一个嵌入的 META-INF/context.xml 文件,deployXML 为
false
,并且 configBase 中未提供 XML 文件。 - 仅当 copyXML 为
true
且 deployXML 为true
时,XML 文件才会被删除。 - 尽管外部资源仍然存在,但由于 Tomcat 不了解该外部资源,Web 应用程序将被完全卸载。