ライフサイクルイベントの待機
Liferay は、ポータルやポートレットの初期化などのライフサイクル イベントを OSGi サービス レジストリに登録します。 OSGi クラスは、これらのサービス登録をリッスンして、特定のタスクを実行する前にそれぞれのライフサイクル イベントを待機できます。 ModuleServiceLifecycle インターフェース は、これらのイベントの名前を定義します。
LICENSE_INSTALLPORTAL_INITIALIZEDPORTLETS_INITIALIZED
次のサンプルは、 PORTAL_INITIALIZED イベントをリッスンし、コンソールにメッセージを記録します。
サンプルコードをデプロイする
新しい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に変更します。
次に、以下の手順に従います。
-
サンプルをダウンロードして解凍します。
curl https://resources.learn.liferay.com/examples/liferay-h4l9.zip -Ounzip liferay-h4l9.zip -
モジュールのルートから、ビルドおよびデプロイします。
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)注このコマンドは、デプロイされたjarをDockerコンテナ上の
/opt/liferay/osgi/modulesにコピーするのと同じです。 -
Liferay Dockerコンテナコンソールでデプロイを確認します。
STARTED com.acme.h4l9.impl.0.0 [1009] -
別のタブで、Liferay コンテナを停止します。
docker stop $(docker ps -lq) -
Liferay コンテナを再起動します。 Liferay の起動が完了すると、
PORTAL_INITIALIZEDイベントが登録されます。docker start $(docker ps -lq) -
サンプルモジュールはライフサイクルイベントをリッスンし、次のメッセージを Liferay Docker コンテナコンソールに出力します。
INFO [http-nio-8080-exec-6][H4L9PortalInstanceLifecycleListener:20] Invoking #activate
コンポーネントからアクションを実行する
宣言型サービス を使用すると、必要なイベントを簡単にターゲットにすることができます。
@Reference アノテーションを使用して、必要なライフサイクル イベントの名前をターゲットにします。 選択したイベントが登録されると、コンポーネントはタスクの実行を開始します。
@Reference(target = ModuleServiceLifecycle.PORTAL_INITIALIZED)
private ModuleServiceLifecycle _moduleServiceLifecycle;
@Activate
protected void activate() {
if (_log.isInfoEnabled()) {
_log.info("Invoking #activate");
}
}