从EJB异步方法访问会话bean成员变量

时间:2018-04-15 15:11:01

标签: asynchronous java-ee ejb cdi

我有一个@SessionScoped bean(CDI),我想从EJB @Asynchronous方法访问和更新。如果我通过@Asynchronous方法的参数传递对bean中的成员变量的引用并使用它,假设传入的对象是线程安全的,那么我应该注意其他任何问题吗? / p>

是否有任何不同需要注意是否使用了@ViewScoped bean?

我能想到的唯一一个是CDI会话Bean超时,但不应该是一个问题,因为@Asynchronous方法仍然会引用该对象。

我尝试传递一个长时间运行的任务,以便不让用户点击按钮但仍然使用作业结果更新会话模型,以便用户可以在&中查看结果#34;求职者"类型界面。

1 个答案:

答案 0 :(得分:3)

永远不要从后端类访问前端类。

只需将回调传递给EJB方法。

@Asynchronous
public void asyncDoSomething(SomeInput input, Consumer<SomeResult> callback) {
    SomeResult result = doSomethingWith(input); 
    callback.accept(result);
}

public void yourSessionScopedBeanMethod() {
    yourEjb.asyncDoSomething(input, this::setResult);
}

public void setResult(SomeResult result) {
    this.result = result;
}