如何在StatelessBean中使用ConversationScoped EntityManager

时间:2013-05-21 07:37:36

标签: java cdi ejb-3.1 seam3

我们将EntityManager注入Bean(位于服务层内),如下所示:

@Inject

EntityManager entityManager

我们在ManagedBean(位于视图层内)中使用这些服务。一切正常。

当我们在Stateless WebService中注入这些服务时会出现问题。使用与上述代码相同的方式在无状态WebService中注入EntityManager。由于我的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 Layer和WebServices Layer中使用相同的服务?

1 个答案:

答案 0 :(得分:2)

Web服务没有可用的会话范围,它在SO上已经有很多内容(现在不记得链接)。创建自己的范围,无论如何都可以使用,或者向下移动到Request Scoped EM。