ゼロマイグレーション・ポリシーとは
WebSphere Liberty / Open Libertyは,ゼロマイグレーションというポリシーのもと開発されています。このポリシーの目的は,バージョン間の互換性を高い水準で維持することで,Libertyのバージョンアップを行った際に必要となる構成の変更やアプリケーションのマイグレーションを最小化することです。
ゼロマイグレーションは,以下の二つの要素で実現されています
デフォルト構成値の維持
Libertyの構成ファイルであるserver.xmlに記述する要素の属性には,全てデフォルト値が設定されています。デフォルトから変更しない属性については,記述する必要がありません。構成ファイルにはデフォルト値から変更するものだけを記述することで,内容を簡潔に記述することができ,また構成の意図も明確になります。
Libertyでは,バージョンが上がってもデフォルト値を変更しないことで,構成ファイルの意味がバージョンアップによって変わることを防いでいます。また,新規に提供される機能のほとんどはデフォルトで無効の状態で実装されており,構成を追加することで初めて有効になります。
複数バージョンのFeatureの並行提供
Libertyでは,提供されている機能を更新するさいには,既存の機能を提供するFeatureを置き換えるのではなく,新規のFeatureを追加することにより新しいバージョンの機能を提供します。たとえば,新しいバージョンのJakarta EE仕様の機能を提供する場合には,既存のJava EE/Jakarta EE仕様のFeatureの提供を続けたまま,新しいFeatureを追加して対応しいます。そのため,たとえばLibertyのバージョンが上がってservlet-5.0
のAPIが新規に提供されても,構成ファイルに<feature>servlet-4.0</feature>
と記述されていれば,(その記述を書き換えない限り)バージョン4.0の仕様にしたがって記述されたアプリケーションをそのまま利用し続けることができます。
このポリシーによりLibertyは,従来のWebSphere Application Serverや他のJava EE実行環境にくらべ,バージョンアップの負荷が非常に小さくなっています。
ゼロマイグレーション・ポリシーの例外
ただ,Libertyにおいてもバージョンアップ時の構成変更やアプリケーションのマイグレーションが完全に不要になるわけではありません。以下に挙げるような,いくつかの例外があります。またアプリケーションの動作に関係のないサーバーの挙動は変更されることがあります。たとえば,ログに記録される情報の追加などがあげられます。
脆弱性の修正
セキュリティ上問題となる瑕疵が発見され,脆弱性の修正が行われる際に,既存の動作を維持したままでは危険を除去できない場合には,デフォルトの動作が変更されることがあります。
9月に公開されたWASからのSSL接続でホスト名チェックがデフォルトで有効になる修正などがこれに該当します。
サード・パーティーAPI
Libertyでは,Java EEのAPIを提供するために,しばしばサード・パーティーの実装を内部で利用します。Libertyのクラスローダーは,実装が独自に提供しているAPIを隠蔽はしていないので,実装で独自に拡張されたを利用することもできます。そのような標準仕様外のAPIや機能を使用している場合には,バージョンが上がってサード・パーティーの実装が更新された際に,動作が変更になる可能性があります。
サポートの廃止
Libertyは,ユーザー・アプリケーションに影響を与える製品部分のサポートを継続しますが,技術的な理由によりFeatureやサポート対象ソフトウェア製品の営業活動を終了することが必要になる場合があります。 その場合は、最低2年前までに廃止の通知をドキュメント上で行います。
文章化されていない動作や構成プロパティ
バージョンが上がることにより,バグの修正は行われます。バグの修正は,通常の文章化された仕様に準拠したアプリケーションには影響をあたえないように行われます。ですが,文章化されていない仕様外の動作に依存したアプリケーションの中には,バグが修正されたことにより挙動が変わる可能性があります。
また,Libertyは従来型のWebSphere Application Serverで利用できていたカスタムプロパティやシステムプロパティによる構成の多くを引き継いでいます。それらのうち,Libertyの構成として文章化されていないものについては,バージョンが上がった際に動作が変わる可能性があります。
Javaの更新による非互換性
LibertyがサポートするJava SE仕様のバージョンは,スケジュールに基づいて適宜更新されます。サポートの予定については,OpenLiberty.ioの文章を参照ください。
Libertyのバージョン更新にともなってJavaのバージョンも上げた際には,Java SE仕様のバージョン間の非互換により,アプリケーションの更新が必要となることがあります。これについては,Java仕様の公開の際に提供される非互換性情報を参照したり,IBMが提供するMigration Toolkitを適宜利用して対応してください。
アプリケーションの動作に直接の影響がないサーバーの挙動
アプリケーションの動作に影響のない範囲で,サーバーの機能が変更されることがあります。例えば,ログに出力される内容,Libertyを構成するファイルの配置とファイル名,新しい構成ファイルの追加,管理コマンドの追加や機能変更などです。
ゼロマイグレーション・ポリシーの例外を調べるには
「脆弱性の修正」などによって対応が必要になる非互換性については,Fixpackのページに「Known Side Effects」として記載されて言います。たとえば,WebSphere Liberty 24.0.0.9のFixpackのページには,2019年,2021年,2024年に修正された三点の非互換性について記述されています。これらの修正を前後するバージョンアップの際には,該当する項目について,あらかじめ対処をしてください。
また,内部実装の更新やバグの修正のうち,非互換性の原因となり得ると判断されたものについては,Regression listとして公開されています。これらについては,事前の確認は必要ありません。バージョンアップのテストで問題が見つかった場合に,関連する修正項目がないかチェックする目的で参照してください。