我有使用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