我正在尝试在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中实现异步方法调用?