在异步方法中注入 ConversationScoped bean

Inject ConversationScoped beans within an asynchronous method

我需要从 ConversationScoped bean 调用在 EJB 中用 @Asynchronous 注释的方法。在这个方法中,我创建了一些 类 的实例,使用 @Inject 来注入 ConversationScoped bean。 是否可以通过某种方式将异步方法的上下文设置为给定的对话?

希望你能帮助我。

不,绝对不是。 EJB 根据定义不是在 Web 容器中执行 运行,而是在 EJB 容器中执行。本质上,在 EJB class 中包含任何与 Web 相关的 artifact/dependency(包括 javax.faces.* classes)是一个红色警报。您不应该 inject/access 业务层 (EJB/EAR) 中来自客户端层 (WAR) 的任何 class。此外,会话范围的 bean 与 HTTP 请求参数相关联,并且此信息在 EJB 容器中无处可用。

无论您要解决什么问题,并且您 incorrectly 认为这都是正确的解决方案,都必须以不同的方式解决。作为一个有根据的猜测,我认为您只需要让 EJB 触发 CDI 事件或采用回调参数。

另请参阅:

  • JSF Service Layer