领先一步
VMware 提供培训和认证,以加速您的进步。
了解更多我们很高兴地宣布 Spring Statemachine 1.0.0.M3 的第三个里程碑版本发布。
自上一个里程碑版本以来发生了很多事情,并且到达这里花费的时间比我们最初估计的要长一些。既然我们已经到了这里,让我们深入了解一下这个版本的新功能。
除了通常的错误修复之外,以下是主要新功能的列表
#分布式状态机
分布式状态
是一个激动人心的新功能,旨在跨越 JVM 边界扩展状态机概念。让我们思考一下,如果一个状态机在一个 JVM 上运行,如果在一个 JVM 上的状态更改可以自动触发另一个 JVM 上其他参与状态机的状态更改,那不是很好吗?
当然,分布式状态的概念是一个相对复杂的话题,因此在这个里程碑版本中,我们提供此功能作为技术预览,以便有机会尝试和体验它。
我们有一个新的抽象方法,说明任意状态机和 JVM 如何加入到一个分布式状态机集合中,以便从本地状态机外部编排状态更改。此抽象的第一个实现基于 Zookeeper。我们围绕这个主题有两个示例,zookeeper
和 web
示例。
我们在此基础上有一个非常好的示例,您可以从我们的 参考文档 或稍后的这篇博文中了解更多信息。
#持久化状态机
社区请求持久化状态机上下文,以便于理解简单的状态机实例如何用于更新数据库中的表。本质上,此功能也用于分布式状态机
,但也允许用户重置状态机
状态,以便在无需为每个操作构建新的状态机实例的情况下处理任意存储库更新。构建新的状态机实例的问题在于实例化是一个相对繁重的操作,因此能够重置状态机是一个更轻量级的操作。
此外,围绕此功能,我们有一个新的拦截器
功能,允许用户与外部系统通信,例如,如果某些内容无法持久化到外部存储,则停止状态转换逻辑。
#用于构建状态机的构建器模式
虽然使用枚举作为状态和事件类型是一个不错的概念,因为它可以提供可能的组合的编译时保证,但它将您限制在编译时。您将无法构建状态和事件动态构建的状态机。
我们放松了使用枚举
的要求,现在可以使用字符串
作为状态和事件。此要求也是社区提出的众多请求之一,并且可能是最佳功能请求之一。
现在我们能够摆脱枚举,它为实现真正的构建器模式
打开了有趣的机会,该模式允许根据需要构建状态机实例。我们仍然使用注释配置模型中相同的熟悉接口,但不是在编译时设置内容,而是可以根据需要动态构建所有内容。
下面显示了此功能的简化示例,其中未配置转换
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();
}
#示例
在某些 Spring 项目中,我们开始使用示例
的概念。示例的概念来自 Zookeeper 和 Curator,其中基础系统的正确使用可能感觉有点困难。人们有类似的用例,代码复制粘贴成为一种常见的方式,这些常见的用例被转移到示例中。
我们只是将相同的概念引入Spring Statemachine
,通过开始为常见用例添加示例。前两个示例是任务
和持久化
。
您可以在 参考文档 中找到有关这些内容的更多信息。
#示例
示例始终是理解如何使用事物的关键。我们有三个新的示例,zookeeper
和 web
是分布式状态机的示例,persist
是一个示例,展示了如何通过状态机处理任意数据库更改。
Web 示例是一个更复杂的示例,因为它添加了一个 UI 层,该层使用 JS 作为前端,并通过 Websocket 与后端服务器通信以通知状态机状态更改。状态机在Spring Boot
应用程序中运行,UI 会根据状态机的更改自动更新。
我们接下来做什么?目前,我们预计此版本将是最后一个里程碑版本,下一个版本应该是第一个候选版本。我们基本上已经完成了功能开发,在添加新的主要功能方面,我们将进入代码冻结阶段。进入 RC 阶段的主题是修复更多错误,使核心尽可能稳定,尤其使分布式状态功能稳定。
#SpringOne 2GX 2015 即将到来!
尽快在华盛顿特区参加 SpringOne2GX。超级早鸟价将于 6 月 12 日截止!这仅仅是了解所有最新动态并提供直接反馈的最佳机会。