問題
- Liferay DXP 7.4 またはクオータリーリリースにアップグレードすると、upgrade.log に以下のようなスタックトレースの警告が表示されます。
WARN [main][DDMFieldUpgradeProcess:626] Unable to get dynamic data mapping form field value type for content ID 1924622
java.lang.NullPointerException: null
at com.liferay.dynamic.data.mapping.storage.DDMFormFieldValue.getType(DDMFormFieldValue.java:131) ~[?:?]
環境
- Liferay DXP 7.4、2023.Q3、2023.Q4
解像度
説明:
- これらのNullPointerExceptionは良性である。 基本的には、あるフォームに対してフォーム送信があったときに、そのフォームにはもう存在しないフィールドが含まれている場合に発生します。
- これは通常、フォームが公開され、ユーザーがフォームに入力した後、フォームが修正されてフィールドが削除された場合に起こります。 これらの NullPointerException は、データの問題を引き起こしたり、アップグレードが正常に完了するのを止めたりすることはありません。
- これは、特定のフィールド (フォーム定義にもう存在しないフィールド) がうまく移行できなかったことを意味します。 しかし、そもそもそのフィールドはもうフォーム定義には存在しないので、これは問題ないはずです。
緩和:
- この WARN が発生しないようにするには、アップグレード前のデータベースのバックアップで特定のコンテンツを調べて、このエラーが発生する原因を確認します。 例えば、次のようなクエリーを実行できる:
SELECT * FROM DDMContent WHERE contentId = 1924622
- その後、返されたDDMContentの "data_"カラムを調べることができる。 空白の場合は、アップグレード前のデータベースで製品 API
DDMContentLocalServiceUtil.deleteDDMContent(contentId)
を使用してこのエントリを削除できます。
注:変更を行う前に、必ずデータベースのバックアップを取ってください。 本番環境で変更を行う前に、必ず下位の環境で変更をテストしてください。
データベースを手動で変更することは推奨されず、自社のビジネスニーズとリスク要因に基づいて慎重に評価されるべきである。 そのような手術はすべて、あなた自身のチームの独断で行われる。