2012-07-16 43 views
5

Me gustaría saber si el contexto RequestScoped está actualmente activo en un método o no.¿Hay alguna forma de saber si un estado está activo sin capturar ContextNotActiveException?

Por el momento, esto es lo que hago:

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

Creo que es un poco pesado para coger un ContextNotActiveException sólo para saber si un alcance está activo o no.

¿Tiene alguna forma mejor de conocer el estado (activo o no) de un contexto en CDI?

+0

RequestScoped casi siempre debe estar activo, a menos que esté haciendo algo a través de un evento asíncrono. ¿Que estás tratando de hacer? – LightGuard

+0

Sí, estoy tratando de detectarlo porque potencialmente estoy en un evento asíncrono o en uno programado ... vea https://issues.jboss.org/browse/SEAMPERSIST-78 –

+0

En ese caso, lo que tiene es probablemente la mejor solución – LightGuard

Respuesta

3

Sí, la única opción que tenemos en CDI 1.0 es detectar ContextNotActiveException. Esto realmente termina siendo un gran problema para las aplicaciones con ámbito, donde la implementación del alcance no está disponible para inyección. P.ej. No puede simplemente @Inject RequestScopedContextImpl rq; y verificar el método .isActive(), porque no tenemos acceso a esa clase sin conocer los detalles de la implementación.

Cuestiones relacionadas