Spring Statemachine 1.0.0 版本已發佈

發佈 | Janne Valkealahti | 2015 年 10 月 13 日 | ...

我們很高興宣佈 Spring Statemachine 1.0.0 版本已發佈。首先,我要感謝所有以任何方式為此貢獻的人。構件可從 Maven CentralSpring Repository 取得。

此第一個版本實際包含的內容

  • 易於使用的扁平單層狀態機,適用於簡單的使用案例。
  • 階層式狀態機結構,可簡化複雜的狀態配置。
  • 狀態機區域,可提供更複雜的狀態配置。
  • 觸發器、轉換、守衛和動作的使用。
  • 類型安全配置适配器。
  • Builder 模式,便於在 Spring 應用程式內容之外進行實例化。
  • 常用使用案例的食譜。
  • 基於 Zookeeper 的分散式狀態機。
  • 狀態機事件監聽器。
  • Spring IOC 整合,將 bean 與狀態機關聯。

讓我們快速回顧一下這個專案是如何誕生的,以及它是如何從第一個 github 匯入演變為一個發佈版本。這也提供了一些關於一個新的 spring 專案是如何誕生或可能誕生的背景資訊。這個專案是在今年年初從為 Spring Hadoop 完成的基礎工作啟動的。

對於在達拉斯舉行的 SpringOne 2014,我們正在將一個新的容器分組功能推入 Spring YARN,這在 YARN 容器之上增加了更高層級的功能。現在,Spring XD 的 YARN 運行時 和新的 Spring Cloud Dataflow YARN 部署器 都是基於這個功能。與 Hadoop YARN 資源管理器的通訊本質上是非同步的,所以我試圖在不使用適當的狀態機概念的情況下實現這部分程式碼時遇到了很多麻煩。相信我,我真的非常努力地避免使用適當的狀態,在大約一周後,我不得不面對現實,面對我試圖超越我自己的程式碼的事實。我最終得到了一些勉強可用的東西,但如果我觸摸該程式碼的任何部分,地獄就會降臨。我 rm 了所有東西,並對自己說:「該死的 Janne,我需要一個狀態機。」

在我完成狀態機的基本實現後,我所有的問題都消失了,僅僅是因為狀態機現在控制了所有必須按特定順序發生的邏輯,同時所有與 YARN 資源管理器的通訊仍然是非同步發生的。是的,現在我們已經進入發佈階段,這給了我們一個選項,可以用這個版本替換 Spring YARN 內部狀態機。

我想到一個主意,將這個特定的狀態機程式碼 fork 到它自己的專案中,稍微增強一下,然後啟動一個新的 Spring 專案,看看它是否能引起任何關注,這可能是一個非常好的主意。老實說,我對這項超過 50 年歷史的技術引起如此多的興趣感到有點驚訝。好的和堅實的概念不會消亡,也不需要消亡!

關於我在此過程中從一個想法到一個發佈版本所面臨的挑戰的一些話

  • 沒有巢狀狀態和實現掛鉤(即監聽器)的簡單狀態機很容易實現。
  • 引入深層巢狀狀態會使事情變得有點複雜,特別是當你加入各種其他功能,如進入/退出動作、不同的轉換類型和守衛時。我在具有不同父狀態的子狀態之間的轉換方面遇到了很多麻煩。
  • 添加正交區域會使事情變得更加複雜,僅僅是因為在理論上,狀態機是單執行緒的,但區域是獨立的,可以並行執行。投入了很多工作來基本支援獨立執行區域。
  • 基於 zookeeper(透過 SPI 抽象)的分散式狀態機是一個有點瘋狂的事情。有些人甚至不會嘗試它,而且測試是一個噩夢(不能透過簡單的單元測試來完成)。我使用了 Aphyr's Jepsen 框架,如果說得委婉一點,它將所有東西都拆開了,但最終讓我發現了當你從一個單一 JVM 中走出來並開始使用分散式 JVM 時的所有類型的錯誤。這是一段痛苦但有趣的旅程。

很多人問我們是否有路線圖?簡單的回答是有和沒有。有,因為我們肯定有很多我們想實現的東西,沒有,因為這個專案是由社群的要求驅動的。我開始遵循 UML 狀態機規範 來實現基本功能,但最終大約 50% 的額外功能是由使用者要求的。UML 規範對其某些規範功能的描述非常模糊,並將很多細節留給了實現本身。如果你想要什麼,請說出來並前往 GitHub Issues。想要貢獻,請 PR 一些東西(即使是一個簡單的錯字修復也非常感謝!)。

到目前為止我們所知道的

  • 1.0.x 版本不會添加任何會改變核心概念的新功能,但會繼續添加正常的維護/錯誤修復。我們可能會添加增強現有概念的新功能。
  • 1.1.x 版本將側重於安全性和執行模型等主題。我們正在尋找與 Spring SecuritySpring Session 輕鬆整合的方法,以保護狀態機動作。對於執行,我們正在尋找替換或嘗試使用 Reactor 來代替普通的 Framework 任務排程/執行。
  • 2.x 版本(在可預見的將來)將提高 Spring Framework 5 和 JDK8 的基準。1.x 系列將保持 Spring Framework 4 和 JDK7 的基準。

嘗試一下,感受一下,聞一下,讓我們知道你的想法!

取得 Spring 電子報

透過 Spring 電子報保持聯繫

訂閱

取得領先

VMware 提供培訓和認證,以加速你的進展。

了解更多

取得支援

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

了解更多

即將舉行的活動

查看 Spring 社群中所有即將舉行的活動。

檢視全部