我做了一個jsf應用程序。此應用程序有一個包含開始,停止按鈕的菜單。當按下開始按鈕時,應用程序開始從網站獲取數據並更新其數據庫。但是,這個過程需要很長時間才能完成。我希望當我關閉瀏覽器時,它應該繼續更新數據庫。此外,當我再次打開它時,我應該得到先前的狀態。但是,這沒有發生。當我關閉瀏覽器時,應用程序也關閉了。我該怎麼做?當我關閉我的瀏覽器時,Jsf應用程序關閉
謝謝。
我做了一個jsf應用程序。此應用程序有一個包含開始,停止按鈕的菜單。當按下開始按鈕時,應用程序開始從網站獲取數據並更新其數據庫。但是,這個過程需要很長時間才能完成。我希望當我關閉瀏覽器時,它應該繼續更新數據庫。此外,當我再次打開它時,我應該得到先前的狀態。但是,這沒有發生。當我關閉瀏覽器時,應用程序也關閉了。我該怎麼做?當我關閉我的瀏覽器時,Jsf應用程序關閉
謝謝。
就我而言,我不會延長會話壽命。相反,創建一個任務並將執行任務的對象添加到一個@ApplicationScoped
bean中的隊列中,並將數據庫(或任何其他位置)保存在啓動作業的用戶和作業的狀態中。
當用戶註銷(手動註銷或關閉Web瀏覽器)時,由於整個應用程序(不是通過請求或用戶會話)來管理該任務,因此該任務仍將被執行。當用戶再次登錄時,他/她可以向該應用程序隊列詢問該任務的狀態。
你需要(至少):
@ApplicationScoped
託管bean將包含和處理的任務。ExecutorService
或類似技術來實現。注意:不敢自己手動啓動新線程,這隻會導致殺死您的Web應用程序服務器。Map<String, List<Task>>
映射,以便單個用戶此刻可以有超過1個任務。將它保存在數據庫(或類似的)中會更好,以便爲這些不駐留在內存中的任務創建日誌。您甚至可以設計這個功能,以便如果您取消部署Web應用程序或服務器突然關閉,則可以從精力充沛的地方重新開始手頭的任務。
我們能否看到您的支持bean代碼? –
代碼超過1200行,是否有必要? 算法如下: 1.從網上下載文件。 2.打開文件並更新數據庫,直到沒有文件保留。 3.關閉文件,完成! 你在問java代碼還是xhmtl代碼? – Viplime
我想知道你的Bean的範圍是什麼,它管理過程 –