問題
- インスタンス設定で構成を変更して [保存] をクリックすると、改ページ (メニューが表示されなくなります) 、変更が保存されません。
- ログには、次のような部分でスタック トレースがスローされていることがわかります。
ERROR [http-nio-8080-exec-4][PortletServlet:112] javax.portlet.PortletException: com.liferay.portal.kernel.exception.ModelListenerException: java.lang.NullPointerException
javax.portlet.PortletException: com.liferay.portal.kernel.exception.ModelListenerException: java.lang.NullPointerException
at com.liferay.portal.kernel.portlet.bridges.mvc.BaseMVCActionCommand.processAction(BaseMVCActionCommand.java:69)
Caused by: java.lang.NullPointerException
at com.liferay.portal.model.impl.UserImpl.getGroupId(UserImpl.java:512)
at com.liferay.calendar.internal.model.listener.UserModelListener.onAfterUpdate(UserModelListener.java:68)
... 231 more
Environment
- DXP 7.1
- DXP 7.2
解決策
- これは、最初の起動時に liferay が作成する非表示のデフォルト ユーザーに関連する calendarresource テーブルの無効な行が原因です。 現在、この行がどのように挿入されたかはわかりません。 現在の知識によると、ポータルの通常の操作と機能によって、このような行が作成されることはありません。
- 行は、次のような選択で見つけることができます。
SELECT * FROM CalendarResource
WHERE classNameId = (SELECT classNameId FROM ClassName_ WHERE value = 'com.liferay.portal.kernel.model.User')
AND classPK = (SELECT userId FROM User_ WHERE emailAddress = 'default@liferay.com');
- 解決策は、次のような Groovy スクリプトを使用してその行を削除することです。
import com.liferay.calendar.service.CalendarResourceLocalServiceUtil;
CalendarResourceLocalServiceUtil.deleteCalendarResource(10101275);
10101275 は、上記の SELECT クエリによって返された calendarResourceId に置き換える必要があります。 安全を確保するために、最初に実稼働前の環境で試し、データベースのバックアップを事前に作成してください。 このソリューションを適用する理由がわからない、または問題が発生した場合は、サポートでチケットを開いて、この記事を参照してください。