サービスビルダーを使用したビジネスロジック
Service Builder を使用して モデル、永続性、およびサービス コードを生成 したら、ビジネス ロジックの追加を開始できます。 サービスビルダが生成するエンティティには,モデル実装とローカルサービス実装クラスが含まれます. アプリケーションのビジネスロジックは、これらのクラスで実装することができます。 生成されたサービスは、後で永続レイヤーからCRUD操作を呼び出すデフォルトのメソッドを含んでいます。 ビジネスロジックを作成したら、再びサービスビルダーを実行して、アプリケーションのインターフェースをプロパゲートさせ、新しいロジックを呼び出せるようにします。
サンプルプロジェクトを参照する
新しい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に変更します。
次に、以下の手順に従います。
-
Business Logic with Service Builderをダウンロードして解凍します。
curl https://resources.learn.liferay.com/examples/liferay-e4g5.zip -Ounzip liferay-e4g5.zip -
モジュールのルートから、ビルドおよびデプロイします。
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)注このコマンドは、デプロイされたjarをDockerコンテナの/opt/liferay/osgi/modulesにコピーするのと同じです。
-
Liferay Dockerコンテナコンソールでデプロイを確認します。
STARTED com.acme.e4g5.api_1.0.0 [1034] STARTED com.acme.e4g5.service_1.0.0 [1035] STARTED com.acme.e4g5.web_1.0.0 [1036] -
サンプルのモジュールが機能していることを確認します。 ブラウザで
https://localhost:8080を開きます。 -
E4G5ポートレットをページに追加します。 サンプルポートレットは、サンプルウィジェットの下にあります。

