내가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에 주석을 달아야합니다.
빈이 자체 인터셉트 된 메소드를 호출하면 인터셉터가 트리거되지 않는다는 것을 알았습니다. 프록시라고 부르는 것이 아니기 때문에 그것이 "실제 인스턴스"라고 가정합니다. 따라서 프록시를 통과하지 않습니다.
이 문제는 spec/docs에서 다루고 있습니까? 나는 아직 그것을 찾지 못했다. 내가 모든 공개 메소드에 주석을 달면 장래에 여러 번 인터셉터를 호출하지 않을 것이기 때문에 나는 묻는다.
'그렇지만 그건 프록시가 작동하는 방법입니다. 그것은 EJB에서 동일합니다. 빈이 자체 메소드를 호출하면 프록시를 거치지 않습니다. 따라서 트랜잭션 속성이 'not-supported'인 메소드가 트랜잭션 속성이 'required'인 자체 메소드를 호출하면 TX가 시작되지 않아 다소 혼란 스러울 수 있습니다. –
Ad Seam 3 -이 Java SE 앱이므로 간단한 트랜잭션 전파를 직접 구현했습니다. –