Jpa 如何在JAX-RS中捕获OptimisticLockException并重试?
我有一些JAX-RS资源,它们调用injectJpa 如何在JAX-RS中捕获OptimisticLockException并重试?,jpa,ejb,Jpa,Ejb,我有一些JAX-RS资源,它们调用inject@EJB的方法 这些方法可以抛出乐观锁超时 重试时应捕获哪种类型的异常 javax.persistence.OptimisticLockException? javax.ejb.EJBException? class MyResource { @GET public Response doSomething() { for (int i = 0; i < 3; i++) {
@EJB
的方法
这些方法可以抛出乐观锁超时
重试时应捕获哪种类型的异常
javax.persistence.OptimisticLockException?
javax.ejb.EJBException?
class MyResource {
@GET
public Response doSomething() {
for (int i = 0; i < 3; i++) {
try {
myEJB.doSomething();
break;
} catch (????) {
// I just want to know the exact type of Exception
// for lock wait timeout
}
}
}
@EJB
private MyEJB myEJB;
}
锁定等待超时
,这是一种悲观锁定
。将支持的锁定模式设置为:
LockTimeoutException
在
悲观_读取
锁定,另一个EntityManager持有悲观_写入
锁定李>
悲观主义_写入
锁定,另一个EntityManager持有悲观主义_写入
锁定或悲观主义_读取
锁定persistence.xml
中的javax.persistence.lock.timeout
配置超时毫秒数
<properties>
<property name="javax.persistence.lock.timeout" value="1000"/>
</properties>
更多参考
我不确定您是否需要捕获
OptimisticLockException
。但是,如果您的实体使用了@Version
注释,您肯定会得到OptimisticLockException
。您确定它是乐观锁定超时
还是锁定超时
?你能发布原因堆栈跟踪吗?…实际上没有。一堆堆栈跟踪告诉超过了锁等待超时;尝试重新启动事务
<properties>
<property name="javax.persistence.lock.timeout" value="1000"/>
</properties>