我们将 EntityManager 注入(inject) Bean(位于服务层内),如下所示:
@Inject
EntityManager entityManager
我们在 ManagedBean 中使用这些服务(位于 View 层内部)。一切正常。
当我们将这些服务注入(inject)到 Stateless WebService 中时,就会出现问题。使用与上述代码相同的方式将 EntityManager 注入(inject)到 Stateless WebService 中。由于我的entityManager是ConversationScoped,我们收到以下错误:
org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.enterprise.context.ConversationScoped
at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:598) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:71) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:104) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
我们如何解决这个问题?我们如何在 View 层和 Web 服务层中使用相同的服务?
最佳答案
Web 服务没有可用的对话范围,SO 上已经对此进行了相当多的介绍(现在不记得链接)。要么创建自己的作用域,无论如何都可以工作,或者向下移动到请求作用域的 EM。
关于java - 如何在 StatelessBean 中使用 ConversationScoped EntityManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16664581/