领先一步
VMware 提供培训和认证,助您加速进步。
了解更多我们很高兴地宣布 Spring Statemachine 1.0.0.M3 的第三个里程碑版本。Spring Statemachine
自上一个里程碑以来发生了很多事情,到达这里比我们最初估计的要花费更多时间。既然我们已经到达了,让我们看看这个版本中有哪些新功能。
除了常规的 bug 修复之外,这里还有一些主要的新功能列表
#分布式状态机
分布式状态是一项令人兴奋的新功能,旨在将状态机概念扩展到 JVM 的边界之外。让我们思考一下,如果一个状态机运行在单个 JVM 上,那么一个 JVM 上的状态更改能够自动触发另一个参与状态机在不同 JVM 上的状态更改,这难道不好吗?
很自然,分布式状态的概念是一个相对复杂的话题,因此在这个里程碑版本中,我们以技术预览的形式提供此功能,以便有机会进行试用和体验。
我们有了一个新的抽象,可以将任意状态机和 JVM 加入到分布式状态机集合中,以便在本地状态机之外协调状态更改。此抽象的第一个实现基于 Zookeeper。我们有两个与此主题相关的示例,分别是 zookeeper 和 web 示例。
我们在此基础上有一个相当不错的示例,您可以在我们的 参考文档 中或稍后的这篇博文中阅读更多相关信息。

#持久化状态机
社区要求持久化状态机上下文,以简化一个简单的状态机实例如何用于更新数据库表等概念。本质上,此功能也用于 分布式状态机,但它也允许用户重置 状态机 的状态,以便在无需为每个操作构建新状态机实例的情况下处理任意存储库更新。构建新状态机实例的问题在于实例化是一项相对繁重gin的操作,因此能够重置状态机是一项更轻量级的操作。
此外,围绕此功能,我们有一个新的 拦截器 功能,它允许用户与外部系统进行通信,并在无法持久化到外部存储时停止状态转换逻辑。
#用于构建状态机的构建器模式
虽然使用枚举作为状态和事件类型是一个不错的概念,因为它提供了编译时对可能组合的保证,但这仅限于编译时。您将无法构建一个状态和事件动态构建的状态机。
我们放宽了使用 枚举 的要求,现在可以使用 字符串 作为状态和事件。这也是社区的多个请求之一,可能是最好的功能请求之一。
既然我们可以摆脱枚举,这为实现真正的 构建器模式 打开了一个有趣的机会,该模式允许按需构建状态机实例。我们仍然使用与注解配置模型相同的熟悉接口,但而不是在编译时进行设置,所有内容都可以按需动态构建。
下面显示了一个简化的示例,其中未配置转换。
StateMachine<String, String> buildMachine() throws Exception {
Builder<String, String> builder = StateMachineBuilder.builder();
builder.configureStates()
.withStates()
.initial("SI")
.end("SF")
.states(new HashSet<String>(Arrays.asList("S1","S2","S3","S4")));
return builder.build();
}
#Recipes
在一些 Spring 项目中,我们开始使用 recipe 的概念。Recipe 概念对于 Zookeeper 和 Curator 来说很熟悉,在这些项目中,正确使用基础系统可能有点困难。人们有类似的用例,代码复制粘贴成为常态,这些常用用例被转移到 recipes 中。
我们将这个相同的概念引入 Spring Statemachine,开始添加常用用例的 recipes。前两个 recipes 是 tasks 和 persist。
您可以在 参考文档 中找到有关这些内容的更多信息。
#示例
示例始终是理解事物如何使用的基础。我们有三个新示例,zookeeper 和 web 是分布式状态机的示例,persist 是一个示例,展示了如何通过状态机处理任意数据库更改。
Web 示例比它实际需要的功能要复杂一些,因为我们添加了一个 UI 层,它使用 JS 前端并通过 websocket 与后端服务器通信以通知状态机状态更改。状态机运行在 Spring Boot 应用程序中,UI 会根据状态机中的更改自动更新。
我们下一步将走向何方?目前,我们预计此版本将是最后一个里程碑版本,下一个版本将是第一个候选版本。我们基本功能齐全,在添加新功能方面,我们将进入代码冻结。进入 RC 阶段的主题是修复更多 bug,使核心尽可能稳定,特别是使分布式状态功能稳定。
#SpringOne 2GX 2015 即将来临!
请尽快在 华盛顿特区的 SpringOne2GX 预订您的席位。超早鸟票价将于 6 月 12 日到期!这是了解最新动态并提供直接反馈的最佳机会。