2012-07-16 9 views
5

Ich würde gerne wissen, ob der RequestScoped Kontext derzeit in einer Methode aktiv ist oder nicht.Gibt es eine Möglichkeit zu wissen, ob ein Status aktiv ist, ohne dass ContextNotActiveException abgefangen wird?

Im Moment ist hier, was ich tue:

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

Ich denke, es ist ein bisschen schwer ist ein ContextNotActiveException nur zu wissen, zu fangen, wenn ein Bereich aktiv ist oder nicht.

Haben Sie eine bessere Möglichkeit, den Status (aktiv oder nicht) eines Kontexts in CDI zu kennen?

+0

RequestScoped sollte eigentlich immer aktiv sein, es sei denn, Sie tun etwas über ein asynchrones Ereignis. Was versuchst du zu machen? – LightGuard

+0

Ja, ich versuche das zu erkennen, weil ich möglicherweise in einem asynchronen Ereignis oder in einem geplanten Ereignis bin ... siehe https://issues.jboss.org/browse/SEAMPERSIST-78 –

+0

In diesem Fall, was Sie haben ist wahrscheinlich die beste Lösung – LightGuard

Antwort

3

Ja, die einzige Option, die wir in CDI 1.0 haben, ist die ContextNotActiveException abzufangen. Dies ist tatsächlich ein großes Problem für Apps im Bereich, wo die Scope-Implementierung für die Injektion nicht verfügbar ist. Z.B. Sie können nicht einfach @Inject RequestScopedContextImpl rq; und überprüfen Sie die .isActive() Methode, weil wir keinen Zugriff auf diese Klasse haben, ohne die Implementierungsdetails zu kennen.

Verwandte Themen