在(REST)Web服务中处理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();
}
}
每当您在代码中看到睡眠时,很可能这是不正确的。有没有更好的方法来解决这个问题?
另一种方法是立即将故障发送回客户端,但我宁愿不要让他们为此担心。正确的事情似乎可以完成使请求在服务器上成功执行的所有操作,即使它需要一段时间。
谢谢。
如果收到乐观的锁定异常,则意味着其他某个事务已将更改 提交 给您尝试更新/删除的实体。由于其他事务已提交,因此立即重试可能会成功。
我还会使方法在N次尝试后失败,而不是等待StackOverflowException发生。
我是JPA新手,这里是我的一个查询,我有几个参数作为查询的一部分,任何参数都可以是空值
这里是再现异常的示例项目。 null UPD:使用任务执行器的工作放在另一个分支中。Spring与事务性任务相结合可以解决这个问题。
11.4 基于ItemReaders的driving query 在readers 和writers章节中对数据库分页进行了讨论,很多数据库厂商,比如DB2,如果读表也需要使用的在线应用程序的其他部分,悲观锁策略,可能会导致问题.此外,打开游标在超大数据集可能导致某些供应商的问题.因此,许多项目更喜欢使用一个’Driving Query’的方式读入数据.这种方法是通过遍历keys,而不是整个对象,
假设我想合并一个分离的实体。当我做的时候 entityManager将从数据库加载一个实体(具有与detachedEntity相同的标识符),并将所有数据从detachedEntity复制到新加载的实体。当以后我的事务结束时,这个实体将保存到数据库中。
问题内容: 我正在寻找一个不会重建整个DOM文档来查找文档节点的XPath评估器:实际上,该对象是使用SAX模型来管理大量XML数据(理想情况下为2Gb以上)有利于内存管理,并提供了搜索节点的可能性。 谢谢大家的支持! 对于所有那些说不可能的人:最近,在问了这个问题之后,我找到了一个名为“ saxpath”的项目(http://www.saxpath.org/),但是我找不到任何实施项目。 问题答
在happy path场景中,我有一个spring批处理工作,但现在我将重点放在错误处理上。 但是,在另一个测试中,我想证明一个不可预见的数据库错误会导致作业失败。为此,我创建了一个触发器,该触发器会导致对要插入的表的插入失败。 这似乎起作用了,在writer执行之后,在事务提交期间抛出异常,并且我得到以下日志消息: 这似乎也是预期的行为。问题是,这并不能阻止工作。该步骤退出到SimplyRetr