問題
-
ノードがクラスタ モードで起動し、プロパティ "cluster.link.enabled" が有効になっている場合、次のようなエラー トレースがログに表示されます:
2021-03-22 10:20:12.856 WARN [http-nio-8080-exec-1][PortalImpl:6840] javax.servlet.ServletException: A servlet matching the filter (servlet.init.private=false)(servlet.type=friendly-url) is unavailable
javax.servlet.ServletException: A servlet matching the filter (servlet.init.private=false)(servlet.type=friendly-url) is unavailable
...
Caused by: java.lang.NullPointerException
at com.liferay.staging.security.internal.permission.StagingPermissionChecker.hasPermission(StagingPermissionChecker.java:128)
...
2021-03-22 10:20:12.975 ERROR [http-nio-8080-exec-1][error_jsp:618] User ID null
2021-03-22 10:20:12.975 ERROR [http-nio-8080-exec-1][error_jsp:619] Current URL /
2021-03-22 10:20:12.975 ERROR [http-nio-8080-exec-1][error_jsp:620] Referer null
2021-03-22 10:20:12.976 ERROR [http-nio-8080-exec-1][error_jsp:621] Remote address 127.0.0.1
2021-03-22 10:20:12.976 ERROR [http-nio-8080-exec-1][error_jsp:623] com.liferay.portal.kernel.events.ActionException: java.lang.NullPointerException
com.liferay.portal.kernel.events.ActionException: java.lang.NullPointerException
...
Caused by: java.lang.NullPointerException
at com.liferay.staging.security.internal.permission.StagingPermissionChecker.hasPermission(StagingPermissionChecker.java:128)
- プロパティ「cluster.link.enabled」を無効にしてクラスターモードを無効にすると、ノードは問題なく起動します。
- このエラーは、クラスター通信に使用される発信 IP とネットワーク インターフェイスに関連しています。
-
デフォルトでは、JGroups は localhost を使用して自動的にバインド アドレスを設定します。 ただし、一部の構成では、localhost はホストの実際のアドレスではなく、内部ループバック ネットワーク (127.0.0.1 または:1) にバインドされます。
-
この動作を上書きするために、Liferay にはプロパティ "cluster.link.autodetect.address" があります。 選択されたインターフェイスは、このプロパティで指定されたアドレスを解決できるものになります (デフォルトでは www.google.com:80)。 このアドレスに到達できない場合は、localhost が使用され、例外が発生する可能性があります。
環境
- Liferay DXP 7.2+
解決
- この問題を解決する 1 つの方法は、 portal-ext.properties のプロパティ「cluster.link.autodetect.address」の値を変更して、クラスタリンクからアクセス可能で、クラスタリンク自体の設定に使用できるホスト/ポートの組み合わせを設定することです。最も簡単なオプションは、既に判っている (アクセス可能な) データベース サーバとポートを使用して、デフォルト値を置き換えることです。
-
例:
cluster.link.autodetect.address=database_node:1521
追加情報