Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 互換編


8.10.2 楽観的ロックに失敗した場合の例外処理

明示的に楽観的ロックの実行を確認したい場合は,flush()メソッドを呼び出します。flush()メソッドの呼び出しで楽観的ロック例外が発生した場合,例外処理をキャッチしてリカバリ処理を行うことができます。楽観的ロックに問題がない場合,flush()メソッドによってエンティティのバージョンのチェックおよびVersion列が更新されます。

例外処理の記述例を次に示します。

try{
  em.flush();
} catch (OptimisticLockException e){
  // 例外処理
}

この例に示すように,例外処理の中でOptimisticLockExceptionをラップすることで楽観的ロックの例外をアプリケーション例外として見せることができます。ただし,この場合のトランザクションはロールバックにマークされているので,コミットできないことに注意してください。

なお,CJPAプロバイダでは,例外の原因となったエンティティをOptimisticLockExceptionに格納しません。OptimisticLockExceptionのgetEntity()メソッドは常にnull値を返します。