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

Service Builderを外部データベースに接続する

サービスビルダーは、Liferayで使用される他のすべてのデータとともに、 lportal データベースにサービスに必要なテーブルを作成します。 データを別のデータベースに保存する場合は、 データソースプロバイダ を使用してサービスビルダーを接続できます。 こうすることで、モジュールからのすべてのデータを含むデータベースを個別にホストしたり、異なるアクセス権限を設定したり、その他多くのことが可能になります。

警告

Service Builder サービスでネストされたトランザクションが必要な場合、外部データソースの使用は適切ではない可能性があります。 異なるデータソース間のトランザクションは、完全にネストすることはできません。 外部データソースを使用するサービスと、異なるデータソースを使用するLiferay DXPサービス(または他のアプリケーションのサービス)の間では、ロールバックが伝播されない場合があります。

サンプルをデプロイする

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

docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.132-ga132

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

サンプルをデプロイするには、以下の手順に従ってください。

  1. サンプルモジュール用に、2 番目のデータベースを手動で作成します

  2. ポータルのプロパティを使用してデータソースを定義します。 データソースに jdbc.default. 以外のプレフィックスを付けることで、Liferay のデフォルトのデータソースと区別できます。。 この PostgreSQL の設定例では、プレフィックス jdbc.ext. を使用しています。:

    jdbc.ext.driverClassName=org.postgresql.Driver
    jdbc.ext.url=jdbc:postgresql://localhost:5432/lportal
    jdbc.ext.username=
    jdbc.ext.password=
    
  3. ポータルプロパティを使用してデータソースを定義した場合は、Liferay Portalインスタンスを再起動してください。

  4. liferay-y3c4.zip サンプルプロジェクトをダウンロードして解凍します。

    curl https://resources.learn.liferay.com/examples/liferay-y3c4.zip -O
    
    unzip liferay-y3c4.zip
    
  5. プロジェクトモジュールをビルドしてデプロイします。

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

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

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

    STARTED com.liferay.y3c4.web_1.0.0 [1386]
    STARTED com.liferay.y3c4.api_1.0.0 [1384]
    STARTED com.liferay.y3c4.service_1.0.0 [1385]
    
  7. サンプルモジュールが正しく動作していることを確認するには、データベースを開いてテーブルの一覧を表示してください。

データソースプロバイダーの作成

外部データベースに接続する最も簡単な方法は、JDK ServiceProviderInterface (SPI) として DataSourceProvider を作成して登録することです。

Service Builder モジュールの service.xml ファイルで定義されているすべてのエンティティは、同じデータ ソースにバインドされます。 異なるエンティティを異なるデータソースにバインドするには、エンティティを個別のService Builderモジュールで定義し、各モジュールが異なるデータソースを使用するように構成する必要があります。

  1. DataSourceProvider インターフェイスの getDataSource() メソッドを実装して、Service Builder モジュールをデータ ソースに接続します。
public class DataSourceProviderImpl implements DataSourceProvider {

	@Override
	public DataSource getDataSource() {
ヒント

DataSourceProvider*-service モジュールに配置してください。これは、 *-service モジュールのクラスローダーから見えるようにする必要があるためです。

  1. 選択したプレフィックスを持つポータル プロパティからデータ ソースを作成するには、 DataSourceFactoryUtil を使用します。
@Override
public DataSource getDataSource() {
	try {
		return DataSourceFactoryUtil.initDataSource(
			PropsUtil.getProperties("jdbc.ext.", true));
	}
	catch (Exception exception) {
		throw new RuntimeException(exception);
	}
}
  1. *-service モジュール内に、 src/main/resources/META-INF/services という名前のフォルダがまだ存在しない場合は作成します。

  2. services フォルダー内に、 com.liferay.portal.kernel.dao.jdbc.DataSourceProvider という名前のファイルを作成します。

  3. データソースプロバイダを JDK ServiceProviderInterface (SPI) として登録するには、クラス名全体を com.liferay.portal.kernel.dao.jdbc.DataSourceProvider ファイルに書き込みます。

com.liferay.y3c4.internal.dao.jdbc.DataSourceProviderImpl
  1. モジュールをデプロイする際は、 サンプルをデプロイする の手順 2 で行ったようにデータ ソースを定義することを忘れないでください。

これで、 モジュールのサービスビルダーサービスは、外部データソースにデータを永続化します。