java-ee-6 - 有没有办法在不捕获 ContextNotActiveException 的情况下知道状态是否处于事件状态?

标签 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 中上下文的状态(事件与否)吗?

最佳答案

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

关于java-ee-6 - 有没有办法在不捕获 ContextNotActiveException 的情况下知道状态是否处于事件状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11507109/

相关文章:

java - 如何在注入(inject)时指定拦截器

java - 将单例 session Bean 注入(inject)无状态 session Bean

java - 如何从 JAX-WS Web 服务中的编程授权检查返回正确的 HTTP 状态代码?

jboss - 将注释从 JBoss Seam 更改为 CDI (JEE6)

java - 使用 jar 中的拦截器绑定(bind)

java - 部署异常 : WELD-001408: Unsatisfied dependencies for type <Class> with qualifiers @Default at injection point [BackedAnnotatedField]

java - CDI 我是否需要具有默认构造函数的对象的生产者?

java - 带有 ExtJS 的 IIS 服务器前端客户端无法向 Java 后端服务器应用程序请求(Store.load)

cdi - Weld CDI 自定义范围中的种子值

java - CDI bean 中注入(inject)的 Conversation 接口(interface)是否需要 getter?