0

我有一个单例 bean,该@PostConstruct方法需要在其@Asynchronous内部调用一个方法。它不能直接使用这样做,this因为这会使调用同步。我@Inject不能自己,因为它是圆形的。

4

2 回答 2

5

您可以使用这种类型的包装器:

@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();
    }
}
于 2013-05-12T05:15:32.323 回答
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");
    }
}
于 2013-06-15T22:03:20.540 回答