CDI-ContextNotActivieException-WebBeans上下文的作用域类型注释@RequestScoped在当前线程中不存在

CDI-ContextNotActivieException-WebBeans上下文的作用域类型注释@RequestScoped在当前线程中不存在,cdi,openwebbeans,Cdi,Openwebbeans,环境:WAS 8.0.0.10 CDI:1.0(实现OpenWebBeans) 用例:服务器通过TimerManager异步执行Java类。我试图将具有请求作用域的CDIBean注入到类中,但是当在注入中调用任何方法时,下面是我得到的堆栈跟踪。如果我在注入中使用Applicationscope而不是RequestScope,代码就可以正常工作 在调查该问题时,我发现对于容器异步初始化的线程,请求和会话上下文将不会处于活动状态。有什么方法可以初始化请求和会话上下文吗 错误: javax.enter

环境:WAS 8.0.0.10 CDI:1.0(实现OpenWebBeans)

用例:服务器通过TimerManager异步执行Java类。我试图将具有请求作用域的CDIBean注入到类中,但是当在注入中调用任何方法时,下面是我得到的堆栈跟踪。如果我在注入中使用Applicationscope而不是RequestScope,代码就可以正常工作

在调查该问题时,我发现对于容器异步初始化的线程,请求和会话上下文将不会处于活动状态。有什么方法可以初始化请求和会话上下文吗

错误:

javax.enterprise.context.ContextNotActiveException: WebBeans context with scope type annotation @RequestScoped does not exist within current thread**
                at org.apache.webbeans.container.BeanManagerImpl.getContext(BeanManagerImpl.java:358)
                at org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.getContextualInstance(NormalScopedBeanInterceptorHandler.java:124)
                at org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.invoke(NormalScopedBeanInterceptorHandler.java:95)
                at com.ford.it.processcontrol.TestJob3_$$_javassist_22.executeJobCB(TestJob3_$$_javassist_22.java)

我假设你已经有了这个,或者类似的东西:

CdiContainer cdiContainer = CdiContainerLoader.getCdiContainer();    
cdiContainer.boot();
ContextControl contextControl = cdiContainer.getContextControl();
然后,您可以访问ContextControl实例。然后,您可以在任何需要的地方启动上下文,只要记住在不再需要时停止它

try{
 //start
 contextControl.startContext(RequestScoped.class);

 // do stuff

}catch(Exception e){}
finally{
 //stop
 contextControl.stopContext(RequestScoped.class);   
}
这在一些异步类中对我有效

希望能有帮助。
问候

有人可以帮我吗?我的代码是在服务器环境中执行的,我不需要启动CDI容器并手动启动它,服务器会处理这个问题。现在,正如我上面提到的,WAS有TimerManager接口(作为commonJ规范的一部分,而不是J2ee规范)用于异步任务。我的要求是在从TimerManager异步启动线程的过程中激活RequestScope。deltaspike ctrl模块的ContextControl看起来很有趣。我尝试过使用它,但似乎我没有合适的罐子,我发现WebBeansContext的noclassdef异常。似乎WebBeansContext是openwebbeans impl xxx的一部分,将它添加到类路径也不能解决我的问题,它只是更改了错误消息。WAS8将其内部openwebbeans作为cdi实现。因此,添加外部jar既没有意义,也无法解决问题。哦,我原以为ContextControl是OpenWebBeans的一部分,但它似乎只属于Deltaspike实现。在我的例子中,我让Quartz运行异步作业,我的作业用ApplicationScoped注释。在尝试使用注入的EntityManager时,我也得到了“ContextNotActivieException”,因此我使用contextControl启动了我提到的RequestScope。startContext()是8.0.0.7,也没有为异步线程激活ApplicationScope,但作为WAS 8.0.0.10修复包的一部分修复了此问题。因此,在我的例子中,应用程序作用域可用于异步线程,但不能用于RequestScope和Session作用域。使contextControl.startContext()工作的JAR是什么?