2012-08-28 48 views
0

想象一個用戶可與一些JSF頁面,這使得使用ViewScoped後臺bean的情況下殺死ViewScoped豆。在導航到應用程序中的不同頁面的情況下,bean的自定義析構函數(即@PreDestroy)將自動調用。在用戶正確關閉標籤頁/窗口的情況下,可以通過AJAX在服務器上調用遠程命令以釋放該bean。如果用戶不正確關閉瀏覽器(即時瀏覽器終止)

然而,在用戶端如果單純電源出現故障時與PC機就立刻打開或瀏覽器被終止不當,使得沒有JS代碼可以被調用。這意味着bean將永遠使用其資源掛在服務器端。 如何解決這個問題?

我想到的解決方案之一是在頁面上放置一個PrimeFaces輪詢元素,該元素將通過遠程命令「ping」託管bean。如果bean發現超時,它將終止釋放所有資源。有沒有更好的解決方案來解決這個問題?謝謝。

+0

它不是對你的問題沒有回答,但是如果你的支持bean是「沉重的」,那麼可以考慮讓EJB池擁有真正的業務邏輯,例如。將bean bean命令傳遞給由EJB(池?)運行的模擬器。 – mabi

回答

0

基本上,ViewScoped豆不會持續超過會話更長。會話超時是可配置的,所以bean不會「永遠掛在服務器端」。

你可以,但是,實現基於輪詢的解決方案通過視圖佔用的內存範圍的Bean。但是,由於突然斷電,甚至意外關閉的瀏覽器很少發生(與「正常」使用情況相比),直接由輪詢導致的資源浪費將比浪費的內存貴得多。

長話短說,這個問題是不存在的,如果:

  • 您使用的客戶端狀態保存
  • 正在使用服務器端的狀態保存和會話超時配置正確
+0

不幸的是,這個問題非常嚴重,因爲每個烘焙bean都會在服務器上啓動非常繁重的操作(運行完整的硬件仿真器)。 – azerIO