アップグレード時に「ポートレットはNULLであってはならない」エラーが発生する。

問題

  • アップグレード中に、以下のようなエラーが発生する場合があります:
    2023-03-29 08:09:14.891 ERROR [Framework Event Dispatcher: Equinox Container: 6a56b6f1-2524-4207-a9fb-dfe9b3dab41e][Framework:56] FrameworkEvent ERROR
    java.lang.IllegalArgumentException: Portlet must not be null
    at com.liferay.portal.security.permission.ResourceActionsImpl.populatePortletResource(ResourceActionsImpl.java:494) ~[portal-impl.jar:?]
    at com.liferay.object.internal.security.permission.resource.util.ObjectDefinitionResourcePermissionUtil.populateResourceActions(ObjectDefinitionResourcePermissionUtil.java:76) ~[?:?]
    at com.liferay.object.internal.deployer.ObjectDefinitionDeployerImpl.deploy(ObjectDefinitionDeployerImpl.java:186) ~[?:?]
    at com.liferay.object.service.impl.ObjectDefinitionLocalServiceImpl._addingObjectDefinitionDeployer(ObjectDefinitionLocalServiceImpl.java:808) ~[?:?]
    at com.liferay.object.service.impl.ObjectDefinitionLocalServiceImpl.setAopProxy(ObjectDefinitionLocalServiceImpl.java:594) ~[?:?]
    at com.liferay.portal.aop.internal.AopServiceRegistrar._getService(AopServiceRegistrar.java:146) ~[?:?]
    at com.liferay.portal.aop.internal.AopServiceRegistrar.register(AopServiceRegistrar.java:80) ~[?:?]
    at com.liferay.portal.aop.internal.AopServiceResolver.addAopServiceRegistrar(AopServiceResolver.java:38) ~[?:?]
    at com.liferay.portal.aop.internal.AopServiceManager$AopServiceServiceTrackerCustomizer.addingService(AopServiceManager.java:124) ~[?:?]
    at com.liferay.portal.aop.internal.AopServiceManager$AopServiceServiceTrackerCustomizer.addingService(AopServiceManager.java:96) ~[?:?]
    at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:943) ~[org.eclipse.osgi.jar:?]
    ...

Environment

  • Liferay DXP 7.0+

解決策

  • 解決策としては、 objectdefinition テーブルを確認し、そこに異常がないかを確認することです
  • 表を見てもわからない場合は、デバッグを行い、 ObjectDefinitionDeployerImpl.java クラスのデプロイメソッドに何らかのブレークポイントを設置する必要があります。
  • 問題のある行が見つかったら、以下のスクリプトでエントリーを削除します:
    import com.liferay.object.service.ObjectDefinitionServiceUtil;
    ObjectDefinitionServiceUtil.deleteObjectDefinition(objectDefinitionId);

この記事は役に立ちましたか?
2人中1人がこの記事が役に立ったと言っています