Liferayサービスのオーバーライド(サービスラッパー)

Liferayサービスをカスタマイズする必要があるのはなぜですか?LiferayのUserオブジェクトに新しいフィールドを追加していて、LiferayのAPIのaddUserまたはupdateUser メソッドが呼び出されるたびにその値が保存されるようにしたいのでしょうか。あるいは、Service Builderを使用して構築された一部のLiferay APIまたはその他のサービスに、追加のロギング機能を追加したいのでしょうか。 どちらの場合でも、Liferayのサービスラッパーでは、Liferayのサービスをカスタマイズするための使いやすい拡張ポイントが提供されます。

Liferayのサービスの1つをオーバーライドするモジュールを作成するには、Service Wrapper Templateの参照記事に従ってservicewrapperプロジェクトタイプを作成します。

例として、サービスラッパーテンプレートのチュートリアルで生成されたUserLocalServiceOverrideクラスを以下に示します。

package com.liferay.docs.serviceoverride;

import com.liferay.portal.kernel.service.UserLocalServiceWrapper;
import com.liferay.portal.kernel.service.ServiceWrapper;
import org.osgi.service.component.annotations.Component;

@Component(
immediate = true,
property = {
},
service = ServiceWrapper.class
)
public class UserLocalServiceOverride extends UserLocalServiceWrapper {

public UserLocalServiceOverride() {
super(null);
}

}

拡張するサービスラッパークラスの完全修飾クラス名を指定する必要があることに注意してください。service引数は次のimportステートメントで完全に使用されました。

import com.liferay.portal.service.UserLocalServiceWrapper

次に、このimportステートメントにより、コンポーネントクラスのクラス宣言で短い形式のサービスラッパークラス名を使用できるようになりました。

public class UserLocalServiceOverride extends UserLocalServiceWrapper

一番下の行は、blade createを使用してサービスラッパープロジェクトを作成する場合に、service引数として完全修飾クラス名を指定する必要があることを示しています。(これはblade createを使用してサービスプロジェクトを作成する場合にも当てはまります。)サービスプロジェクトの作成については、Service Builderチュートリアルを参照してください。

生成されたUserLocalServiceOverrideクラスは、実際にはLiferayサービスをカスタマイズしていません。サービスラッパーモジュールが実際に機能するかテストする前に、少なくとも1つのサービスメソッドをオーバーライドする必要があります。

UserLocalServiceOverrideクラスを開き、次のメソッドを追加します。

@Override
public int authenticateByEmailAddress(long companyId, String emailAddress,
String password, Map<String, String[]> headerMap,
Map<String, String[]> parameterMap, Map<String, Object> resultsMap)
throws PortalException {

System.out.println(
"Authenticating user by email address " + emailAddress);
return super.authenticateByEmailAddress(companyId, emailAddress, password,
headerMap, parameterMap, resultsMap);
}

@Override
public User getUser(long userId) throws PortalException {
System.out.println("Getting user by id " + userId);
return super.getUser(userId);
}

これらの各メソッドは、Liferayサービスメソッドをオーバーライドします。これらの実装では、元のサービス実装を実行する前に、いくつかのprintステートメントのみが実行されます。

最後に、サービスラッパーの下部に次のメソッドを追加して、デプロイ時にオーバーライドする適切なサービスを見つけられるようにする必要があります。

@Reference(unbind = "-")
private void serviceSetter(UserLocalService userLocalService) {
setWrappedService(userLocalService);
}

モジュールをビルドしてデプロイします。 Liferayサービスラッパーを作成して展開する方法がわかりました。

関連トピック

Upgrading Service Wrappers

Installing Blade CLI

Creating Projects with Blade CLI

« JSPを使用したインラインコンテンツのオーバーライドOSGiサービスのオーバーライド »
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています