我使用類似於接縫組件@Transactional註釋:Seam @Transactional註解不起作用?
@Name("myComponent")
@AutoCreate
public class MyComponent
{
public void something() {
...
doWork();
}
...
@Transactional
protected void doWork() {
try {
log.debug("transaction active: " + Transaction.instance().isActive());
} catch (Exception ignore) {}
// some more stuff here that doesn't appear to be inside a transaction
}
}
在「一些更多的東西」一節中,我修改了一些休眠的實體,然後其中有一個異常被拋出的錯誤。我注意到Exception並沒有導致事務回滾(修改後的實體仍然在數據庫中修改),所以我添加了「transaction active」日誌記錄。當此代碼執行時,isActive()返回false。
有什麼我失蹤了嗎?爲什麼交易不活躍?
萬一它很重要,我從另一個使用RESTEasy註釋的組件內部使用Seam組件來觸發我的方法調用。
可能與http://stackoverflow.com/questions/3401821/weld-injection-failing-when-calling-a-method-from-an-super-abstract-class-with-w – Gray
我認爲你是在這裏的東西 –
接受這個,因爲他真的很接近Seam的問題。除非您從一個Seam組件轉到另一個組件,否則不會使用@Transactional註釋。在這種情況下,我們從相同的Seam組件(MyComponent)中調用了Transactional方法。通過將對Transactional方法的調用拉出到另一個組件,TransactionInterceptor現在被觸發並且一切都很好。 –