自動デプロイ - ユースケース
目次
はじめに
このページでは、多くの一般的なユースケースにおける自動デプロイヤの期待される動作を定義します。これはTomcatの機能の中でも複雑な領域です。このドキュメントとTomcatの動作の間に違いがある場合はバグですが、修正は、このドキュメント、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 | いずれか | いずれか | いずれか | 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が変更された場合、XMLファイルは、copyXMLが
true
でdeployXMLがtrue
の場合にのみ削除されます。
次の表では
- 「-」は「存在しない状態から変更なし」を意味します。つまり、アーティファクトは変更前には存在せず、変更後も存在しません。「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 | 備考 | |
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に応じて再作成される場合があります。
- 外部docBaseを参照するXMLファイルが追加された場合、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は残され、自動デプロイを介してデプロイされる場合があります。
- そのDIRからデプロイされたアプリケーションのMETA-INFディレクトリにXMLファイルが追加された場合、アプリケーションは常に再デプロイされます。結果は、新規デプロイの場合と同じになります。
備考
- configBaseでXMLファイルが検出されたため、deployXMLとcopyXMLは無視されます。
- WARファイルがないため、unpackWARsは無視されます。
- 期待されるdocBaseにコンテンツがないため、コンテキストの開始に失敗します。
- 埋め込まれたMETA-INF/context.xmlが含まれており、deployXMLが
false
で、configBaseにXMLが提供されていないため、Webアプリケーションのデプロイに失敗します。 - XMLファイルは、copyXMLが
true
でdeployXMLがtrue
の場合にのみ削除されます。 - 外部リソースはまだ存在しますが、Tomcatは外部リソースに関する知識を持っていないため、Webアプリケーションは完全にアンデプロイされます。