我有一个@SessionScoped bean(CDI),我想从EJB @Asynchronous方法访问和更新。如果我通过@Asynchronous方法的参数传递对bean中的成员变量的引用并使用它,假设传入的对象是线程安全的,那么我应该注意其他任何问题吗? / p>
是否有任何不同需要注意是否使用了@ViewScoped bean?
我能想到的唯一一个是CDI会话Bean超时,但不应该是一个问题,因为@Asynchronous方法仍然会引用该对象。
我尝试传递一个长时间运行的任务,以便不让用户点击按钮但仍然使用作业结果更新会话模型,以便用户可以在&中查看结果#34;求职者"类型界面。
答案 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;
}