gpt4 book ai didi

CDI - ContextNotActiveException - 当前线程中不存在具有范围类型注释 @RequestScoped 的 WebBeans 上下文

转载 作者:行者123 更新时间:2023-12-05 07:54:57 25 4
gpt4 key购买 nike

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

用例:服务器正在通过 TimerManager 异步执行 Java 类。我正在尝试将具有 Request 范围的 cdi bean 注入(inject)到类中,但是当在注入(inject)中调用任何方法时,下面是我得到的堆栈跟踪。如果我在注入(inject)中使用 Applicationscope 而不是 RequestScope,代码工作正常。

在调查这个问题后,我发现 Request 和 Session 上下文不会为容器异步初始化的线程激活。有什么方法可以初始化请求和 session 上下文吗?

错误:

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 - ContextNotActiveException - 当前线程中不存在具有范围类型注释 @RequestScoped 的 WebBeans 上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30724282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com