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