Как использовать ConversationScoped EntityManager внутри StatelessBean

Мы внедряем EntityManager в Bean (расположенный внутри Service Layer), как показано ниже:

@Inject

EntityManager entityManager

И мы используем эти сервисы внутри ManagedBean (расположенного внутри уровня представления). Все работает нормально.

Проблема возникает, когда мы внедряем эти сервисы внутрь Stateless WebService. EntityManager внедряется в 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 Layer, так и WebServices Layer?


person demdem    schedule 21.05.2013    source источник


Ответы (1)


Для веб-сервисов нет области диалога, она довольно много освещалась в SO (сейчас не помню ссылок). Либо создайте свою собственную область, которая будет работать независимо, либо перейдите к EM с областью запроса.

person LightGuard    schedule 21.05.2013