2013-03-12 61 views
0

我已經使用this討論中描述的解決方案來實現BackgroundJobManager作爲我的JSF bean類內部的類。我還創建了一個ABCTask(也是一個內部類)作爲將在BackgroundJobManager的預定時間運行的線程。我有一個要求將消息推送到JSF頁面,但是從任務類ABCTask這樣做會導致NPE。同樣的事情對外部bean有效,所以我確信這與這個內部類和bean的上下文有關。如果有人知道這個解決方案,將不勝感激。顯示來自管理bean的內部類的消息

我的內部類的代碼如下:

public class ABCTask implements Runnable { 

    public ABCTask() { 

    } 

    @Override 
    public void run() {   
     setTimeoutOccuredFlag(true); 

     try { 
       if (getActiveControlledAgent().isEventLogRunning()) { 
        getActiveControlledAgent().setEventLogRunning(false); 
       } 
       printTimeoutMessage(); 
     logger_o.fine("Now leaving the ABCTask ..."); 
     } catch (Exception e) { 
      logger_o.error("An error while idling "+e.getMessage()); 
     } 
    } 

} 

的$ printTimeoutMessage()如下:

void printTimeoutMessage() { 
    FacesUtils.addErrorMessage(MESSAGES.getString("common.timeoutOccured")); 
} 
+0

封裝bean的範圍是什麼,你如何試圖訪問內部類和堆棧跟蹤在哪裏? – kolossus 2013-03-12 18:01:54

回答

0

你基本上手動產生線程。 FacesContext僅在提供HTTP請求的線程中可用,該請求與FacesServlet的URL模式相匹配,而不在其他線程中。 FacesContext#getCurrentInstance()將在所有其他線程中返回null

再次想一想,如果沒有客戶端發送HTTP請求,您會如何向HTTP響應發送消息?默認情況下,您不能在沒有請求的情況下向客戶端發送任何內容。

尋找投票/推送技巧。這個具體問題與類層次/範圍完全無關。在未來,如果您確定了什麼是null,那麼您和我們會更有幫助。你似乎根本沒有這樣做。

相關問題