gpt4 book ai didi

java - 未捕获异常的原因?

转载 作者:搜寻专家 更新时间:2023-11-01 03:41:21 25 4
gpt4 key购买 nike

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

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 block 中的 OptimisticLockExceptionorg.eclipse.persistence.exceptions.OptimisticLockException 类型,就像在我的服务器日志中一样,但我从来没有陷入这个 catch block 。 .

为什么……?

谢谢你的想法。

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++;
}

}

我明白了:

2012-11-26 14:58:03,515 FATAL [com.sim.web.LoginBean] javax.ejb.EJBException: Transaction aborted 1

2012-11-26 14:58:03,515 FATAL [com.sim.web.LoginBean] javax.transaction.RollbackException: Transaction marked for rollback. 2

2012-11-26 14:58:03,515 FATAL [com.sim.web.LoginBean] javax.persistence.OptimisticLockException thrown by Exception block ! 3

2012-11-26 14:58:03,515 FATAL [com.sim.web.LoginBean] org.eclipse.persistence.exceptions.OptimisticLockException thrown by Exception block ! 4

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

我无法使用 catch block RollbackException 异常进行测试,因为 Eclipse 未检测到可以抛出此类异常:Unreachable catch block for RollbackException。此异常永远不会从 try 语句主体中抛出

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

谢谢之前的建议

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com