Hibernateによってスローされるオプティミスティックロックタイプの例外の例外処理を実装しようとしていますが、奇妙な問題が発生しました。Gormの例外をキャッチできないようです。
たとえば、私のサービスには次のコードがあります。
try {
User user = User.get(1);
Thread.sleep(10000);
user.viewedAt(new Date());
user.save(flush:true);
} catch (OptimisticLockingException ex) {
log.error("Optimistic lock exception");
} catch (StaleObjectStateException ex) {
log.error("Optimistic lock exception");
}
このブロックを2つのスレッドでヒットすると、ブロックが爆発し、例外がGrailsの標準例外ハンドラーに伝播します。報告された例外が。であっても、catchブロックが呼び出されることはありませんStaleObjectStateException
。
コントローラに伝播させてそこでキャッチすれば例外をキャッチできることに気づきましたが、奇妙なサービスで例外処理を実装できないようです。
私は何が欠けていますか?