我有一个使用 Java EE Bean Managed Transactions 的遗留系统的情况。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 中是非法的。
我不是在寻找一个优雅的解决方案——正如我所说,这是遗留问题,我只需要对它进行分类的东西,直到整个东西在几个月内被替换!
干杯。