2012-08-30 2 views
4

에서 작동하지 않습니다 나는 다음과 같은 상황했습니다 :EJB @Asynchronous는 같은 클래스

enter image description here

내가 병렬 10 번 실행 된 "methodB"소원을. 그러나 "methodB"가 다른 빈에서 호출 될 때만 발생합니다.

같은 클래스의 다른 메서드에서 메서드를 호출 할 때 주석이 "@Asynchronous"로 작동하지 않는 이유는 무엇입니까?

감사합니다.

+2

코드 대신 코드 대신 스크린 샷을 사용하는 이유는 무엇입니까? – Betlista

답변

9

클라이언트 프록시를 통해 호출하는 메소드 (예 : @Local 또는 @Remote 인터페이스)에서만 작동합니다. 이 작업은 EJB에서 설명 3.1 사양 (4.5 - 4.5.1)

세션 빈은 비동기 클라이언트 호출 의미

과 메소드가 노출 될 수 ...

@Asynchronous 어노테이션은 비동기적인 비즈니스 메소드를 지정하는 데 사용됩니다.

...

비동기 메소드 호출의 의미는 노 인터페이스, 지역 비즈니스 및 원격 비즈니스 클라이언트 뷰에 적용됩니다.

+0

이것을 알고, 나는 다음과 같이 문제를 해결했다 : @EJB FooLocal bean; bean.methodB(); 고맙습니다. –

+6

귀하의 답변이 완전히 올바르지 않습니다. 인용 한 섹션 **은 원격 또는 로컬 인터페이스를 통과하는 호출을 요구하지 않습니다. 대신 호출은 프록시에 대한 EJB 용어 인 '보기'를 통해 이동해야한다고 말합니다. 동일한 EJB 내에서 메소드를 호출하면 암시적인 'this'매개 변수를 통해 전달됩니다.이 매개 변수는 인터셉트 될 수 없으므로 작동하지 않습니다. –

+1

@ RafaelOrágio 당신은 인터페이스가 필요하지 않습니다. '@EJB Foo bean; bean.methodB();'도 작동합니다. http://www.adam-bien.com/roller/abien/entry/how_to_self_invoke_ejb –