CDI中的异步方法调用

时间:2016-02-02 12:30:23

标签: java cdi

我正在尝试在CDI bean中进行异步方法调用,并获得类似于EJB的@Asynchronous的行为。为此,我正在编写一个注释:

@InterceptorBinding
@Target({ METHOD, TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface SimpleAsync {

}

我正在用代码处理这个注释:

 @AroundInvoke
public Object callAsync(InvocationContext ctx) throws Exception {
    System.out.println("around invoke is called"+ctx.getMethod());
    Runnable runImpl = new Runnable(){
        public void run(){
            try{
               ctx.proceed();
            }
            catch(Exception e){
                e.printStackTrace();
            }
        }
     };

   Thread t = new Thread(runImpl);
   t.start();
   System.out.println("after thread start");
  }

每当我在新线程中调用ctx.proceed时,callAsync方法就会进入一个无限循环,我放置@SimpleAsync注释的实际方法永远不会被执行

是否需要从同一个线程调用ctx.proceed,如果有,是否还有其他方法可以在CDI中实现异步方法调用?

0 个答案:

没有答案