與交易類型的工作,我有以下例子:在EJB
public class MyEJBService implements javax.ejb.SessionBean {
public void modifyAllItems() {
doSomething...
for(...)
{
modifyItem(item);
}
}
public void modifyItem(Item item) {
doSomething...
}
}
方法1 = modifyAllItems 方法2 = modifyItem
方法1調用方法2數次。我想在method1上禁用事務,但在method2上啓用事務。 method2的每次調用都應該在不同的事務中(如果在修改項目時發生錯誤,某些項目可能已被修改,而其他項目則保持不變)。我爲method1()定義了一個EJB事務類型 - 從不爲另一個method2() - 需要新的。問題在於,當我調用method2()時,EJB並沒有創建任何事務,因爲當method2()內發生錯誤時,它不會回滾(如果method2內的數據庫發生了某些更改,但它會拋出在method2完成之前的一個異常數據庫沒有返回到以前的狀態 - 回滾)。預期這種行爲?我有點困惑。非常感謝你。
謝謝!現在設想我從這個EJB對象的外部調用modifyAllItems(),並且modifyAllItems()和modifyItem()都使用默認的EJB事務類型Required。客戶端沒有運行任何事務,因此當調用modifyAllItems()時將啓動新的事務。爲什麼在從modifyAllItems()中調用modifyItem()時,EJB決定使用相同的事務?我的意思是,如果在同一個EJB對象內的另一個服務中調用服務,EJB事務類型配置是否很重要? –
不,它僅適用於從外部調用 – Gab