2014-04-24 30 views
0

在我的Web應用程序中,用戶可以調用長時間運行的後端服務(同步請求)。執行時間爲這個服務應該計數的websession超時所以在我的代碼我想:「臨時」爲方法設置會話超時 - setMaxInactiveInterval

handleUserRequest() { 
    HttpSession session = ...getSession(false); 
    int oldMaxInactiveInterval = session.getMaxInactiveInterval(); 
    session.setMaxInactiveInterval(BIG_VALUE); 
    <LONG RUNNING TASK> 
    session.setMaxInactiveInterval(oldMaxInactiveInterval); 
} 

預期這是行不通的。此「方法調用」無法識別臨時會話超時。用戶會話根據oldMaxInactiveInterval值超時。

是否可以做,我想做什麼? ;-)

回答

0

如果您的oldMaxInactiveInterval defaultsession-timeout在web.xml中定義爲例如60.意味着它是60分鐘。當您將設置使用session#setMaxInactiveInterval()這將是永遠排在第二(1個mimnute)

它設置默認的會話超時Web應用程序

<session-config> 
    <session-timeout>60</session-timeout> // 60 minutes 
</session-config> 

調用session.setMaxInactiveInterval()設置超時它被稱爲特定的會話,並覆蓋默認值。

還記得這個差別 - deployment descriptor版本使用分鐘數,而session.setMaxInactiveInterval()使用秒數。

session.setMaxInactiveInterval(300); // Its sets the 5 minutes 
+0

是的,我知道。這不是問題。 ;-) – Ginkgochris

+0

我認爲新會話超時適用於所有*後續*請求,但不適用於設置新會話超時的請求。 :( – Ginkgochris

+0

@Ginkgochris我不知道你的確切場景是什麼,但是你應該知道這個3或更多秒,如果你有很長的進程,那麼你必須爲它進行異步處理,或者使用EJBTimer調度器,Quartz,Servlet 3.0支持異步通知用戶。 –