2012-07-16 5 views
5

RequestScoped 컨텍스트가 메소드에서 현재 활성화되어 있는지 여부를 알고 싶습니다.ContextNotActiveException을 포착하지 않고 상태가 활성 상태인지 알 수있는 방법이 있습니까?

@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에서 컨텍스트의 상태 (활성 또는 비활성)를 알 수있는 더 나은 방법이 있습니까?

+0

비동기 이벤트를 통해 뭔가를하지 않는 한 RequestScoped는 거의 항상 활성화되어 있어야합니다. 너 뭐하려고? – LightGuard

+0

예 잠재적으로 비동기 이벤트 또는 예정된 이벤트에 있기 때문에이를 감지하려고합니다 ... https://issues.jboss.org/browse/SEAMPERSIST-78 –

+0

을 참조하십시오. 아마 가장 좋은 해결책 일 것이다. – LightGuard

답변

3

그래, CDI 1.0에서 우리가 가질 수있는 유일한 옵션은 ContextNotActiveException을 잡는 것입니다. 스코프 구현이 사출에 적합하지 않은 앱의 경우 실제로 큰 문제가됩니다. 예 : @Inject RequestScopedContextImpl rq;.isActive() 메소드를 확인할 수는 없습니다. 구현 세부 정보를 알지 못해도 해당 클래스에 액세스 할 수 없기 때문입니다.