7

我想知道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 中上下文的状态(活动与否)吗?

4

1 回答 1

5

不,我们在 CDI 1.0 中的唯一选择是捕获 ContextNotActiveException。

您的解决方案应该有效。

这实际上最终成为一个问题,因为范围实现不可用于注入。

例如,您不能只@Inject RequestScopedContextImpl rq;检查rq.isActive()方法,因为我们无法在不知道 CDI 本身的实现细节的情况下访问该类。

于 2012-07-18T14:57:45.340 回答