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

サービスラッパーの作成

サービスラッパーを使用すると、デフォルトのサービスメソッドをオーバーライドして、追加機能を追加できます。 例えば、Liferay API の User メソッドが呼び出されるたびに、Liferay の addUser または updateUser メソッドに追加されたフィールドの値を保存したい場合があります。 Liferayのサービスラッパーは、Liferayのサービスをカスタマイズするための使いやすい拡張ポイントを提供します。

サービスラッパーのデプロイ

新しいLiferay インスタンスを起動し、以下を実行します。

docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.132-ga132

http://localhost:8080 で Liferay にサインインしてください。 メールアドレス test@liferay.com とパスワード test を使用してください。 プロンプトが表示されたら、パスワードを learnに変更します。

次に、以下の手順に従ってサンプルをデプロイしてください。

  1. liferay-j1c2.zip サンプルプロジェクトをダウンロードして解凍します。

    curl https://resources.learn.liferay.com/examples/liferay-j1c2.zip -O
    
    unzip liferay-j1c2.zip
    
  2. プロジェクトモジュールをビルドしてデプロイします。

    cd liferay-j1c2
    
    ./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
    

    このコマンドは、デプロイされた jar ファイルを Docker コンテナ上の /opt/liferay/osgi/modules にコピーすることと同じです。

  3. Liferay Dockerコンテナコンソールでデプロイを確認します。

    STARTED com.acme.j1c2.impl_1.0.0 [1439]
    
  4. サンプルモジュールのカスタマイズを確認するには、ブラウザで https://localhost:8080 を開きます。

  5. Liferayからログアウトして、再度ログインしてください。 サービスラッパーは、Liferay Dockerコンテナのコンソールに以下のメッセージを出力します。

    INFO  [http-nio-8080-exec-6][J1C2UserLocalServiceWrapper:25] Invoking #authenticateByEmailAddress(long, String, String, Map, Map, Map)
    

この例では、 authenticateByEmailAddress メソッドが呼び出されるたびにコンソールにメッセージを出力します。

サービスラッパークラスの作成

  1. ご希望のラッピングサービスをお選びください。 この例では、 UserLocalServiceのサービス ラッパーを作成するので、 UserLocalServiceWrapper を拡張します。
public class J1C2UserLocalServiceWrapper extends UserLocalServiceWrapper {
  1. Liferayがこれがサービスラッパーコンポーネントであることを認識できるように、クラスに注釈を付けます。
@Component(service = ServiceWrapper.class)
  1. オーバーライドしたいメソッドを選択し、独自の実装を追加してください。
@Override
public int authenticateByEmailAddress(
		long companyId, String emailAddress, String password,
		Map<String, String[]> headerMap, Map<String, String[]> parameterMap,
		Map<String, Object> resultsMap)
	throws PortalException {

	if (_log.isInfoEnabled()) {
		_log.info(
			"Invoking #authenticateByEmailAddress(long, String, String, " +
				"Map, Map, Map)");
	}

	return super.authenticateByEmailAddress(
		companyId, emailAddress, password, headerMap, parameterMap,
		resultsMap);
}

メソッドのオーバーライド

  1. テキストエディタまたはIDEで J1C2UserLocalServiceWrapper クラスを開きます。

  2. クラス内に、 getUser という名前のパブリックメソッドを作成します。 これは UserLocalServicegetUser メソッドをオーバーライドします。 そのため、引数として long を渡し、 User を返す必要があります。 このメソッドは PortalException もスローする必要があります。 @Override アノテーションを必ず追加してください。

    @Override
    public User getUser(long userId) throws PortalException {
    }
    
  3. このメソッドは User オブジェクトを返すため、ファイルの先頭でインポートします。

    import com.liferay.portal.kernel.model.User;
    
  4. 例にあるメソッドと同様のメソッドを作成し、 getUser メソッドが呼び出されるたびに、コンソールにメッセージを出力するようにします。

    if (_log.isInfoEnabled()) {
        _log.info(
            "Invoking #getUser(long)");
    }
    
  5. getUser が呼び出されるようにしたいので、メソッドが getUserのスーパーメソッドを呼び出した後の結果を返すようにします。

    return super.getUser(userId);
    
  6. 最終的に、あなたのメソッドは次のようになるはずです。

    @Override
    public User getUser(long userId) throws PortalException {
        if (_log.isInfoEnabled()) {
            _log.info(
                "Invoking #getUser(long)");
        }
    
        return super.getUser(userId);
    }
    
  7. モジュールを構築してデプロイします。

    ./gradlew build deploy -Ddeploy.docker.container.id=$(docker ps -lq)
    

サービスラッパーのテスト

  1. https://localhost:8080 に戻ります。

  2. ユーザーメニューの マイプロフィール をクリックしてください。 これであなたのプロフィールページに移動します。

  3. プロファイルページを開くと、Liferay は getUser メソッドを数回呼び出します。 コンソールに以下のメッセージが表示されているか確認してください。

INFO  [http-nio-8080-exec-4][J1C2UserLocalServiceWrapper:39] Invoking #getUser(long)

これで、 Liferayサービスラッパーを使用して、サービスのメソッドをカスタマイズしました。