Documentation

データベーステーブルのアップグレード

Liferay DXP 7.4 U10以降およびLiferay Portal7.4 GA14以降で利用可能

アプリケーションをアップグレードすると、データベースのテーブルを変更する必要がある場合があります。 Liferayのアップグレードフレームワークは、これらの変更を簡単に行うことができます。 サンプルプロジェクトをデプロイして、このアップグレード処理を確認します。 Liferayの以前のバージョンについては、 Creating Upgrade Processes for Modules を参照してください。

バージョン1.0.0をデプロイする

新しいLiferay DXPインスタンスを起動し、以下を実行します。

docker run -it -m 8g -p 8080:8080 liferay/dxp:7.4.13-u29。

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

次に、以下の手順を実行します。

  1. Upgrading Your Database Tables をダウンロードし、解凍してください。.

    curl https://learn.liferay.com/dxp/latest/ja/building-applications/data-frameworks/upgrade-processes/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シェルコンソールに移動します。

  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)

新しい列が追加されます。

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

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

列を削除します

警告

MariaDBでは、alterTableDropColumnは機能しません。 これは 既知のバグ です。 代わりに 旧ガイドライン に従ってください。

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

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

アップグレードの手順が多く複雑な場合は、 getPreUpgradeSteps()getPostUpgradeSteps() メソッドを UpgradeProcess クラスで使用することを検討してください。 この方法は、アップグレードプロセスをよりコントロールしやすくします。 デバッグしやすいように、各アップグレードステップには Release_ テーブルで異なるスキーマのバージョンが与えられています。 ステップに失敗してアップグレードを再実行する必要がある場合、アップグレード処理は自動的にチェックされ、最新の失敗ポイントからアップグレードを再開します。

例えば、Liferay の OpenIdConnectSessionUpgradeProcess は、この機能を利用しています。

この例では、 getPreUpgradeSteps() が最初に実行され、新しいカラムを追加する簡単なステップを含んでいます。 doUpgrade() メソッドでは、新しいカラムの入力が行われます。 doUpgrade() メソッドが失敗した場合、開発者はデバッグして必要な変更を加え、アップグレードを再実行することができます。 プロセスは、最初のステップが成功したと認識し、自動的に次のステップに進みます。

注意:アップグレードステップを利用するために、 com.liferay.portal.kernel.upgrade.UpgradeStep クラスをアップグレード処理にインポートしてください。