CDI: перехваченный метод вложенного вызова из неперехваченного метода того же компонента - должен быть вызван? - PullRequest
2 голосов
/ 06 августа 2011

Если у меня есть методы

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, верно?

Я только что обнаружил, что когда бин вызывает свой собственный перехваченный метод, тогдаперехватчик не срабатывает.Я предполагаю, что это потому, что это не прокси-сервер, а сам "реальный экземпляр", поэтому он не проходит через прокси.

Это покрывается спецификацией / документами?Я еще не нашел это.Я спрашиваю, потому что хочу быть уверен, что если я аннотирую все публичные методы, они не начнут вызывать перехватчики несколько раз в будущем.

Ответы [ 2 ]

1 голос
/ 09 августа 2011

2-й "внутренний" вызов больше не осуществляется через контекстную ссылку, поэтому он не перехватывается.

1 голос
/ 07 августа 2011

Не помню, чтобы я видел это в спецификации, но так работают прокси. Но в любом случае это связано с распространением транзакции - должен ли запуск транзакционного метода с существующей запущенной транзакцией начать новую транзакцию или нет.

Получить Постоянство шва 3 модуль (с поддержкой транзакций)

...