Java CDI事件传播到具有REST服务的ViewAccessScope/ConversationScope类

Java CDI事件传播到具有REST服务的ViewAccessScope/ConversationScope类,java,rest,jsf-2,jboss,cdi,Java,Rest,Jsf 2,Jboss,Cdi,我有一个数据库层,可以通过JSF和REST访问。这个 JSF的备份bean是ViewAccessScope。REST的服务是请求范围的 当从JSF或REST创建实体时,应该引发一个事件 通知所有可能的客户端(JSF,但也通知其他正在侦听的客户端,例如。 JMS事件)。现在出现了一个问题。当我使用REST创建实体时 接口事件按预期引发 但是现在WELD引发了一个ContextNotActivieException: org.jboss.weld.context.ContextNotActiveEx

我有一个数据库层,可以通过JSF和REST访问。这个 JSF的备份
bean是ViewAccessScope
。REST的
服务是请求范围的

当从JSF或REST创建实体时,应该引发一个事件 通知所有可能的客户端(JSF,但也通知其他正在侦听的客户端,例如。 JMS事件)。现在出现了一个问题。当我使用REST创建实体时 接口事件按预期引发

但是现在
WELD引发了一个ContextNotActivieException:

org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active
contexts for scope type
org.apache.myfaces.extensions.cdi.core.api.scope.conversation.ViewAccessScoped
我在使用ConversationScope注释时也遇到同样的问题。这 使用REST接口时总是会出现问题,即是否 打开一个JSF页面

在下面,您可以找到从以下位置开始的更详细的堆栈跟踪: 事件被触发。似乎Weld认为有这样一个bean,但是 因此,结尾无法获取上下文

Caused by: org.jboss.weld.context.ContextNotActiveException: WELD-001303 No
active contexts for scope type
org.apache.myfaces.extensions.cdi.core.api.scope.conversation.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:79)
[weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at
de.dfki.asr.compass.ejb.project.OpenScenarioBean$Proxy$_$$_WeldClientProxy.handleEntityCreated(OpenScenarioBean$Proxy$_$$_WeldClientProxy.java)
[classes:]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[rt.jar:1.7.0_11]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
[rt.jar:1.7.0_11]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
[rt.jar:1.7.0_11]
    at java.lang.reflect.Method.invoke(Unknown Source) [rt.jar:1.7.0_11]
    at
org.jboss.weld.util.reflection.SecureReflections$13.work(SecureReflections.java:264)
[weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at
org.jboss.weld.util.reflection.SecureReflectionAccess.run(SecureReflectionAccess.java:52)
[weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at
org.jboss.weld.util.reflection.SecureReflectionAccess.runAsInvocation(SecureReflectionAccess.java:137)
[weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at
org.jboss.weld.util.reflection.SecureReflections.invoke(SecureReflections.java:260)
[weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at
org.jboss.weld.introspector.jlr.WeldMethodImpl.invokeOnInstance(WeldMethodImpl.java:170)
[weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at
org.jboss.weld.introspector.ForwardingWeldMethod.invokeOnInstance(ForwardingWeldMethod.java:51)
[weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at
org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:154)
[weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at
org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:241)
[weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at
org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:229)
[weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at
org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:207)
[weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at
org.jboss.weld.manager.BeanManagerImpl.notifyObservers(BeanManagerImpl.java:569)
[weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at
org.jboss.weld.manager.BeanManagerImpl.fireEvent(BeanManagerImpl.java:564)
[weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at org.jboss.weld.event.EventImpl.fire(EventImpl.java:68)
[weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]

我能在这里做什么?CODI实现在这种情况下能工作吗?

No,
ViewAccessScope
及其派生产品都是JSF特有的。JAX-RS无法使用它们。与您正在使用的
ConversationScoped
相同。@JohnAment应该有某种方法使它们一起工作。是吗?您可以实现自己的作用域并将其集成到JAX-RS。但这并不是那么简单。您使用的是JSF实现中的自定义作用域。jAX-RS规范request
@RequestScoped
就是我正在搜索的:)我希望这可以解决这个问题。我将尝试此操作并很快更新:)