Перехватчик AroundInvoke на аннотированном методе @Timeout не работает - PullRequest
3 голосов
/ 11 августа 2009

Сервер приложений: JBOss 4.2

У меня есть метод, который я хочу перехватить. Это метод, аннотированный @Timeout и вызываемый экземпляром javax.ejb.TimerService.

Подпись метода:

@Stateless
class A 
        @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
    @Timeout
        @Interceptors(AnInterceptor.class)
    public void doSomething(Timer timer)...

Теперь у меня есть класс перехватчика:

public class AnInterceptor {
       @AroundInvoke
       public Object intercept(InvocationContext ic) throws Exception{...
        System.out.prin(...)

Работает с другими методами (которые не аннотируются @Timeout)

Спасибо, Rod

Ответы [ 2 ]

1 голос
/ 05 июля 2013

Вместо использования @ AroundInvoke , попробуйте использовать @ AroundTimeout

"Перехватчики для методов тайм-аута службы таймера EJB могут быть определены с помощью аннотации @AroundTimeout для методов в целевом классе или в классе перехватчика. Допускается только один метод @AroundTimeout на класс."

Здесь вы можете увидеть, как его использовать, в разделе «Перехват событий тайм-аута». http://docs.oracle.com/javaee/6/tutorial/doc/gkedm.html#gkedu

1 голос
/ 11 августа 2009

Согласно спецификации, AroundInvoke не поддерживается для методов тайм-аута (только бизнес-интерфейс, интерфейс компонента и конечная точка веб-службы). При поиске в Google AroundTimeout появляется в EJB 3.1 (страницы 12 и 22):

http://www.ow2.org/xwiki/bin/download/Events2009AnnualConference/Program/JavaEE6-EasyBeans-F-Benoit.pdf

Тем временем вы можете обойти проблему, вставив ссылку на тот же компонент в себя. Другими словами, введите (или ищите) другой «A» из «A», а затем создайте и вызовите новый метод «doTimeout» из метода «doSomething».

...