有没有办法知道状态是否处于活动状态而不捕获ContextNotActiveException?

时间:2012-07-16 15:06:50

标签: java-ee-6 cdi jboss-weld

我想知道RequestScoped上下文当前是否在方法中处于活动状态。

目前,我正在做的事情:

@Inject private BeanManager beanManager;

public boolean isRequestScopeActive() {
    try {
        if (beanManager.getContext(RequestScoped.class).isActive()) {
            return true;
        } else {
            return false;
        }
    } catch (final ContextNotActiveException e) {
        return false;
    }
}

我认为仅仅知道范围是否有效就抓住ContextNotActiveException会有点沉重。

您是否有更好的方法来了解CDI中上下文的状态(是否有效)?

1 个答案:

答案 0 :(得分:4)

是的,我们在CDI 1.0中唯一的选择就是捕获ContextNotActiveException。这实际上最终成为应用范围的一个大问题,其中范围实现不可用于注入。例如。您不能只@Inject RequestScopedContextImpl rq;并检查.isActive()方法,因为我们在不知道实施细节的情况下无权访问该类。