我想在我的Java EE 7 WebSocket端点中注入一个@RequestScoped
CDI bean。WebSocket端点和CDI注入:没有活动上下文范围RequestScoped
但是我收到错误WELD-001303: No active contexts for scope type javax.enterprise.context.RequestScoped
。
我在做什么错,为什么它是不可能的?
@Named
@RequestScoped
public class Storage {
}
其中我@Inject
在端点这样的:
@ServerEndpoint("/serverpush")
public class ContratoEndpoint {
@Inject
private Storage storage;
}
而且我得到以下堆栈跟踪:
org.jboss.weld.context.ContextNotActiveException: WELD-001303: No active contexts for scope type javax.enterprise.context.RequestScoped
at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:689)
at org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.getIfExists(ContextualInstanceStrategy.java:90)
at org.jboss.weld.bean.ContextualInstanceStrategy$CachingContextualInstanceStrategy.getIfExists(ContextualInstanceStrategy.java:165)
at org.jboss.weld.bean.ContextualInstance.getIfExists(ContextualInstance.java:63)
at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:83)
at org.jboss.weld.bean.proxy.ProxyMethodHandler.getInstance(ProxyMethodHandler.java:125)
@BonanzaOne @Rouliboy虽然这是一个很好的方法,但我会首先尝试一个已经存在于Weld **中的**。如果你设置了对Weld API的依赖关系,那么你可以使用预定义的拦截器绑定“@ ActivateRequestContext”来注释你的方法/类,而这正是你所寻找的。您可以在[Weld Doc](http://docs.jboss.org/weld/reference/latest/en-US/html_single/#_request_context)中阅读更多内容。虽然这最初是为SE环境设计的,但它应该在EE中工作。 – Siliarus
@Siliarus:我不知道这一点,谢谢你的信息! – Rouliboy