Spring Web Flow 1.0 RC2 釋出

釋出 | Keith Donald | 2006 年 6 月 10 日 | ...


 

尊敬的 Spring 社群:

我們很高興地宣佈 Spring Web Flow (SWF) 1.0 RC2(釋出候選版 2)已釋出。  Spring Web Flow (SWF) 1.0 RC2(釋出候選版 2)已釋出。  下載 | 文件 | 更新日誌

此版本包含錯誤修復和輕微改進。   1.0 RC2 的新特性包括...

新特性

支援以可配置的方式傳遞從呼叫環境輸入給新啟動的流程執行(flow executions)。  預設情況下,所有請求引數都作為輸入公開。  然後,流程可以使用其輸入對映器(input mapper)將此輸入對映到其自己的本地作用域(local scope)中。  該對映器定義了流程的輸入契約,無論流程是作為頂級流程還是作為子流程啟動,該契約都是一致的。

請參考以下請求 URL 作為示例:

https://:8080/flights/search-flow?flightNumber=12345

預設情況下,當訪問此 URL 時,後端的 FlowExecutor 會將 "flightNumber" 請求引數放入一個“輸入對映”(input map)中。  然後,該輸入對映會傳遞給 "search-flow" 的一個新的執行。

在 search-flow 定義中:

<flow start-state="executeSearch">
    <input-mapper>
        <mapping source="flightNumber" target="flowScope.flightNumber"/>
    </input-mapper>

    ...
</flow>
上面的 <input-mapper> 定義了流程的輸入契約,宣告此流程支援名為 "flightNumber" 的輸入屬性。  當在啟動時提供 flightNumber 時,它將被對映到 "flowScope" 中,名稱為 "flightNumber"。  該對映器還能夠在對映操作期間執行型別轉換。

要自定義流程執行輸入對映的填充方式,例如從請求路徑或其他外部源中提取屬性,請配置 "FlowExecutorImpl.inputMapper" 屬性。

支援在 JSR168 Portlet 環境中進行流程執行和外部重定向。  結合基於延續的倉庫(continuation-based repository),這允許在 Portlet 環境中使用瀏覽器導航按鈕(後退、重新整理)。  此外,在 Portlet 環境中,我們現在公開了一個 "globalSessionMap" 屬性,用於訪問 Portlet Session APPLICATION_SCOPE 中的屬性。

一個新的倉庫工廠,名為 "SingleKeyFlowExecutionRepositoryFactory"。 此實現為每個持久化的流程執行生成一個唯一的識別符號。  它有助於實現 1.0 EA 的“會話重定向”(conversation redirect)語義——即每次 POST 後,透過 REDIRECT-GET 請求一個嵌入了常量流程執行鍵的穩定的“流程執行 URL”。  請參閱 NumberGuess 示例以獲取說明。

引入了一個獨立的“會話”(conversation)子系統,提供的流程執行倉庫實現會將邏輯會話的劃分委託給它,以管理流程執行狀態。  該會話子系統與 Spring Web
Flow 的其餘部分完全解耦,可在 SWF 之外使用,並且隨著時間的推移可能會演變為其自己的獨立模組。 
中央服務介面包括:

public interface ConversationService {
    public Conversation beginConversation(ConversationParameters parameters);
    public Conversation getConversation(ConversationId id);
    public ConversationId parseConversationId(String encodedId);
}


public interface Conversation {
    public ConversationId getId();
    public void lock();
    public void end();
    public Object getAttribute(String name);
    public void setAttribute(String name, Object value);
    public void removeAttribute(String name);
    public void unlock();
}
當啟動一個新的流程執行並且需要在單個請求之外持久化時,倉庫會呼叫 "beginConversation" 來啟動一個新的邏輯
會話(conversation),並在會話作用域(conversation scope)中放置屬性來跟蹤執行狀態。  同樣,當流程執行結束時,對應的會話也會結束,並且清理所有分配的狀態。

未來,我們期望在這個系統中提供強大的功能,包括透過 JMX 進行會話監控和管理,以及會話歷史記錄和統計資訊。  我們也期望證明它適用於 Spring Web Flow 之外的其他環境。  特別感謝 Juergen Hoeller 和 Ben Hale 在設計此可移植會話服務抽象方面提供的幫助。


可能影響使用者的更改

在邁向 1.0 正式版的過程中,1.0 RC2 中有一些可能影響使用者的更改。  以下部分對此進行了說明:

在 spring-webflow-dtd 中,為了與其他屬性和元素名稱保持一致,我們將 '<action/>' 元素的屬性 'resultName' 和 'resultScope' 分別重新命名為 'result-name' 和 'result-scope'

