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

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

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

Service Builderアプリケーション内で作成されたすべてのサービスは、内部のSpringアプリケーションコンテキストを使用して配線されます。 これは、AOPプロキシを使用して、トランザクション、インデックス作成、およびセキュリティにサービスを適合させます。 モジュールの中で モジュールspring.xml スプリングアプリケーション・コンテキスト・ファイル、サービスビルダは、各エンティティの定義 * LocalServiceImpl* ServiceImpl、及び * PersistenceImpl のSpring Beanとしてクラスを。 たとえば、Service Builderは、 Liferay Blade Service Builder basic-service sampleモジュールの src / main / resources / META-INF / spring / module-spring.xml ファイルの Foo エンティティにSpring Beanを定義します。

<?xml version="1.0"?>

<beans
    default-destroy-method="destroy"
    default-init-method="afterPropertiesSet"
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
>
    <bean class="com.liferay.blade.samples.servicebuilder.service.impl.FooLocalServiceImpl" id="com.liferay.blade.samples.servicebuilder.service.FooLocalService" />
    <bean class="com.liferay.blade.samples.servicebuilder.service.impl.FooServiceImpl" id="com.liferay.blade.samples.servicebuilder.service.FooService" />
    <bean class="com.liferay.blade.samples.servicebuilder.service.persistence.impl.FooPersistenceImpl" id="com.liferay.blade.samples.servicebuilder.service.persistence.FooPersistence" parent="basePersistence" />
</beans>

サンプルコンテキストが定義するBeanの概要は次のとおりです。

インターフェースID実装クラス
com.liferay.blade.samples.servicebuilder.service.FooLocalServicecom.liferay.blade.samples.servicebuilder.service.impl.FooLocalServiceImpl
com.liferay.blade.samples.servicebuilder.service.FooServicecom.liferay.blade.samples.servicebuilder.service.impl.FooServiceImpl
com.liferay.blade.samples.servicebuilder.service.persistence.FooPersistencecom.liferay.blade.samples.servicebuilder.service.persistence.impl.FooPersistenceImpl

これらのクラスはSpring Beansであり、OSGi Declarative Servicesコンポーネントではないため、 @Reference Declarative Servicesアノテーション以外のアノテーションを使用して、Spring BeansおよびOSGiサービスを注入します。 Service Builder Spring Beanで使用できる推奨Liferayアノテーションを以下に示します。

最初に @BeanReference アノテーションについて説明します。

アプリケーションコンテキストにあるSpring Beanを参照する

* LocalServiceImpl クラスなどのService Builder Spring Beanクラスは、Liferayの @BeanReference アノテーションを使用して、モジュールのSpring Application Contextが定義する他のSpring Beanにアクセスする必要があります。

たとえば、サービスモジュールの service.xml ファイルが Foo および Barという名前のエンティティのローカルサービスを定義する場合、Service Builderは両方のエンティティのローカルサービスSpring Beanを定義する module-spring.xml ファイルを生成します。 たとえば、 BarLocalService Spring Beanを FooLocalServiceImpl クラスに注入するには、 FooLocalServiceImpl クラスが BarLocalService フィールドを宣言し、 @BeanReference アノテーションを適用します。

@BeanReference
private BarLocalService _barLocalService;

@BeanReference 使用すると、LiferayのAOPは、必要に応じて、トランザクション、検索インデックス、またはセキュリティで使用するためのBean参照を処理できます。 参照クラスは、Spring Beanクラスのメソッドを呼び出すことができます。

Service Builderがアプリケーションで使用可能にするサービスに加えて、Service Builder Spring Beanクラスは、OSGiレジストリで公開されているすべてのサービスにもアクセスできます。 これは、次のサービスが利用できることを意味します。

  • Liferayのコアで定義されたBean
  • 他のモジュールアプリコンテキストで作成されたBean
  • OSGi宣言サービスを使用して宣言されたサービス
  • OSGi低レベルAPIを使用して登録されたサービス

これらはすべてOSGiサービスです。 次のセクションでは、OSGiサービスを参照するService Builder Spring Beanを示します。

OSGiサービスの参照

多くの場合、Service Builderコード(Spring Bean)は外部サービスを使用する必要があります。 Liferayの @ServiceReference アノテーションにより、Liferay Spring BeansはOSGiサービスを参照できます。

あなたはその中で、単純な実体を持つアプリケーション、サービス・モジュールの定義を構築していると仮定 service.xmlに ファイル。 アプリケーションは、新しいエンティティが作成されるたびにSMSを送信する必要があり、システムにインストールされたモジュールによって SMSService が提供されます。

* LocalServiceImpl (Spring Bean)は、 @ServiceReference アノテーションを使用して、 外部 サービスを参照できます。

@ServiceReference
private SMSService _smsService;

この注釈は、OSGiサービスへの参照を取得し、いくつかの素晴らしい利点を提供します。 SMSService サービスが使用可能になるまで、Springコンテキストは作成されません。 同様に、 SMSService 突然消えると、Spring Application Context全体が破棄されます。 これにより、Liferay Springアプリの堅牢性と汎用性が大幅に向上します。

幸いなことに、Service Builderは、 service.xml ファイルが参照するすべてのエンティティに対してこの種のコードを生成します。 たとえば、 Liferay Blade Service Builderサンプルプロジェクト basic-service モジュールの service.xml ファイルは、 AssetEntry エンティティを参照する Foo エンティティを定義します。

<reference entity="AssetEntry" package-path="com.liferay.portlet.asset" />

Service Builderは FooLocalServiceBaseImpl クラス(基本クラスは FooLocalServiceImpl クラスの階層の一部です)を生成し、 @ServiceReferenceアノテーションが付けられたフィールドを使用して AssetEntry エンティティのローカルサービス AssetEntryLocalService を参照します。

@ServiceReference(type = com.liferay.asset.kernel.service.AssetEntryLocalService.class)
protected com.liferay.asset.kernel.service.AssetEntryLocalService assetEntryLocalService;

すばらしいです\! これで、OSGiサービスへの参照をService Builder Spring Beanに追加する方法がわかりました。 また、Service Builder Spring Beanのアプリケーションコンテキストで他のSpring Beanへの参照を追加する方法も知っています。

関連トピック

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

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

JSON Web Services Invoker

サービストラッカー

« ローカルサービスの呼び出しアプリケーションセキュリティ »
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています