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

Access session bean member variable from EJB asynchronous method

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

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

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

我正在尝试完成一项很长的 运行 任务,以免阻止用户点击按钮,但仍会使用作业结果更新会话模型,以便用户可以看到"job viewer" 类型界面中的结果。

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

只需将回调传递给 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;
}