為簡化起見,移除了 FormAction 的屬性 "bindOnSetupForm" 和 "validateOnBinding"。  經驗表明這些屬性很少使用,並且是新使用者的困惑來源。  作為更好的替代方案,要在進入檢視狀態(view state)之前執行資料繫結操作,只需從您的流程定義中呼叫 "bind" 操作方法即可。  要計算是否應在 bindAndValidate 嘗試中進行驗證,請覆蓋單個 "validationEnabled(RequestContext)" 鉤子。

FormAction 的 "exposeFormObject" 操作方法已被移除。  只需使用首選的 "setupForm" 即可。

FlowExecutionRepository 和 FlowExecutor SPI 介面已簡化。  現在,更多的邏輯封裝在 FlowExecutionRepository 後面,包括生成的 FlowExecutionKeys 的結構和格式。  此外,FlowExecutionRepository 現在只嚴格負責管理持久化的流程執行(persistent flow executions),別無其他。  “會話”(conversation)的附加概念不再為 SWF 核心所知。  這意味著幾點:

  • 整體倉庫介面更簡單,使得建立具有自定義 FlowExecutionKeys 的自定義 FlowExecutionRepositories 更加容易。
  • SWF 核心詞彙更清晰:流程執行器(flow executors)呼叫流程執行(flow executions)來執行流程(flows)。  在一個請求之外保持活動的執行會被持久化到倉庫中。
  • 預設的倉庫實現選擇委託給一個獨立的“會話子系統”(conversation subsystem)來跟蹤由執行系統驅動的會話狀態,但對該系統的依賴是完全封裝且可選的。

FlowExecutor 介面,作為 SWF 的入口點,對呼叫者來說也得到了簡化。  它現在封裝了對複雜內部型別的瞭解,例如
EventIds 和 FlowExecutionKeys,因此總體上更容易使用。

同樣地,移除了對顯式 "conversationRedirect" 的支援。  這意味著移除了 "conversationRedirect:"
'view' 字首和 "CONVERSATION" RedirectType。  要在 1.0 RC2 中實現相同的邏輯重定向語義,只需配置一個 FlowExecutor,將其 redirectOnPause 型別設定為 FLOW_EXECUTION,並將 repositoryFactory 設定為
SingleKeyFlowExecutionRepositoryFactory。
--

Spring Web Flow 1.0 RC2 進一步完善了參考手冊,提供了 50 頁關於 SWF 使用的內容。  手冊提供 HTML 和 PDF 兩種線上格式。

開始使用 Spring Web Flow 的最佳方法之一是檢視和演練示例應用程式。  我們建議從一開始就檢視所有示例,並根據需要補充參考手冊材料。1.0 RC2 版本附帶了十個示例應用程式,每個都展示了一組不同的產品功能。  這些示例包括:

1. Phonebook - 最初的示例,展示了大部分功能(包括子流程)
2. Sellitem - 展示了一個具有條件轉換、流程執行重定向、會話作用域和延續的嚮導(wizard)
3. Flowlauncher - 展示了啟動和恢復流程的所有可能方式
4. Itemlist - 展示了 REST 風格的 URL 和內聯流程(inline flows)
5. Shippingrate - 展示了 Spring Web Flow 與 Ajax 技術結合使用
(感謝 Steven Devijver)
6. NumberGuess - 展示了有狀態 bean 和“單鍵”流程
執行重定向。
7. Birthdate - 展示了與 Struts 的整合
8. Fileupload - 展示了多部分檔案上傳
9. Phonebook-Portlet - 在 Portlet 環境中的 phonebook 示例
(注意流程定義並未改變)
10. Sellitem-JSF - 在 JSF 環境中的 sellitem 示例

要一步構建示例應用程式進行部署,只需解壓釋出歸檔檔案,進入 projects/spring-webflow/build-spring-webflow 目錄並執行 "ant dist" 目標即可。  有關釋出歸檔內容和示例的更多資訊,請分別參閱 release readme.txt 和
projects/spring-webflow/spring-webflow-samples/readme.txt。
所有示例專案都是 Spring IDE 專案,可以直接匯入 Eclipse。

感謝所有支援此版本的社群成員。  目前,我們預計 SWF 的下一個版本將是 1.0 正式版,目標釋出時間在六月下旬
左右。  如果有必要,我們仍有可能釋出另一個 1.0 釋出候選版。  請務必關注 SWF 主頁和
論壇以獲取更新。

盡情使用吧!

Spring Web Flow 團隊

獲取 Spring 新聞通訊

訂閱 Spring 新聞通訊以保持聯絡

訂閱

領先一步

VMware 提供培訓和認證,助您加速前進。

瞭解更多

獲取支援

Tanzu Spring 在一份簡單的訂閱中提供對 OpenJDK™、Spring 和 Apache Tomcat® 的支援及二進位制檔案。

瞭解更多

即將舉行的活動

檢視 Spring 社群中所有即將舉行的活動。

檢視全部