单例Java EE bean如何获​​得对自身的引用?

时间:2013-05-11 23:18:58

标签: java-ee ejb java-ee-6 ejb-3.1 java-ee-7

我有一个单例bean,@PostConstruct方法需要在其中调用@Asynchronous方法。它不能直接使用this这样做,因为这会使调用同步。我不能@Inject本身,因为它是循环的。

2 个答案:

答案 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");
    }
}