我有使用Java EE Bean管理事务的旧系统的情况。当它试图检索刚刚创建的东西时,它会抛出LockAcquisitionException
。在Java EE中重新运行容器管理的事务失败
我最初的想法是这样的:
@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中是非法的。
我不是在寻找一个优雅的修正 - 正如我所说,这是传统的,我只是需要的东西,将它类选,直到整个事情得到在一两个月的更换!
干杯。
谢谢..试过了,但它仍然是不工作...我不能完全肯定它拿起注解,因为我得到一个“交易不活跃”的错误。 :( – 2010-07-01 08:53:24
@Robert威尔逊我的错误,我忽略了你使用BMT的事实。你可以尝试注入'UserTransaction',并用它来启动/停止一个新的,而不是'em.getTransaction'? – ewernli 2010-07-01 12:46:23