サービスビルダーを外部データベースに接続する
サービス ビルダーは、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に変更します。
例をデプロイするには、次の手順に従います。
-
サンプルモジュール用の 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= -
ポータル プロパティを使用してデータ ソースを定義した場合は、Liferay Portal インスタンスを再起動します。
-
liferay-y3c4.zipサンプル プロジェクトをダウンロードして解凍します。curl https://resources.learn.liferay.com/examples/liferay-y3c4.zip -Ounzip liferay-y3c4.zip -
プロジェクトモジュールをビルドしてデプロイします。
cd liferay-y3c4./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)注このコマンドは、デプロイされたjarをDockerコンテナ上の
/opt/liferay/osgi/modulesにコピーするのと同じです。 -
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] -
サンプル モジュールが動作していることを確認するには、データベースを開いてテーブルを一覧表示します。
データソースプロバイダーの作成
外部データベースに接続する最も簡単な方法は、 DataSourceProvider を JDK ServiceProviderInterface (SPI) として作成し、登録することです。
Service Builder モジュールの service.xml ファイルで定義されているすべてのエンティティは、同じデータ ソースにバインドされます。 異なるエンティティを異なるデータ ソースにバインドするには、個別の Service Builder モジュールでエンティティを定義し、各モジュールが異なるデータ ソースを使用するように構成する必要があります。
DataSourceProviderインターフェースのgetDataSource()メソッドを実装して、Service Builder モジュールをデータ ソースに接続します。
public class DataSourceProviderImpl implements DataSourceProvider {
@Override
public DataSource getDataSource() {
DataSourceProvider を *-service モジュールに配置します。これは、 *-service モジュール クラス ローダーから見えるようにする必要があるためです。
- 選択したプレフィックスを持つポータル プロパティからデータ ソースを作成するには、
DataSourceFactoryUtilを使用します。
@Override
public DataSource getDataSource() {
try {
return DataSourceFactoryUtil.initDataSource(
PropsUtil.getProperties("jdbc.ext.", true));
}
catch (Exception exception) {
throw new RuntimeException(exception);
}
}
-
*-serviceモジュール内に、まだ存在しない場合は、src/main/resources/META-INF/servicesという名前のフォルダーを作成します。 -
servicesフォルダ内に、com.liferay.portal.kernel.dao.jdbc.DataSourceProviderという名前のファイルを作成します。 -
データソースプロバイダを JDK
ServiceProviderInterface(SPI) として登録するには、その完全なクラス名をcom.liferay.portal.kernel.dao.jdbc.DataSourceProviderファイルに書き込みます。
com.liferay.y3c4.internal.dao.jdbc.DataSourceProviderImpl
- モジュールをデプロイするときは、 例のデプロイの手順 2 で行ったように、データ ソースを定義することを忘れないでください。
これで、 モジュールのサービス ビルダー サービスは、データを外部データ ソースに保存します。