如果我有方法CDI:應該調用來自同一個bean的非截獲方法的攔截方法嵌套調用?
public List<IrcEvent> getEventsByCriteria(IrcEventCriteria crit, boolean descending) {
return getEventsByCriteria(crit, 0, Integer.MAX_VALUE, descending);
}
@JpaTransactional
public List<IrcEvent> getEventsByCriteria(IrcEventCriteria crit, int first, int count, boolean descending) {
...
}
那麼第一種方法也必須標註的@JpaTransactional吧?
我剛剛發現,當一個bean調用自己截獲的方法時,攔截器不會被觸發。 我認爲這是因爲它不是所謂的代理,而是「真實實例」本身,因此它不通過代理。
這是涵蓋了規範/文檔?我還沒有找到它。 我問,因爲我想確保如果我註釋所有公共方法,他們將不會在將來多次調用攔截器。
「但這是代理工作的方式」 - 的確如此。這在EJB中是一樣的。如果一個bean調用自己的方法,他們不會通過代理。因此,如果事務屬性爲'not-supported'的方法調用事務屬性爲'required'的自己的方法,則不會啓動TX,這可能會造成一些混淆。 –
Ad Seam 3 - 這個Java SE應用程序,所以我自己實現了簡單的事務傳播。 –