OptimisticLockException

OptimisticLockException

我有一些抛出 OptimisticLockException (JPA Exception) 的代码:

try{
    account.someFunction();
}catch(OptimisticLockException ole){
    logger.log(Level.DEBUG, "OptimisticLockException with ole !");
}catch(Exception e){
    logger.log(Level.DEBUG, "OptimisticLockException with e !");
}

我总是收到 OptimisticLockException with e ! 。我的服务器日志显示:
Exception [EclipseLink-5006] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.OptimisticLockException
...

我的 catch 块中的 OptimisticLockException 与我的服务器日志中的 org.eclipse.persistence.exceptions.OptimisticLockException 类型类似,但我从未落入此 catch 块中...

为什么...?

谢谢你的想法。

PS:我与 Maven 和 Glassfish 一起工作。一开始,我使用 Artifact eclipselink v2.4.1 而服务器端是 2.3.2(见日志),所以我将 Maven 版本更改为 2.3.2,但结果相同。

最佳答案

显然,我们无法直接捕获 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++;
        }

    }

我得到:



所以首先有一个 org.eclipse.persistence.exceptions.OptimisticLockException,它被包装成 javax.persistence.OptimisticLockException,它被包装成 javax.transaction.RollbackException,而 javax.ejb.EJBException 又被包装成 RollbackException(我正在使用 EJB 和 JTA)。

我无法使用 catch 块 Unreachable catch block for RollbackException. This exception is never thrown from the try statement body 异常进行测试,因为 Eclipse 没有检测到可以抛出的此类异常: Exception

这很丑陋,但我认为我注定要捕获 OptimisticLockException 类型的异常并递归测试它是否包含 ojit_code 类型的异常......

谢谢之前的建议

关于java - 未捕获异常的原因?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13546845/

10-09 08:10