Java @Timeout注释方法上的AroundInvoke侦听器不工作

Java @Timeout注释方法上的AroundInvoke侦听器不工作,java,jboss,aop,Java,Jboss,Aop,应用服务器:JBoss4.2 我有一个我想要截获的方法,它是一个注释为@Timeout并由javax.ejb.TimerService实例调用的方法 方法签名: @Stateless class A @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) @Timeout @Interceptors(AnInterceptor.class) public void doSomet

应用服务器:JBoss4.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

根据规范,AroundInvoke不支持超时方法(仅限业务接口、组件接口和webservice端点)。搜索Google时,EJB3.1中出现了AroundTimeout(第12页和第22页):


同时,您可以通过将对同一bean的引用注入自身来解决这个问题。换句话说,从“A”中注入(或查找)另一个“A”,然后从“doSomething”方法中创建并调用新的“doTimeout”方法。

不要使用@AroundInvoke,尝试使用@AroundTimeout

“EJB计时器服务超时方法的拦截器可以使用@AroundTimeout注释在目标类或拦截器类中的方法上定义。每个类只允许一个@AroundTimeout方法。”

在这里,您可以在“截取超时事件”一节中看到如何使用它