Jsf 在异步方法中注入ConversationScope bean

Jsf 在异步方法中注入ConversationScope bean,jsf,asynchronous,ejb,conversation-scope,Jsf,Asynchronous,Ejb,Conversation Scope,我需要从ConversationScope bean调用EJB中带有@Asynchronous注释的方法。在这个方法中,我使用@Inject来注入ConversationScoped bean来创建一些类的实例。 是否可以将异步方法的上下文设置为给定的对话 我希望你能帮助我。不,绝对不能。EJB不按照定义在web容器中运行,而是在EJB容器中运行。本质上,在EJB类中包含任何与web相关的工件/依赖项(包括javax.faces.*classes)是一个红色警报。您不应该从业务层(EJB/EAR

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


我希望你能帮助我。

不,绝对不能。EJB不按照定义在web容器中运行,而是在EJB容器中运行。本质上,在EJB类中包含任何与web相关的工件/依赖项(包括
javax.faces.*
classes)是一个红色警报。您不应该从业务层(EJB/EAR)的客户机层(WAR)注入/访问任何类。此外,会话范围的bean绑定到HTTP请求参数,而这些信息在EJB容器中不可用

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

另见:

感谢您的详细回答。遗憾的是,这个项目太复杂了,无法改变这些基本的实现。确实存在使用ConversationScope注释的EJB类。因此,目前还没有解决这个问题的办法。我们应该首先考虑删除ConversationScope。该对话由CDI管理,但当我在EJB bean中调用synchronous时会丢失。如果您打算将有状态EJB实例绑定到特定的HTTP对话,那么您应该使用
@stateful
bean并将其注入
@ConversationScope
bean。另一个值得阅读的食物: