最終更新日 :
2021年4月27日
問題点
AEM ログファイルで次のエラーが観測されます。
31.05.2017 17:00:00.003 *ERROR* [sling-default-1000-HourlySnapshotJob] org.apache.sling.commons.scheduler.impl.QuartzScheduler Exception during job execution of com.day.cq.reporting.impl.snapshots.SnapshotServiceImpl$2@1a639a76 : null java.lang.NullPointerException: null at org.apache.sling.jcr.resource.internal.JcrResourceResolverFactoryImpl.getResourceResolver(JcrResourceResolverFactoryImpl.java:125) at org.apache.sling.jcr.resource.internal.JcrResourceResolverFactoryImpl.getResourceResolver(JcrResourceResolverFactoryImpl.java:94) at com.day.cq.reporting.impl.snapshots.SnapshotServiceImpl.executeSnapshot(SnapshotServiceImpl.java:274) at com.day.cq.reporting.impl.snapshots.SnapshotServiceImpl$2.run(SnapshotServiceImpl.java:160) at org.apache.sling.commons.scheduler.impl.QuartzJobExecutor.execute(QuartzJobExecutor.java:118) at org.quartz.core.JobRunShell.run(JobRunShell.java:202) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)
環境
AEM 6.2
原因
これは、アクティベートを解除された JcrResourceResolverFactory クラスのインスタンスへの参照をクラスが保持しているときに発生します。コンポーネントをアクティベート解除して再度アクティベートすると、新しいインスタンスが作成されます。したがって、古いインスタンスを保持したままにした場合、参照は null になり、再び設定されません。この NullPointerException は、Felix SCR 経由で挿入されたフィールドに対してメソッド呼び出しが行われると発生します。そのフィールドは値を持っていなければなりません。なぜなら、メソッド呼び出しは、同様に SCR によって開始される activate() 呼び出しで開始されているからです。
解決策
この問題は Apache Felix SCR ライブラリのバージョン 2.0.8 で解決されています。この問題を解決するには、新しいバージョンをインストールします。
- felix.scr バンドルのバージョン 2.0.8 をダウンロードしてください。
- AEM を停止します。
- AEM インスタンスの crx-quickstart/install フォルダーにファイルを配置します。
- AEM を起動します。