どうやら、OptimisticLockException (javax.persistence または org.eclipse.persistence.exceptions パッケージのいずれか) は他の例外内にラップされているため、直接キャッチすることはできません。
私はこのコードをテストしました:
try{
account.someFunction();
}catch(OptimisticLockException o1){
logger.log(Level.DEBUG, "org.eclipse.persistence.exceptions.OptimisticLockException thrown !");
}catch(javax.persistence.OptimisticLockException o2){
logger.log(Level.DEBUG, "javax.persistence.OptimisticLockException thorwn !");
}catch(Exception e){
int i=1;
for(Throwable t=(Throwable)e; t!=null; t=t.getCause()){
if(t instanceof OptimisticLockException)
logger.log(Level.DEBUG, "org.eclipse.persistence.exceptions.OptimisticLockException thrown by Exception block ! " + i);
else if(t instanceof javax.persistence.OptimisticLockException)
logger.log(Level.DEBUG, "javax.persistence.OptimisticLockException thrown by Exception block ! " + i);
else
logger.log(Level.DEBUG, t + " " + i);
i++;
}
}
私は得る:
2012-11-26 14:58:03,515 FATAL [com.sim.web.LoginBean] javax.ejb.EJBException: トランザクションが中止されました 1
2012-11-26 14:58:03,515 FATAL [com.sim.web.LoginBean] javax.transaction.RollbackException: ロールバックのマークが付けられたトランザクション。2
2012-11-26 14:58:03,515 FATAL [com.sim.web.LoginBean] javax.persistence.OptimisticLockException が例外ブロックによってスローされました! 3
2012-11-26 14:58:03,515 FATAL [com.sim.web.LoginBean] org.eclipse.persistence.exceptions.OptimisticLockException が例外ブロックによってスローされました! 4
そのため、最初にorg.eclipse.persistence.exceptions.OptimisticLockException
ラップされjavax.persistence.OptimisticLockException
ているjavax.transaction.RollbackException
ものがありますjavax.ejb.EJBException
(私はEJBとJTAを扱っています)。
RollbackException
Eclipseはそのような例外がスローされる可能性があることを検出しないため、catchブロック例外でテストできません: Unreachable catch block for RollbackException. This exception is never thrown from the try statement body
.
Exception
醜いですが、タイプの例外をキャッチし、タイプの例外が含まれているかどうかを再帰的にテストすることを非難されていると思いますOptimisticLockException
...
前回のアドバイスありがとう