自動部署 - 使用案例
目錄
簡介
此頁面定義在許多典型使用案例中自動部署器的預期行為。這是 Tomcat 功能中一個複雜的領域。雖然此文件與 Tomcat 行為之間的任何差異都是錯誤,但修正方法可能是變更此文件、Tomcat 行為或兩者。
金鑰
術語 | 說明 |
---|---|
XML | 位於主機的 configBase 中的 XML 組態檔。它必須包含單一的 <Context> 元素,且可能包含選用的巢狀元素。它未定義明確的 docBase 屬性。它代表單一網路應用程式。它通常稱為 context.xml 檔。 |
XML+EW | 位於主機的 configBase 中的 XML 組態檔。它必須包含單一的 <Context> 元素,且可能包含選用的巢狀元素。它包含明確的 docBase 屬性,指向外部 WAR。它代表單一網路應用程式。它通常稱為 context.xml 檔。 |
XML+ED | 位於主機的 configBase 中的 XML 組態檔。它必須包含單一的 <Context> 元素,且可能包含選用的巢狀元素。它包含明確的 docBase 屬性,指向外部目錄。它代表單一網路應用程式。它通常稱為 context.xml 檔。 |
WAR | 位於主機的 appBase 中的 WAR 檔案。WAR 不包含嵌入式 context.xml 檔案。 |
WAR+XML | 位於主機的 appBase 中的 WAR 檔案。WAR 包含嵌入式 context.xml 檔案。 |
DIR | 位於主機的 appBase 中的目錄。目錄不包含嵌入式 context.xml 檔案。 |
DIR+XML | 位於主機的 appBase 中的目錄。目錄包含嵌入式 context.xml 檔案。 |
redeploy | 表示 Web 應用程式的 Context 物件會被銷毀,並建立新的 Context 物件。如果存在且組態允許,會透過剖析 context.xml 檔案來建立這個新的 Context 物件。web.xml 檔案會在應用程式啟動程序期間剖析。預設組態中儲存在標準 Manager 中的任何工作階段都不會持續存在。在重新部署期間,對 Web 應用程式的任何要求都會被處理,就像 Web 應用程式未部署一樣。 |
reload | 表示 Web 應用程式的 Context 物件會停止,然後再啟動。web.xml 檔案會在應用程式啟動程序期間剖析。預設組態中儲存在標準 Manager 中的任何工作階段都不會持續存在。在重新載入期間,對 Web 應用程式的任何要求都會暫停,直到重新載入完成,屆時它們將繼續使用重新載入的 Web 應用程式。 |
新增檔案
此區段說明當自動部署程序發現新的 Web 應用程式時,Tomcat 的行為。
啟動人工製品 | 組態設定 | 結果 | |||||
---|---|---|---|---|---|---|---|
deployXML | copyXML | unpackWARs | XML | WAR | DIR | 備註 | |
XML | 任一 | 任一 | 任一 | Y | N | N | 1, 2, 3 |
XML+EW | 任一 | 任一 | false | Y | N | N | 1 |
XML+EW | 任一 | 任一 | true | Y | N | Y | 1 |
XML+ED | 任一 | 任一 | 任一 | Y | N | N | 1, 2 |
WAR+XML | false | 任一 | false | N | Y | N | 4 |
WAR+XML | false | 任一 | true | N | Y | Y | 4 |
WAR+XML | true | false | false | N | Y | N | |
WAR+XML | true | false | true | N | Y | Y | |
WAR+XML | true | true | false | Y | Y | N | |
WAR+XML | true | true | true | Y | Y | Y | |
WAR | 任一 | 任一 | false | N | Y | N | |
WAR | 任一 | 任一 | true | N | Y | Y | |
DIR+XML | false | 任一 | 任一 | N | N | Y | 4 |
DIR+XML | true | false | 任一 | N | N | Y | |
DIR+XML | true | true | 任一 | Y | N | Y | |
DIR | false | 任一 | 任一 | N | N | Y |
已刪除檔案
此區段說明當自動部署程序偵測到 Web 應用程式檔案已刪除時,Tomcat 的行為。
當檔案被刪除或修改時,在修改/刪除的資源之後所列出的任何重新部署資源都會被刪除(且可能重新建立)。重新部署資源的順序為
- WAR
- DIR
- XML
- 全域資源
上述刪除規則有一些例外
- 全域資源絕不會被刪除
- 外部資源絕不會被刪除
- 如果 WAR 或 DIR 已修改,則只有在 copyXML 為
true
且 deployXML 為true
的情況下,才會刪除 XML 檔案
在下列表格中
- '-' 表示「與不存在時相同」。亦即,人工製品在變更前不存在,在變更後也不存在。使用 '-' 而不是 'N' 是為了將注意力集中在變更的部分。
- 'R' 表示目錄會透過展開 WAR 檔案來重新建立。這只會在 unpackWARs 為
true
的情況下發生。 - 「XW」表示如果 WAR 檔包含 META-INF/context.xml 檔案,它將會被提取並放置在主機的 configBase 中。這僅在 copyXML 為
true
且 deployXML 為true
時才會發生。 - 「XD」表示如果目錄包含 META-INF/context.xml 檔案,它將會被複製到主機的 configBase 中。這僅在 copyXML 為
true
且 deployXML 為true
時才會發生。
現有成品 | 成品已移除 | 剩餘成品 | |||||
---|---|---|---|---|---|---|---|
XML | WAR | DIR | XML | WAR | DIR | 備註 | |
N | N | Y | DIR | - | - | N | |
N | Y | N | WAR | - | N | - | |
N | Y | Y | DIR | - | Y | R | |
N | Y | Y | WAR | - | N | N | |
Y | N | N | XML | N | - | - | |
Y | N | Y | DIR | N | - | N | 5 |
Y | N | Y | XML | XD | - | Y | |
Y | Y | N | WAR | N | N | - | 5 |
Y | Y | N | XML | XW | Y | - | |
Y | Y | Y | DIR | XW | Y | R | |
Y | Y | Y | WAR | N | N | N | |
Y | Y | Y | XML | XW | Y | Y | |
Y | Y (外部) | N | WAR | Y | N | - | 3 |
Y | Y (外部) | N | XML | N | Y (外部) | - | 6 |
Y | N | Y (外部) | DIR | Y | - | N | 3 |
Y | N | Y (外部) | XML | N | - | Y (外部) | 6 |
Y | Y (外部) | Y | DIR | Y | Y (外部) | R | |
Y | Y (外部) | Y | WAR | Y | N | N | 3 |
Y | Y (外部) | Y | XML | N | Y (外部) | N | 6 |
已修改檔案
此區段說明當自動部署程序偵測到 Web 應用程式檔案已修改時,Tomcat 的行為。
在下列表格中
- '-' 表示「與不存在時相同」。亦即,人工製品在變更前不存在,在變更後也不存在。使用 '-' 而不是 'N' 是為了將注意力集中在變更的部分。
- 「M」表示成品已修改。
- 「R」表示目錄已刪除並透過展開 WAR 檔重新建立。這僅在 unpackWARs 為
true
時才會發生。
現有成品 | 成品已修改 | 剩餘成品 | |||||
---|---|---|---|---|---|---|---|
XML | WAR | DIR | XML | WAR | DIR | 動作 | |
N | N | Y | DIR | - | - | M | 無 |
N | Y | N | WAR | - | M | - | 重新部署 |
N | Y | Y | DIR | - | Y | M | 無 |
N | Y | Y | WAR | - | M | R | 重新部署 |
Y | N | N | XML | M | - | - | 重新部署 |
Y | N | Y | DIR | Y | - | M | 無 |
Y | N | Y | XML | M | - | Y | 重新部署 |
Y | Y | N | WAR | Y | M | - | 重新載入 |
Y | Y | N | XML | M | Y | - | 重新部署 |
Y | Y | Y | DIR | Y | Y | M | 無 |
Y | Y | Y | WAR | Y | M | R | 重新載入 |
Y | Y | Y | XML | M | Y | Y | 重新部署 |
Y | Y(外部) | N | WAR | Y | M(外部) | - | 重新載入 |
Y | Y(外部) | N | XML | M | Y(外部) | - | 重新部署 |
Y | N | Y(外部) | DIR | Y | - | M(外部) | 無 |
Y | N | Y(外部) | XML | M | - | Y(外部) | 重新部署 |
Y | Y(外部) | Y | DIR | Y | Y(外部) | M | 無 |
Y | Y(外部) | Y | WAR | Y | M(外部) | R | 重新載入 |
Y | Y(外部) | Y | XML | M | Y(外部) | Y | 重新部署 |
已新增檔案
這會視為已新增的檔案已修改,並執行下列額外動作
- 如果新增 WAR,任何 DIR 都會被移除,並可能根據 unpackWARs 重新建立。
- 如果新增 XML 檔案,該檔案會參考外部 docBase,appBase 中的任何 WAR 或 DIR 都會被移除。如果外部資源是 WAR 且 unpackWARs 為 true,則 DIR 可能會重新建立。
- 如果在已存在的 WAR 中新增 DIR,且 unpackWARs 為
false
,則 DIR 會被忽略,但在首次偵測到 DIR 時會記錄警告。如果移除 WAR,則 DIR 會保留,並可能透過自動部署進行部署。 - 如果在已存在的外部 WAR 中,將 WAR 新增到 appBase,則 appBase 中的 WAR 會被忽略,但在首次偵測到 appBase 中的 WAR 時會記錄警告。如果移除外部 WAR,則 appBase 中的 WAR 會保留,並可能透過自動部署進行部署。
- 如果將 XML 檔案新增到從該 DIR 部署的應用程式的 META-INF 目錄中,則應用程式將永遠重新部署。結果會與新部署相同。
備註
- deployXML 和 copyXML 會被忽略,因為在 configBase 中發現了 XML 檔案。
- unpackWARs 會被忽略,因為沒有 WAR 檔。
- 內容不會在預期的 docBase 中,因此內容將無法啟動。
- Web 應用程式無法部署,因為它包含嵌入式 META-INF/context.xml,deployXML 為
false
,且在 configBase 中未提供 XML。 - 僅在 copyXML 為
true
且 deployXML 為true
時,XML 檔案才會被刪除。 - 儘管外部資源仍然存在,但 Web 應用程式已完全解除部署,因為 Tomcat 不知道外部資源。