用Spring Web Flow和Terracotta搭建Web應用

小兵2147775633發表於2018-08-14

什麼是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 會話資料的大小是否超過了物理堆大小。

相關文章