在 J2EE 應(yīng)用程序中存儲服務(wù)器端狀態(tài)的其他方法是使用有狀態(tài)會話 bean,或者在數(shù)據(jù)庫中存儲會話狀態(tài)。雖然有狀態(tài)會話 bean 在會話狀態(tài)治理方面有更大的靈活性,但是在可能的情況下,將會話狀態(tài)存儲在 Web 層仍然有好處。假如業(yè)務(wù)對象是無狀態(tài)的,那么通常可以僅僅添加更多 Web 服務(wù)器來擴(kuò)展應(yīng)用程序,而不用添加更多 Web 服務(wù)器和更多 EJB 容器, 這樣的成本一般要低一些并且輕易完成。使用 HttpSession 存儲會話狀態(tài)的另一個好處是 Servlet API 提供了一種會話失效時通知的輕易方法。在數(shù)據(jù)庫中存儲會話狀態(tài)的成本可能難以承受。
復(fù)制提供了一些可能的好處,包括可用性、容錯和伸縮性。此外,有大量會話復(fù)制的方法可用:方法的選擇取決于應(yīng)用程序群集的規(guī)模、復(fù)制的目標(biāo)和 servlet 容器支持的復(fù)制設(shè)施。復(fù)制有性能成本,包括 CPU 周期(存儲在會話中的序列化對象)、網(wǎng)絡(luò)帶寬(廣播更新),以及基于磁盤的方案中寫入到磁盤或者數(shù)據(jù)庫的成本。
除了決定如何存儲復(fù)制會話數(shù)據(jù),還有什么時候復(fù)制數(shù)據(jù)的問題。最可靠但也最昂貴的方法是每次數(shù)據(jù)改變時復(fù)制它(如每次 servlet 調(diào)用結(jié)束)。不那么昂貴、但是在故障時會有丟失一些數(shù)據(jù)的風(fēng)險的方法是在每超過 N 秒時復(fù)制數(shù)據(jù)。