gpt4 book ai didi

java - 在 Java EE 中重新运行失败的容器管理事务

转载 作者:太空宇宙 更新时间:2023-11-04 08:51:45 24 4
gpt4 key购买 nike

我遇到了一个使用 Java EE Bean 托管事务的遗留系统的情况。当它尝试检索刚刚创建的内容时,会抛出 LockAcquisitionException

我最初的想法是这样的:

@TransactionAttribute(SUPPORTS)
public Item retrieveItem(int id) {
Item i;
try {
i = em.find(Item.class, id);
} catch (PersistenceException e) {
if (e.getCause() instanceof LockAcquisitionException) {
i = retrieveItem(id);
}
}
return i;
}

但是 - 当进行递归调用时,事务已经终止 - 并且它似乎没有创建新的事务。我尝试了不同的 TransactionAttributes,但似乎没有什么区别。还尝试自己管理事务 (em.getTransaction()),但这在 CMT 中是非法的。

我并不是在寻找一个优雅的修复 - 正如我所说,这是遗留问题,我只需要一些可以对其进行分类的东西,直到整个东西在几个月内被替换!

干杯。

最佳答案

尝试使用 @TransactionAttribute(REQUIRES_NEW) 注释 retrieveItem:然后它将在新事务中执行。

请注意:

  1. 第一个已失效(设置为回滚)并且永远不会完成
  2. 在第二个事务期间,第一个事务中所做的更改无论如何都不可见

所以我不知道它是否适合你的场景。但这是我知道在原始事务已失效的情况下执行操作并成功提交操作的唯一方法。

关于java - 在 Java EE 中重新运行失败的容器管理事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3150897/

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