2011-01-10 98 views
2

我正在開發一個JSF 1.2項目,它的頁面上有AJAX功能(使用RichFaces)。我們應該關注JSF託管bean的線程安全嗎?

我的bean建立了一個要編輯的對象列表,然後有支持編輯的方法,而這個bean是會話範圍的。我將使用a4j:隊列,以便一次只能發生一次AJAX呼叫。

我很好奇在託管bean中使用同步(鎖定對象,還是從java.util.concurrent集合)。實現同步/線程安全所需的額外工作是否真的需要?我正在使用的站點有許多用戶,需要可靠,但它擁有大量的託管bean,我很好奇我應該如何關心託管bean的線程安全。

請問爲支持線程安全而採取額外的步驟來支持bean?

在此先感謝。

回答

1

a4j:當AJAX調用正在進行時,隊列不會阻止用戶重新加載頁面/單擊另一個鏈接。

是的,我們可以相信用戶不要點擊許多不同的鏈接,但是用戶不會觸發請求,例如a4j:poll?

請注意,用其線程安全等效替換所有集合可能不足以使您的線程安全應用程序

也就是說,根據應用程序需要滿足的可靠程度,這個問題可能會或可能不值得您的關注。

+0

由於這個事實,我在應用程序中發現了一個錯誤。從ajax和submit或其他功能對支持bean的調用是同步的,因此它們可能會產生併發問題 – 2016-04-13 17:03:30

1

您需要記住範圍。

請求範圍 - 線程安全的,會話範圍 - 不是線程安全

如果您需要能夠打開多個瀏覽器窗口或標籤,那麼你可以使用像一個Seam對話從編輯同一個對象,以保護從兩個窗口/選項卡。

0

如果是SessionScope d您必須注意使用一些線程安全機制。如果它是RequestScope d或ViewScope'd,那麼在方法之間共享類變量是安全的。