@Timeout带注释方法的AroundInvoke拦截器不起作用

时间:2009-08-11 08:10:16

标签: java jboss aop

Application Server: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注释)

谢谢, 杆

2 个答案:

答案 0 :(得分:1)

根据规范,超时方法(业务接口,组件接口和仅限Web服务端点)不支持AroundInvoke。搜索Google时,AboutTimeout似乎将出现在EJB 3.1(第12和22页)中:

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

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

答案 1 :(得分:1)

尝试使用 @AroundTimeout

,而不是使用 @AroundInvoke

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

在这里您可以看到如何使用它,在"拦截超时事件" http://docs.oracle.com/javaee/6/tutorial/doc/gkedm.html#gkedu