什麼是Spring Web Flow?web
Spring Web Flow是Spring Framework中的web應用組件,它提供了一種編寫有狀態和基於會話的web應用的簡便手段。Spring Web Flow 使得邏輯流程成爲web應用中的一等公民,它能讓你定義爲自包含模塊,以獨立於應用的其它部分來配置和重用。它不依賴於框架從而可以方便的與可選的web應用框架一同使用,好比Spring MVC、Struts或者JSF等。spring
頁面流轉使用一種領域定義語言(DSL)來配置,這個語言專門開發用來定義和組合頁面流轉。目前的實現方式是XML和Java.編程
Spring Web Flow引入了能知足多種用戶案例和需求的幾種有狀態數據域:request、flash、flow和conversation,這給你開發有狀態web應用提供了很大的靈活性和能力。瀏覽器
這裏是1.0 release中最有趣特性的快速概要:session
在一個地方而不是把邏輯分散在不少地方來定義應用任務的全部控制邏輯,好比一個搜索流程。app
把簡單的流轉組合在一塊兒來建立富控制模塊。框架
使用天然和麪向對象的線性編程模型,而不是冗長的的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 會話數據的大小是否超過了物理堆大小。