2012-07-16 24 views
5

RequestScoped içeriğinin şu anda bir yöntemde etkin olup olmadığını bilmek istiyorum.Bir durumun ContextNotActiveException yakalanmadan etkin olup olmadığını bilmek için bir yol var mı?

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

Ben bir kapsam etkin olup olmadığını bir ContextNotActiveException sadece bilmek yakalamak için biraz ağır olduğunu düşünüyorum: Şu anda

, burada benim yaptığım.

CDI'daki bir içeriğin durumunu (etkin veya değil) tanımanın daha iyi bir yolu var mı?

+0

İstekSynut async olayı üzerinden bir şey yapmıyorsanız, hemen hemen her zaman etkin olmalıdır. Ne yapmaya çalışıyorsun? – LightGuard

+0

Evet Bunu tespit etmeye çalışıyorum, çünkü potansiyel olarak async olayı veya planlanmış bir programdayım ... Bkz. Https://issues.jboss.org/browse/SEAMPERSIST-78 –

+0

Bu durumda, muhtemelen en iyi çözümdür – LightGuard

cevap

3

Evet, CDI 1.0'da sahip olduğumuz tek seçenek ContextNotActiveException'ı yakalamaktır. Bu aslında kapsam uygulama enjeksiyon için mevcut değil, kapsam içi uygulamalar için büyük bir sorun olmak biter. Örneğin. Sadece @Inject RequestScopedContextImpl rq;'u ve .isActive() yöntemini kontrol edemezsiniz, çünkü uygulama ayrıntılarını bilmeden bu sınıfa erişemeyiz.