[英]Rerunning failed Container-Managed transactions in Java EE
我在使用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中是非法的。
我並不是要尋找一個優雅的解決方案-正如我所說的,這是舊的,我只需要將其分類的東西,直到幾個月后整個東西都被替換!
干杯。
嘗試注釋retrieveItem
與@TransactionAttribute(REQUIRES_NEW)
它會接着在一個新的事務執行。
注意:
所以我不知道它是否適合您的情況。 但這是我知道的唯一操作,如果原始事務已失效,則成功進行操作。
不幸的是,我能找到的唯一方法是解決事務的原因-所以現在我在retrieveItem()
的開始處執行em.flush()
retrieveItem()
。 等不及要替換此應用了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.