我也在Spring論壇posted this,但想我會在這裏給出鄉親加入到他們的聲譽了一槍:對會話作用域bean的Spring內置複製支持?
對於在集羣環境中(會話複製/故障切換)運行老式的servlet的應用程序,它是好的做法是「重新設置」會話屬性,如果他們已經被修改:
UserPreferences prefs = (UserPreferences)session.getAttribute("userPreferences");
prefs.setInstantEmail(true);
session.setAttribute("userPreferences", prefs);
這作爲一個標誌,會話狀態已經改變,需要複製的容器。 Here's a reference有關這個主題的一些WLS文檔。
我目前正在修改的應用程序使用Spring來支持POJO +注入開發風格,我不清楚上述做法是如何轉換的。根據Spring文檔,Scoped beans as dependencies,該應用使用<aop:scoped-proxy/>
來注入會話作用域依賴項。但是,如果不直接訪問會話,那麼對該容器標記的依賴性的更改如何進行,以便可以進行復制?是否有內置於代理或Web上下文的內容來支持它?如果沒有,有沒有人有他們如何處理它的例子?
感謝您的任何見解。
澄清基於axtavt's answer:
一個在下面一個POJO +注射方法項目的目標是避免在任的Java EE還是Spring類的直接依賴。我可以想象,Spring可能會暴露一些鉤子,從上下文中檢索bean,這可以提供一個位置來至少跟蹤哪些會話範圍的bean已被使用。另一種可能性可能是在會話範圍的bean上聲明一組方法,這些方法在被調用時可能觸發狀態更改。不熟悉春天,我只能猜測什麼似乎可能不知道技術細節。
後續尋找一些春天代碼之後的問題:
任何人都可以擺脫對ServletRequestAttributes
可能扮演的角色一些輕?它看起來像它的getAttribute
方法跟蹤哪些屬性已被檢索,然後它的updateAccessedSessionAttributes
方法試圖「重新設置」它認爲已經改變的屬性。
感謝您花時間回覆我已根據您的回答添加了一些其他信息。 – kschneid 2010-12-01 22:46:52