アップグレードプロセスの使用
Liferay DXP 7.4 U10+/Portal 7.4 GA14+
アプリケーションをアップグレードすると、データベースのテーブルを変更する必要がある場合があります。 Liferayのアップグレードフレームワークを使えば、これらの変更を簡単に行うことができます。 サンプルプロジェクトをデプロイして、このアップグレード処理を確認します。
Liferay の以前のバージョンについては、 以前のバージョンでのアップグレード プロセスの使用 を参照してください。
バージョン1.0.0をデプロイする
Liferay DXP の新しいインスタンスを起動するには、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/dxp:2026.q1.9-lts
http://localhost:8080 に、メールアドレス test@liferay.com とパスワード test を使用して Liferay にサインインします。 プロンプトが表示されたら、パスワードを learn に変更してください。
次に、以下の手順に従います。
-
ダウンロードして解凍します データベース テーブルのアップグレード。
curl https://resources.learn.liferay.com/examples/liferay-p5d2.zip -Ounzip liferay-p5d2.zip -
1.0.0ディレクトリに移動し、ビルドしてデプロイします。CD 1.0.0../gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)注記このコマンドは、デプロイされたjarファイルをDockerコンテナの/opt/liferay/osgi/modulesにコピーするのと同じです。
-
Liferay Dockerコンテナコンソールでデプロイメントを確認してください。
com.acme.p5d2.api_1.0.0 [1030] が起動しました com.acme.p5d2.service_1.0.0 [1031] が起動しました -
外部データベースを使用している場合は、アプリのテーブル列を確認してください。 例えば、MySQLの場合:
P5D2_P5D2Entry の列を表示します。
バージョン2.0.0にアップグレードしてください
-
それでは、バージョン2.0.0をデプロイしてください。
2.0.0ディレクトリに移動し、ビルドしてデプロイします。CD 2.0.0../gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq) -
Liferayにログインし、 コントロールパネル → Gogoシェル のGogoシェルコンソールに移動します。
-
upgrade:list com.acme.p5d2.serviceと入力して、2.0.0 アップグレードが利用可能であることを確認します。 -
コマンド
upgrade:execute com.acme.p5d2.serviceを入力してアップグレードを実行します。 Gogoシェルコンソールには、アップグレード処理が完了したことが表示されます。
-
データベース内のテーブル列が更新されていることを確認できます。 例えば、MySQLの場合:
P5D2_P5D2Entry の列を表示します。
このサンプルプロジェクトでは、以下のテーブル列の簡単な変更方法を示します。
| 変更前 | 変更後 | コメント |
|---|---|---|
able (type: long) | able (type: date) | 列のデータ型が変更されます。 |
baker (type: boolean) | - | 列がドロップされます。 |
foo (type: string) | bar (type: string) | 列名が変更されます。 |
| - | charlie (type: string) | 新しい列が追加されます。 |
service.xml の列定義を 1.0.0 と 2.0.0 で比較します。
UpgradeStepRegistratorクラスを作成します。
UpgradeStepRegister クラスを作成します。インターフェイスを実装する UpgradeStepRegistrator
@Component(service = UpgradeStepRegistrator.class)
public class P5D2EntryUpgrade implements UpgradeStepRegistrator {
@Override
public void register(Registry registry) {
registry.register("1.0.0", "2.0.0", new P5D2EntryUpgradeProcess());
}
}
アプリケーションのアップグレード登録を実装するには、 register メソッドをオーバーライドします。 @Component アノテーションを使用し、それを UpgradeStepRegistrator.class サービスとして識別するようにしてください。
UpgradeProcessクラスを作成します
基本クラスを継承する UpgradeProcess クラスを作成します。
public class P5D2EntryUpgradeProcess extends UpgradeProcess {
@Override
protected void doUpgrade() throws Exception {
alterColumnName("P5D2_P5D2Entry", "foo", "bar VARCHAR(75) null");
alterColumnType("P5D2_P5D2Entry", "able", "DATE");
alterTableAddColumn("P5D2_P5D2Entry", "charlie", "VARCHAR(75) null");
alterTableDropColumn("P5D2_P5D2Entry", "ベイカー");
}
}
テーブルを変更する指示で、 doUpgrade() メソッドをオーバーライドします。 以下の操作が可能です。
| 機能 | 説明 |
|---|---|
alterColumnName | 列名を変更します |
alterColumnType | 列のデータ型を変更します |
alterTableAddColumn | 新しい列を追加します |
alterTableDropColumn | 列を削除します |
変更を加えた後は、Service Builderを再度実行してください。 これでアップグレードの構築とデプロイの準備が整いました。
複雑なアップグレードの管理
アップグレードが多くのステップを含む複雑なものである場合は、 getPreUpgradeSteps() および getPostUpgradeSteps() メソッドを UpgradeProcess クラスで使用することを検討してください。 このアプローチにより、アップグレードプロセスをより詳細に制御できるようになります。 各アップグレード手順には、デバッグを容易にするために、 Release_ テーブルで異なるスキーマ バージョンが割り当てられます。 手順のいずれかが失敗し、アップグレードを再実行する必要がある場合、アップグレードプロセスは自動的にチェックを行い、最後に失敗した箇所からアップグレードを再開します。
例えば、Liferay の OpenIdConnectSessionUpgradeProcess はこの機能を利用します。
この例では、 getPreUpgradeSteps() が最初に実行され、新しい列を追加する簡単な手順が含まれます。 doUpgrade() メソッドは、新しい列にデータを入力する処理を含みます。 doUpgrade() メソッドが失敗した場合、開発者はデバッグを行い、必要な変更を加えて、アップグレードを再実行できます。 このプロセスは最初のステップが成功したことを認識し、自動的に次のステップに進みます。
アップグレード手順を利用するには、 import com.liferay.portal.kernel.upgrade.UpgradeStep クラスをアップグレードプロセスにインポートしてください。
Liferay DXP 2025.Q3+/Portal GA146+ の Jakarta アップグレードプロセス
Liferay DXP 2025.Q3/Portal 2026.Q1の時点で、Liferay は最新の Jakarta エンタープライズ プラットフォームに移行しました。 パッケージ名は javax から jakarta に変更されます。 Jakarta を使用する Liferay バージョンにアップグレードする場合、Liferay の内部アップグレード プロセスは、参照を javax から jakarta に自動的に更新します。 ただし、以前の Liferay バージョンで Liferay コア オブジェクト (User、Group など) を参照するカスタム テーブルを作成した場合、 javax への古い参照が含まれている可能性があります。 そのような場合は、これらの参照をジャカルタに更新するためのアップグレードプロセスを作成する必要があります。 BaseJakartaUpgradeProcessクラスのgetTableAndColumnNames()メソッドをオーバーライドして、javax参照を含むデータベースの各テーブルの各カラム名を追加できます。 例えば、
import com.liferay.portal.kernel.upgrade.BaseJakartaUpgradeProcess;
public class CustomJakartaUpgradeProcess extends BaseJakartaUpgradeProcess {
@Override
protected String[][] getTableAndColumnNames() {
return new String[][] {
{"customTable1", "customColumn1"},
{"customTable2"、 "customColumn2"}
};
}
}
BaseJakartaUpgradeProcess は、 getTableAndColumnNames() メソッドによって提供されるテーブルと列のペアについて、データベース内のすべてのエントリを参照します。 そして、適切な代替値が見つかった場合は、取得した値を新しいジャカルタの値に置き換えます。 アップグレード処理が完了すると、変更されたキーの概要がログに出力されます。
デフォルトでは、アップグレードプロセスは . を考慮します。パッケージ名では、 -および / を区切り文字として使用します。 カスタムパッケージで使用される区切り文字のセットを追加するには、 getCustomSeparators() メソッドをオーバーライドします。 例えば、アップグレードプロセスでパッケージ名を $ または @ で区切って検索するには、
@Override
protected char[] getCustomSeparators() {
return new char[] {'$', '@'};
}
この方法がないと、 javax$portlet$ActionResponse のようなパッケージ名は jakarta$portlet$ActionResponse に更新されません。