WELD-001303范围类型javax.enterprise.context.SessionScoped没有活动上下文

时间:2013-03-19 10:02:08

标签: java jboss annotations weld

我搜索过每一个地方,但似乎我找不到最好的答案让我解决这个错误,有我的堆栈跟踪,有人可以告诉我发生了什么事,我花了两个约会来找到这个错误。 ...:(

16:55:02,405 SEVERE [org.activiti.engine.impl.jobexecutor.TimerCatchIntermediateEventJobHandler] (Thread-16 (HornetQ-client-global-threads-982087879)) exception during timer execution: org.activiti.engine.ActivitiException: Exception while invoking TaskListener: WELD-001303 No active contexts for scope type javax.enterprise.context.SessionScoped
    at org.activiti.engine.impl.persistence.entity.TaskEntity.fireEvent(TaskEntity.java:529) [activiti-engine-5.11.jar:5.11]
    at ....
Caused by: org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.enterprise.context.SessionScoped
    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 com.metro.wfm.shared.cdi.OverrideUserBean$Proxy$_$$_WeldClientProxy.hasBean(OverrideUserBean$Proxy$_$$_WeldClientProxy.java) [wfm-shared-0.0.2.jar:]
    ... 168 more

3 个答案:

答案 0 :(得分:6)

会话范围的上下文仅在使用service()方法的servlet调用期间或执行servlet过滤器时处于活动状态。不确定如何设置Activiti作业,但它似乎不在会话上下文的活动期间。因此,如果您注入任何需要@SessionScoped的bean,则注入将失败。

解决方案是删除需要@SessionScoped的bean注入,或者修改bean。

答案 1 :(得分:3)

我遇到了同样的问题,基于@Perception发布的答案,似乎如果你正在使用@Singleton(javax.ejb.Singleton)和@Startup(javax.ejb.Startup)注释初始化类,并且还注入@SessionScoped的其他bean或依赖于@SessionScoped的其他bean,它将导致此WELD-001303错误。

答案 2 :(得分:0)

您应该分离前端会话逻辑。假设每个登录用户都有@SessionScoped bean,其中包含Account对象。

登录后,同时将Account对象保存到会话bean中,并将Account对象保存在@ApplicationScoped bean中,但是在HashMap(id,account)中,在后端逻辑中,每个Singleton bean都可以从@访问并获取数据。应用范围的bean。甚至@Schedule方法。