gpt4 book ai didi

java - JPA:处理 OptimisticLockException 的模式

转载 作者:太空狗 更新时间:2023-10-29 22:36:51 33 4
gpt4 key购买 nike

在 (REST) 网络服务中处理 OLE 的正确模式是什么?这就是我现在正在做的,例如,

protected void doDelete(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

...
...
...

try {
try {
em.getTransaction().begin();
// ... remove the entity
em.getTransaction().commit();
} catch (RollbackException e) {
if (e.getCause() instanceof OptimisticLockException) {
try {
CLog.e("optimistic lock exception, waiting to retry ...");
Thread.sleep(1000);
} catch (InterruptedException ex) {
}
doDelete(request, response);
return;
}
}

// ... write response

} catch (NoResultException e) {
response.sendError(HttpServletResponse.SC_NOT_FOUND, e.getMessage());
return;
} finally {
em.close();
}
}

任何时候您在代码中看到 sleep ,很可能它是不正确的。有更好的方法来处理这个问题吗?

另一种方法是立即将故障发送回客户端,但我不想让他们为此担心。正确的事情似乎是做任何使请求在服务器上成功所需的事情,即使这需要一段时间。

最佳答案

如果您遇到乐观锁定异常,则意味着其他一些事务已提交 对您尝试更新/删除的实体进行更改。由于另一个事务已提交,因此立即重试可能很有可能会成功。

我也会让方法在 N 次尝试后失败,而不是等待 StackOverflowException 发生。

关于java - JPA:处理 OptimisticLockException 的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6541628/

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