【发布时间】:2012-11-12 20:48:37
【问题描述】:
我有一些代码会抛出 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 块中的 OptimisticLockException 是 org.eclipse.persistence.exceptions.OptimisticLockException 类型,就像我的服务器日志中一样,但我从来没有陷入这个 catch 块...
为什么...?
感谢您的想法。
PS:我使用 Maven 和 Glassfish。一开始,我使用的是工件 eclipselink v2.4.1,而服务器端是 2.3.2(请参阅日志),所以我将 Maven 版本更改为 2.3.2,但结果相同。
【问题讨论】:
-
尝试捕获 jpa 异常,我认为 eclipselink 中的一些代码正在捕获 org.eclipse.persistence 异常并将其重新抛出为新 javax.persistence 异常的“原因”。
-
在我的情况下,JPA OptimisticLockException 也被包裹在 RollbackException 中,而 RollbackException 最终被包裹在 EJBException 中
-
您将 JPA 代码包装在需要抛出自己的异常的包装器中。很可能是因为在方法结束时发生了事务处理。您可以尝试调用 em.flush,它应该允许在您的 ejb 中处理乐观锁。
-
很好,我在论坛上看到了这个,但我忘记了。感谢 em.flush() 我的代码更有条理,但对性能有什么影响吗?泰
标签: java exception maven eclipselink