-
名前と説明(例:e4g5_name1、e4g5_description1)を入力して、エントリーを追加します。
[Add]をクリックすると、新しい項目が[E4G5 Entries]の下に表示されます。e4g5EntryId -
次に、このエントリを更新しますが、前のステップで入力した
e4g5EntryIdと新しい[name]と[description]を入力します。 (e.g. 41804, e4g5_name2, e4g5_description2).[Update]をクリックすると、エントリーが更新されます。 -
最後に、
e4g5EntryIdを入力して、エントリーを削除します。[Delete]をクリックすると、エントリーが削除されます。
サービスレイヤーの更新
E4G5Entryエントリーを追加、更新、削除できるメソッドを追加し、ローカルサービスを拡張します。
Addメソッドの実装
- エンティティを作成するためのパラメータを持つ
add*メソッドを宣言します。
@Override
public E4G5Entry addE4G5Entry(String description, String name)
throws PortalException {
E4G5Entry e4g5Entry = e4g5EntryPersistence.create(
counterLocalService.increment());
e4g5Entry.setDescription(description);
e4g5Entry.setName(name);
return e4g5EntryPersistence.update(e4g5Entry);
}
-
エンティティに関連付けられた*Persistenceクラスは、与えられたIDのエンティティインスタンスを構築するcreate()メソッドを持っています。 *BaseLocalServiceImplごとに、エンティティのcounterLocalServiceオブジェクトがあります。 カウンターサービスのincrement()メソッドを呼び出して、エンティティインスタンスのプライマリーキーを生成します。
-
エンティティのセッターメソッドを使用して、エンティティの属性を入力します。 サンプルでは2つの属性を設定しています。 nameとdescriptionです。
-
*Persistenceクラスのupdate()メソッドを呼び出し、エンティティオブジェクトを渡します。
Updateメソッドの実装
- エンティティを更新するためのパラメータを持つ
update*メソッドを宣言します。 このサンプルでは、e4g5EntryIdとともに、nameとdescription属性を受け取ります。
@Override
public E4G5Entry updateE4G5Entry(
long e4g5EntryId, String description, String name)
throws PortalException {
E4G5Entry e4g5Entry = e4g5EntryPersistence.findByPrimaryKey(
e4g5EntryId);
e4g5Entry.setDescription(description);
e4g5Entry.setName(name);
return e4g5EntryPersistence.update(e4g5Entry);
}
-
*PersistenceクラスのfindByPrimaryKey()メソッドを使用して、エントリーIDによるエンティティインスタンスを取得します。
-
エンティティのセッターメソッドを使用して、エンティティの属性を入力します。
-
*Persistenceクラスのupdate()メソッドを呼び出し、エンティティオブジェクトを渡します。
Deleteメソッドの実装
- エンティティのエントリIDを受け取る
delete*メソッドを宣言します。
@Override
public E4G5Entry deleteE4G5Entry(long e4g5EntryId) throws PortalException {
E4G5Entry e4g5Entry = e4g5EntryPersistence.findByPrimaryKey(
e4g5EntryId);
e4g5EntryPersistence.remove(e4g5Entry);
return e4g5Entry;
}
*Persistence クラスの delete() メソッドを呼び出し、エンティティオブジェクトを渡します。
add*, update*, delete* メソッドを実装した後、サービスビルダーを実行して、新しいサービスメソッドを *LocalService インターフェースにプロパゲートさせます。
バックエンドを統合する
次に、作成したサービス メソッドを ポートレット アクションを使用して Web モジュールに実装します。
ポートレットアクション
Web モジュールには MVC ポートレット を使用できます。 サンプルプロジェクトのポートレットは、 add, update, deleteのエントリアクションを持ちます。
public void addE4G5Entry(
ActionRequest actionRequest, ActionResponse actionResponse)
throws PortalException {
_e4g5EntryLocalService.addE4G5Entry(
ParamUtil.getString(actionRequest, "description"),
ParamUtil.getString(actionRequest, "name"));
}
public void deleteE4G5Entry(
ActionRequest actionRequest, ActionResponse actionResponse)
throws PortalException {
_e4g5EntryLocalService.deleteE4G5Entry(
ParamUtil.getLong(actionRequest, "e4g5EntryId"));
}
public void updateE4G5Entry(
ActionRequest actionRequest, ActionResponse actionResponse)
throws PortalException {
_e4g5EntryLocalService.updateE4G5Entry(
ParamUtil.getLong(actionRequest, "e4g5EntryId"),
ParamUtil.getString(actionRequest, "description"),
ParamUtil.getString(actionRequest, "name"));
}
各メソッドは、ActionRequestとActionResponseのパラメータを受け取ります。 ActionRequestはビューレイヤーから情報を受け取り、 ActionResponseはビューレイヤーに情報を戻すのに使用することができます。
addE4G5Entry()メソッドは、名前と説明を受け取り、サービスを呼び出してエントリーを追加します。 updateE4G5Entry()メソッドは、エントリID、名前、説明を受け取り、特定のエントリを更新するためにサービスを呼び出します。 deleteE4G5Entry()メソッドは、エントリIDを受け取り、サービスを呼び出してエントリを削除します。
JSPのアクションをマッピングする
ここで、作成したアクションメソッドをJSPにマッピングします。
<h3>Add a E4G5 Entry</h3>
<portlet:actionURL name="addE4G5Entry" var="addE4G5EntryURL" />
<aui:form action="<%= addE4G5EntryURL %>">
<aui:input name="name" type="text" />
<aui:input name="description" type="text" />
<aui:button type="submit" value="add" />
</aui:form>
<hr />
<h3>Update a E4G5 Entry</h3>
<portlet:actionURL name="updateE4G5Entry" var="updateE4G5EntryURL" />
<aui:form action="<%= updateE4G5EntryURL %>">
<aui:input name="e4g5EntryId" type="text" />
<aui:input name="name" type="text" />
<aui:input name="description" type="text" />
<aui:button type="submit" value="update" />
</aui:form>
<hr />
<h3>Delete a E4G5 Entry</h2>
<portlet:actionURL name="deleteE4G5Entry" var="deleteE4G5EntryURL" />
<aui:form action="<%= deleteE4G5EntryURL %>">
<aui:input name="e4g5EntryId" type="text" />
<aui:button type="submit" value="delete" />
JSPでは、タグライブラリのportlet:actionURLタグを使ってアクションをUIコンポーネントにバインドします。 portlet:actionURLのname属性はポートレットで作成した各アクションメソッドと一致しなければならないことに注意してください。 var属性は、ポートレットアクションURLを任意の変数に割り当てます。 <aui:form> は、ユーザー入力用のテキスト フィールドをレンダリングします。 フォームを送信すると、その値がActionRequestとともにポートレットメソッドに渡されます。
関連トピック