Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to know if a state is active without catching ContextNotActiveException?

I would like to know if the RequestScoped context is currently active in a method or not.

At the moment, here is what I do :

@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;
    }
}

I think it's a bit heavy to catch a ContextNotActiveException just to know if a scope is active or not.

Do you have any better way to know the state (active or not) of a context in CDI ?

like image 724
Anthony O. Avatar asked Jul 16 '12 15:07

Anthony O.


1 Answers

No, the only option we have in CDI 1.0 is to catch the ContextNotActiveException.

Your solution should work.

This actually ends up being a problem because scope implementation is not available for injection.

E.g. You can't just @Inject RequestScopedContextImpl rq; and check the rq.isActive() method, because we don't have access to that class without knowing the implementation details of CDI itself.

like image 131
Lincoln Avatar answered Oct 13 '22 09:10

Lincoln