ローカルサービスの呼び出し

ローカルサービスの呼び出し

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

サービスモジュールをデプロイすると、それらのサービスはコンテナで利用可能になります。 Service Builderは、ローカルおよびリモートサービスクラスをOSGi宣言サービス(DS)コンポーネントとして生成します。 これらのコンポーネントは他のDSコンポーネントからアクセスできるため、Webアプリケーションなどの他のコンポーネントから呼び出すことができます。 方法は次のとおりです。

  1. ローカルサービスコンポーネントへの参照を追加します。

  2. コンポーネントのメソッドを呼び出します。

Basic Service Builderという名前のBladeサンプルがあります。 基本Web モジュールには、ローカルサービスコンポーネントの参照を示す ポートレット サービスコンポーネントがあります。 このモジュールには、コンポーネントのメソッドを呼び出すJSPもあります。 最初のステップは、ローカルサービスコンポーネントオブジェクトへの参照を追加することです。

手順1:ローカルサービスコンポーネントを参照する

アプリケーションのService Builderで生成されたローカルサービスは、 @Reference アノテーションを使用して、アプリケーションの他のDSコンポーネント( @Componentアノテーションが付けられたクラス)

注入できるDSコンポーネントです。 basic-web モジュールの JSPPortlet クラスは、DSコンポーネントとして FooLocalService ローカルサービスを参照する Portlet サービスコンポーネントです。

@Reference
private volatile FooLocalService _fooLocalService;

OSGiサービスレジストリは、サービス実装オブジェクトを、それを参照するクラスに接続します。 JSPPortlet サンプルクラスは、 _fooLocalService フィールドをvolatileとして宣言しますが、フィールドをvolatileにすることは完全にオプションです。

重要: * LocalServiceImpl オブジェクトを直接呼び出さないでください。 * LocalService サービスインターフェイスを介して間接的にのみ呼び出す必要があります。 OSGiサービスレジストリは、サービス実装オブジェクトをクラスに接続します。

RenderRequest 属性に関連付けることにより、サービスオブジェクトをJSPで使用可能にすることができます。 たとえば、 JSPPortletrender メソッドは、 FooLocalService オブジェクトを fooLocalServiceという属性に関連付けます。

@Override
public void render(RenderRequest request, RenderResponse response)
    throws IOException, PortletException {

    //set service bean
    request.setAttribute("fooLocalService", getFooLocalService());

    super.render(request, response);
}

public FooLocalService getFooLocalService() {
    return _fooLocalService;
}

JSPが <portlet:defineObjects /> タグを宣言している場合、 RenderRequest 属性からサービスオブジェクトを取得できます。 たとえば、 JSPPortletinit.jsp ファイルは、 "fooLocalService" 属性から FooLocalService オブジェクトを取得します。

...
<%@
page import="com.liferay.blade.samples.servicebuilder.service.FooLocalService" %>
...

<liferay-theme:defineObjects />

<portlet:defineObjects />

<%
...

//get service bean
FooLocalService fooLocalService = (FooLocalService)request.getAttribute("fooLocalService");
%>

上記の init.jsp を含むすべてのJSPは、 fooLocalService 変数を使用してローカルサービスコンポーネントのメソッドを呼び出すことができます。

ステップ2:コンポーネントのメソッドを呼び出す

これでサービスコンポーネントオブジェクトができたので、Javaオブジェクトのメソッドと同じようにそのメソッドを呼び出すことができます。

basic-web サンプルモジュールの view.jsp および edit_foo.jsp ファイルには、前のセクションで示した init.jsp 含まれています。 したがって、サービスコンポーネントオブジェクトを参照する fooLocalService 変数にアクセスできます。 view.jsp ファイルは、 Foo インスタンスをリストするLiferay Search Containerでコンポーネントの getFoosCount メソッドと getFoos メソッドを使用します。

<liferay-ui:search-container
    total="<%= fooLocalService.getFoosCount() %>"
>
    <liferay-ui:search-container-results
        results="<%= fooLocalService.getFoos(searchContainer.getStart(), searchContainer.getEnd()) %>"
    />
    ...
</liferay-ui:search-container>

edit_foo.jsp ファイルは、 getFoo(long id) を呼び出して、エンティティインスタンスのIDに基づいて Foo エンティティを取得します。

long fooId = ParamUtil.getLong(request, "fooId");
Foo foo = null;
if (fooId > 0) {
    foo = fooLocalService.getFoo(fooId);
}

@Reference アノテーションを使用すると、アプリケーションのOSGi DSコンポーネント(ポートレットDSコンポーネントなど)に、アプリケーションのService Builderで生成されたローカルサービスコンポーネントのインスタンスを注入できます。 また、 RenderRequest 属性を介して、JSPにコンポーネントインスタンスへのアクセスを提供できます。

関連トピック

ローカルサービスの作成

リモートサービスの作成

リモートサービスの呼び出し

サービスセキュリティレイヤー

Service Builderコードからのサービスの呼び出し

OSGiサービスと宣言型サービスによる依存性注入

« Liferayのフレームワークとの統合Service Builderコードからのサービスの呼び出し »
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています