2011-05-15 30 views
7

我知道Application-Scope在多個用戶中持續存在,所以很明顯我們應該確保所有ApplicationScoped ManagedBeans都是線程安全的。爲什麼我們應該在JSF中使SessionScoped ManagedBean線程安全?

我也明白我們不需要關心RequestScoped ManagedBean的線程安全性。這是因爲它僅持續一個HTTP請求,並且如果引用了每個請求,那麼它將被新實例化。

但我不確定爲什麼我們應該擔心SessionScoped ManangedBean的線程安全。即使它持續存在多個請求,每個用戶都會得到他/她自己的實例,對吧?

那麼,爲什麼我們需要在SessionScoped ManagedBeand的情況下擔心線程安全性,並且它是否也適用於ViewScoped ManagedBean呢? ViewScope堅持連續兩次請求相同的視圖,對吧?

回答

8

如果您已經擔心在某個範圍內數據的線程安全性,那麼數據很可能屬於更狹窄的範圍(即高級設計中存在缺陷)。如果數據被放在正確的範圍內,那麼完全沒有理由擔心線程安全。我認爲你的豆的設計是正確的,他們沒有在getters中做任何業務邏輯。

將應用程序範圍用於應用程序範圍的數據/常量,例如每個人都相同的下拉列表。將會話範圍用於客戶特定數據,例如登錄用戶和用戶首選項(語言等)。使用視圖範圍實現豐富的支持ajax的動態視圖(基於ajax的驗證,渲染等)。將請求範圍用於簡單和非Ajax表單/演示文稿。

+0

我正在閱讀Oracle的JavaEE6教程,並且在那裏說使用ApplicationScoped和SessionScoped託管的bean時,應該注意線程安全性,我在想什麼?但是,現在很清楚。很好的解釋。謝謝。 – 2011-05-16 02:40:55

相關問題