JSFのサービス
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、こちらまでご連絡ください。
Creating services works the same in a JSF portlet as it would in any other standard WAR-style MVC portlet; generate custom services as separate API and Impl JARs and deploy them as individual modules to @<product@>. Service Builderを使用して、JSFポートレットのカスタムサービスを生成できます。 Liferay DXPでのService Builderの動作の詳細については、 Service Builder チュートリアルをご覧ください。
JSF WARは、 が 依存関係としてAPIモジュールに依存できます。 この方法でサービスをパッケージ化する主な利点は、複数のWARがすべてのWARの WEB-INF / lib
フォルダーにパッケージ化せずに同じカスタムサービスAPIを利用できるようにすることです。 この方法はまた、関心の分離、又は強制 モジュールのシステムのUI層とサービス層との間を、。
JSFポートレットからOSGiベースのService Builderサービスを呼び出すには、宣言サービスを使用してOSGiランタイムに公開されたサービスを検索できないため、OSGiサービスレジストリにアクセスできるメカニズムが必要です。 代わりに、OSGiサービスレジストリにあるサービスを呼び出す場合は、 ServiceTracker 開く必要があります。
JSFポートレットにサービストラッカーを実装するには、 org.osgi.util.tracker.ServiceTracker
を拡張するタイプセーフラッパークラスを追加できます。 たとえば、これはデモJSFポートレットで次のように行われます
public class UserLocalServiceTracker extends ServiceTracker<UserLocalService, UserLocalService> {
public UserLocalServiceTracker(BundleContext bundleContext) {
super(bundleContext, UserLocalService.class, null);
}
}
ServiceTracker
拡張した後、コンストラクターを呼び出すだけで、サービストラッカーがマネージドBeanで使用できるようになります。
マネージドBeanでは、サービスを呼び出す必要があるときはいつでも、サービストラッカーを開きます。 たとえば、これは同じデモJSFポートレットで行われ、サービストラッカーを開き、 @PostContruct
アノテーションを使用し
。
@PostConstruct
public void postConstruct() {
Bundle bundle = FrameworkUtil.getBundle(this.getClass());
BundleContext bundleContext = bundle.getBundleContext();
userLocalServiceTracker = new UserLocalServiceTracker(bundleContext);
userLocalServiceTracker.open();
}
その後、サービスを呼び出すことができます。
UserLocalService userLocalService = userLocalServiceTracker.getService();
...
userLocalService.updateUser(user);
マネージドBeanがスコープ外に出るとき、 @PreDestroy
アノテーションを使用してサービストラッカーを閉じる必要があります。
@PreDestroy
public void preDestroy() {
userLocalServiceTracker.close();
}
サービストラッカーとWARスタイルポートレットでそれらを使用する方法の詳細については、 Service Trackers チュートリアルを参照してください。