2012-07-16 75 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 2012-07-16 16:52:16

+0

是的我試圖檢測,因爲我可能在異步事件中或在預定的事件中...查看https://issues.jboss.org/browse/SEAMPERSIST-78 – 2012-07-17 08:15:58

+0

在這種情況下,可能是最好的解決方案 – LightGuard 2012-07-17 16:58:20

回答

3

是的,我們在CDI 1.0中唯一的選擇是捕獲ContextNotActiveException。這實際上最終成爲應用程序範圍的一個大問題,其範圍實現不適用於注入。例如。您不能僅僅使用@Inject RequestScopedContextImpl rq;並檢查.isActive()方法,因爲如果不知道實現細節,我們就無法訪問該類。

相關問題