2012-07-16 30 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()メソッドをチェックすることもできます。実装の詳細を知らなくても、そのクラスにアクセスすることはできません。

関連する問題