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. サンプル モジュールが動作していることを確認するには、データベースを開いてテーブルを一覧表示します。

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

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

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 で行ったように、データ ソースを定義することを忘れないでください。

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