【问题标题】:Is there a way to know if a state is active without catching ContextNotActiveException?有没有办法在不捕获 ContextNotActiveException 的情况下知道状态是否处于活动状态?
【发布时间】:2012-07-16 15:06:49
【问题描述】:

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

【问题讨论】:

  • RequestScoped 应该几乎总是处于活动状态,除非您通过异步事件执行某些操作。你想做什么?
  • 是的,我正在尝试检测这一点,因为我可能处于异步事件或预定事件中......请参阅issues.jboss.org/browse/SEAMPERSIST-78
  • 在这种情况下,你所拥有的可能是最好的解决方案

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


【解决方案1】:

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

您的解决方案应该有效。

这实际上是一个问题,因为作用域实现不可用于注入。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 2011-12-21
    • 2023-03-24
    • 1970-01-01
    • 2016-09-30
    相关资源
    最近更新 更多