Upgrading Data Schemas
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

アップグレードプロセスの使用

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:2025.q1.6-lts

メールアドレス test@liferay.com とパスワード testを使用して、 http://localhost:8080 で Liferay にサインインします。 プロンプトが表示されたら、パスワードを learnに変更します。

次に、以下の手順に従います。

  1. データベース テーブルのアップグレードをダウンロードして解凍します。

    curl https://resources.learn.liferay.com/examples/liferay-p5d2.zip -O
    
    unzip liferay-p5d2.zip
    
  2. 1.0.0ディレクトリに移動し、ビルドとデプロイを行います。

    cd 1.0.0
    
    ../gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
    

    このコマンドは、デプロイされたjarをDockerコンテナの/opt/liferay/osgi/modulesにコピーするのと同じです。

  3. Liferay Dockerコンテナコンソールでデプロイを確認します。

    STARTED com.acme.p5d2.api_1.0.0 [1030]
    STARTED com.acme.p5d2.service_1.0.0 [1031]
    
  4. 外部データベースを使用している場合、アプリのテーブル列を確認します。 たとえば、MySQLの場合:

    SHOW COLUMNS FROM P5D2_P5D2Entry;
    

    データベースのテーブル列を確認します。

2.0.0へのアップグレード

  1. ここで、2.0.0版をデプロイします。 2.0.0ディレクトリに移動し、ビルドとデプロイを行います。

    cd 2.0.0
    
    ../gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
    
  2. Liferay にログインし、 コントロール パネルGogo Shellで Gogo Shell コンソールに移動します。

  3. upgrade:list com.acme.p5d2.serviceというコマンドを入力し、2.0.0へのアップグレードが可能であることを確認します。

  4. upgrade:execute com.acme.p5d2.serviceというコマンドを入力して、アップグレードを実行します。 Gogo シェルコンソールには、アップグレード処理の完了が表示されます。

    Gogoシェルでアップグレードを実行します。

  5. データベースでテーブル列が更新されたことを確認できます。 たとえば、MySQLの場合:

    SHOW COLUMNS FROM P5D2_P5D2Entry;
    

    テーブル列が更新されたことを確認します。

サンプルプロジェクトでは、以下のテーブル列を簡単に変更するデモを行っています。

変更前変更後コメント
able (type: long)able (type: date)列のデータ型が変更されます。
baker (type: boolean)-列がドロップされます。
foo (type: string)bar (type: string)列名が変更されます。
-charlie (type: string)新しい列が追加されます。

service.xml の列定義 ( 1.0.02.0.0) を比較します。

UpgradeStepRegistratorクラスの作成

UpgradeStepRegistratorクラスを作成し、 UpgradeStepRegister インターフェイスを実装してください。

@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", "baker");
	}

}

doUpgrade()メソッドをテーブルを変更する指示でオーバーライドします。 次の操作を使用できます。

機能説明
alterColumnName列名を変更します
alterColumnType列のデータ型を変更します
alterTableAddColumn新しい列を追加します
alterTableDropColumn列を削除します
警告

alterTableDropColumn は MariaDB では機能しません。 これは 既知の問題です。 これを回避するには、代わりに 以前のガイドライン を使用できます。

変更後、サービスビルダーを再実行します。 これで、アップグレードの構築とデプロイの準備が整いました。

複雑なアップグレードの管理

アップグレードが複雑でステップ数が多い場合は、 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 で作成した場合、 javaxへの古い参照が含まれている可能性があります。 このような場合は、これらの参照を Jakarta に更新するためのアップグレード プロセスを作成する必要があります。 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() メソッドによって提供されるテーブルと列のペアのデータベース内のすべてのエントリを参照します。 次に、適切な置換値が見つかった場合は、取得した値を新しい Jakarta の値に置き換えます。 アップグレード プロセスが完了すると、変更されたキーの概要がログに出力されます。

デフォルトでは、アップグレードプロセスは を考慮します。-、および / をパッケージ名の区切り文字として使用します。 カスタム パッケージで使用される区切り文字のセットを追加するには、 getCustomSeparators() メソッドをオーバーライドします。 たとえば、アップグレードプロセスでパッケージ名を $ または @で区切って検索させるには、

@Override
protected char[] getCustomSeparators() {
   return new char[] {'$', '@'};
}
警告

このメソッドがないと、 javax$portlet$ActionResponse のようなパッケージ名は、 jakarta$portlet$ActionResponseに更新されません。