1. 程式人生 > >用Spring Web Flow和Terracotta搭建Web應用

用Spring Web Flow和Terracotta搭建Web應用

自包含 port 功能 不重啟 分配 進行 流程 scope 通過

什麽是Spring Web Flow?

Spring Web Flow是Spring Framework中的web應用組件,它提供了一種編寫有狀態和基於會話的web應用的簡便手段。Spring Web Flow 使得邏輯流程成為web應用中的一等公民,它能讓你定義為自包含模塊,以獨立於應用的其它部分來配置和重用。它不依賴於框架從而能夠方便的與可選的web應用框架一同使用,比如Spring MVC、Struts或者JSF等。

頁面流轉使用一種領域定義語言(DSL)來配置,這個語言專門開發用來定義和組合頁面流轉。目前的實現方式是XML和Java.

Spring Web Flow引入了能滿足多種用戶案例和需求的幾種有狀態數據域:request、flash、flow和conversation,這給你開發有狀態web應用提供了很大的靈活性和能力。

這裏是1.0 release中最有趣特性的快速概要:

在一個地方而不是把邏輯分散在很多地方來定義應用任務的所有控制邏輯,比如一個搜索流程。

把簡單的流轉組合在一起來創建富控制模塊。

使用自然和面向對象的線性編程模型,而不是冗長的的if/else塊來定義嚴格的用戶導航規則。

但流轉結束或過期時自動清除你在流轉執行中分配的內存。

在使用你選擇的基礎web框架的Servlet環境中Deploy一個可執行的流轉。

改變web框架(比如Struts、Spring MVC、JSF及其它)而不用修改流轉定義。

和環境一起改變而不需要修改你的流轉定義, 比如從JUnit測試到Portlet。

開發時在不重啟容器的情況下不斷完善你的應用導航規則。

自動正確響應瀏覽器按鈕(後退、前進、刷新)而不需要定制編程。

在4個受管理域中存儲任務數據:request、flash、flow、和、conversation等,每個都有自己的獨特語義。

脫離容器單獨測試流轉。能在部署前確保應用控制邏輯能正常運作。

使用Spring IDE 2.0進行可視化編輯你的流轉導航邏輯圖

什麽是Terracotta for Spring?

Terracotta for Spring是基於spring應用的運行時,它為Spring 應用提供了透明的高性能集群支持,對應用代碼和部署及配置流程影響都很小。它通過在應用下面的堆級別進行集群而不是直接集群應用。
這讓開發者能夠開發與無狀態方式不同的單節點有狀態Spring應用。這使得在需要擴展的應用開始設計時不考慮集群。而在應用需要擴展或者要保證搞可用性和故障恢復時,他們只需要在Terracotta 配置文件中定義哪些Spring應用上下文中的beans需要進行集群。Terracotta for Spring 使得應用能夠被自動和透明的集群,還保證在集群間的語義和單節點一樣。

對於Spring Web Flow來說,這實際上更簡單。用戶為了獲得web應用的狀態和持續倉庫的集群能力, 只需要在Terracotta配置文件中把特定的web應用聲明為啟用“session-support”。(詳細內容見下面的章節“聲明式配置”)

從宏觀上看,Terracotta for Spring提供了:

HTTP session狀態的集群。保證Spring Web Flow中的用戶狀態和擴展倉庫或放入HTTP session的其它狀態的高可用性和故障恢復能力。

Spring bean的集群。Springbean的生命周期語義和域在集群間被保存,它們在“邏輯”上相同的ApplicationContext中。目前能被集群的bean類型是singleton和session scoped. 用戶可以聲明式配置哪個application contexts中的哪個bean需要被集群。

透明集群POJO。 不需要修改已有的代碼,甚至不需要源代碼。應用基於很少的聲明式XML 配置文件,在載入期透明的生效。Terracotta for Spring不需要實現Serializable, Externalizable或其它接口的類。能這樣實現的原因它並沒有使用序列化,而只是將實際的差量和已經改變了的數據傳輸給當前需要的節點 (lazily)。

虛擬內存管理。它也提供分布式垃圾收集和虛擬堆功能。比如,由於物理內存在需要時被換入換出,它能在一個4G RAM的機器上運行需要200G堆的Web應用。 這也意味著你不需要關心Spring Web Flow 會話數據的大小是否超過了物理堆大小。

用Spring Web Flow和Terracotta搭建Web應用