【问题标题】:AroundInvoke Interceptor on a @Timeout Annotated Method is Not Working@Timeout 注释方法上的 AroundInvoke 拦截器不起作用
【发布时间】:2009-08-11 08:10:15
【问题描述】:

应用服务器: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 注释)

谢谢, 棒

【问题讨论】:

    标签: java jboss aop


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      您可以在此处查看如何使用它,在“拦截超时事件”部分下 http://docs.oracle.com/javaee/6/tutorial/doc/gkedm.html#gkedu

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多