Quartz の Job に abstract クラスを挟んだら ObjectOptimisticLockingFailureException が2025年02月09日 15時01分29秒

SpringFramework、Hibernate、Quartz を用いているプロジェクトがある。Quartz ジョブに共通した処理を与えたくて abstract クラスを作り現在あるクラスの間に挟んでみた。

問題に遭遇し最終的に以下の形まで削り落とす。

import org.quartz.Job;

public abstract class QuartzJob implements Job {
    @Override
    public void execute(JobExecutionContext jec) throws JobExecutionException {
        executeJob(jec);
    }
    public abstract void executeJob(JobExecutionContext jec) throws JobExecutionException;
}
本当に変哲のないコード。共通前後処理等を入れやすくするために、他の関数を abstract で準備するだけの実装。

しかし、なぜだか ObjectOptimisticLockingFailureException がどこからともなく投げられて、トランザクションが失敗する。スタックトレースも深すぎて、勝手に足切りされてどこから例外が投げられているのかも分からない。