У меня есть одна проблема, которая заключается в том, как уловить исключение OptimisticLockException в веб-слое (.war-код), когда оно создается слоем EJB.Как поймать OptimisticLockException в веб-слое
Мы используем JEE5, GlassFishV2.1 и JPA (с TopLinks) и управляемые контейнером транзакции. Но когда грязное чтение происходит из-за trnasaction другого одновременного пользователя на том же объекте. Он дает Transaction.RollBackException на военном уровне который фактически вызван OptimisticLockException. Но я не могу поймать OptimisticLockException на стороне войны.
, что применение em.flush на стороне EJB, а затем мы можем поймать и бросить некоторые пользовательские исключения к войне. но я думаю, что em.flush обновит всю базу данных, это дорогостоящая операция или нет?
try{
//some enitity
em.flush()
}
catch(OptimisticLockException ole){
throw ole;
}
Мое мнение не называть em.flush в 90% случаев не будет OptimisticLockException и поймать EJBException в .WAR, а затем повторить его. Есть ли лучший вариант?
попробовать { // некоторый код } улов (EJBException ех) {
if (ex.getCausedByException().getCause().toString().
indexOf("javax.transaction.RollbackException")!= -1){
// do work
}
}
}