2010-05-12 140 views
1

我有一個要求,我打算運行後臺進程。 一旦用戶登錄到應用程序中,我需要完成兩個過程。 1.驗證用戶並轉到主頁 2.獲取一些數據並將其放入會話中。運行後臺進程

如果我同時做兩個10分鐘去主頁。相反,我希望第二個進程在處理身份驗證時在後臺運行。

我不需要從第二個進程的數據在主頁。我需要一些其他頁面,我可以從會話中訪問。

有人能讓我朝正確的方向嗎?

感謝

+0

我會問,如果在會話中存儲此數據是非常合適的。一般來說,在會話中存儲大型數據結構並不明智,因爲性能方面的原因:http://www.ibm.com/developerworks/websphere/library/bestpractices/store_objects_in_httpsession.html – pkaeding 2010-05-12 14:25:37

+0

我不認爲這是一個多線程問題;我認爲這是一個設計問題。您不需要在會話中投入太多數據,以至於10分鐘內就會陷入停滯狀態。此外,您還可以在加載數據時使用會話10分鐘嗎? – 2010-05-12 15:39:30

回答

1

創建一個類extends Threadimplements Runnable並運行它。您可以通過Sun tutorial瞭解如何操作。在會話範圍的託管bean中引用它,以便可以從其他頁面訪問它。


這就是說,它聽起來好像你拖一些數據庫表完全到Java的內存這將持續10分鐘。我強烈建議不要這樣做。這是非常低效的內存,只要多個用戶同時訪問您的應用程序,它可能會爆炸。添加一些搜索/過濾器/分頁邏輯,並相應地編寫代碼,以便根據當前請求查詢只有感興趣的數據。 Google也不會查詢大量記錄以將其存儲在會話中,並且在當前請求中僅顯示其中的10個記錄。不要讓Java接管數據庫的角色,也不要低估數據庫的權力。正確建模和編制索引時速度非常快。

+0

感謝您的回覆Balusc, 我的要求是當用戶從父級下拉列表中選擇一個值而不提交時,在頁面上填充子菜單。我們的工程師不希望頁面在父菜單上每次更改時都刷新。我首先想到了通過添加一個被引用到託管bean中的映射的隱藏變量來實現這一點。但是現在,這需要至少30個Web服務調用父級下拉菜單中的每個值。所以我打算在應用程序啓動時將這個web服務調用移動並存儲到會話中。但我不希望用戶等待10分鐘才能進入主頁。 – Mahi 2010-05-12 17:51:31

+0

所以我想這是在後臺完成,而用戶仍然可以瀏覽我的網站。 我採用不同的方式來做到這一點,並通過這個(http://www.coderanch.com/t/488860/JSF/java/best-way-do-background-processing),這表明我們不應該使用線程在Web應用程序開發中,這使得它不可管理 – Mahi 2010-05-12 17:51:57

+0

如果它不是用戶特定的數據,只需將其存儲在應用程序範圍的託管bean中,該應用程序範圍的託管bean將在webapp啓動期間加載。 – BalusC 2010-05-12 18:08:07