我有一个单例bean,@PostConstruct
方法需要在其中调用@Asynchronous
方法。它不能直接使用this
这样做,因为这会使调用同步。我不能@Inject
本身,因为它是循环的。
答案 0 :(得分:4)
您可以使用这种类型的包装器:
@Singleton
public class SingletonBean {
@Stateless
public static class AsynchronousMethodLauncher{
@EJB
private SingletonBean singletonBean;
public void launch(){
singletonBean.asynchronousMethod();
}
}
@EJB
AsynchronousMethodLauncher launcher;
@Asynchronous
public void asynchronousMethod(){
//Place your code here
}
public void yourMethod(){
launcher.launch();
}
}
答案 1 :(得分:3)
我建议采用自然的Java EE方式:
@Singleton
public class AsyncSingletonBeanBean {
@Resource
private SessionContext sessionContext;
@PostConstruct
public void init() {
AsyncSingletonBeanBean myBean = sessionContext.getBusinessObject(this.getClass());
myBean.foo();
}
@Asynchronous
public Future<String> foo() {
return new AsyncResult<String>("Hello");
}
}