Spring Statemachine 1.0.0.M3 发布

工程 | Janne Valkealahti | 2015年8月4日 | ...

我们很高兴宣布 Spring Statemachine 1.0.0.M3 的第三个里程碑版本发布。

自上一个里程碑版本以来发生了很多变化,达到这个版本比我们最初估计的时间稍长。既然已经发布,让我们深入了解一下这个版本有哪些新功能吧。

除了常规的 bug 修复,以下是主要新功能列表:

  • 分布式状态机
  • 持久化状态机上下文
  • 放宽枚举作为状态和事件的使用
  • 状态机的编程式实例化
  • 新的配方模块
  • 新的示例 (persist, zookeeper, web)

#分布式状态机

分布式状态是一个令人兴奋的新特性,旨在跨越 JVM 边界扩展状态机概念。让我们思考一下,如果在单个 JVM 上运行一个状态机,如果在一个 JVM 上的状态变化可以自动触发不同 JVM 上其他参与状态机的状态变化,那岂不是很棒吗?

当然,分布式状态的概念是一个相对复杂的主题,因此在这个里程碑版本中,我们以技术预览的方式提供此功能,让大家有机会进行尝试和体验。

我们确实有了一种新的抽象方式,描述了任意状态机和 JVM 如何加入到分布式状态机集合中,以便从本地状态机外部协调状态变化。这种抽象的第一个实现基于 Zookeeper。我们有两个关于此主题的示例,zookeeperweb 示例。

我们有一个相当不错的基于此的示例,您可以从我们的参考文档中阅读更多相关信息,或者稍后在本篇博客文章中了解。

Web Sample

#持久化状态机

社区要求持久化状态机上下文,以简化如何使用一个简单的状态机实例来更新数据库表等概念。本质上,此功能也用于分布式状态机,但它也允许用户重置状态机的状态,以便处理任意存储库更新,而无需为每个操作构建一个新的状态机实例。构建一个新的状态机实例的问题在于实例化是一个相对耗费资源的操作,因此能够重置状态机是一个更轻量的操作。

此外,围绕此功能,我们有了一个新的拦截器功能,它允许用户与外部系统通信,例如,如果某事物无法持久化到外部存储,则停止状态转换逻辑。

#用于构建状态机的构建者模式

虽然使用枚举作为状态和事件类型是一个不错的概念,因为它提供了编译时可能组合的保证,但它也正好将你限制在编译时。你将无法构建状态和事件是动态构建的状态机。

我们放宽了使用枚举的要求,现在可以使用字符串作为状态和事件。这个要求也是社区提出的多个请求之一,并且可能是最好的功能请求之一。

现在我们可以摆脱枚举,它提供了一个有趣的机会来实现真正的构建者模式,允许按需构建状态机实例。我们仍然使用注解配置模型中熟悉的接口,但不是在编译时设置一切,所有内容都可以在运行时动态构建。

下面显示了简化的示例,其中未配置转换:

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 项目中,我们开始使用配方(recipe)的概念。配方概念在 ZookeeperCurator 中很常见,在这些项目中,正确使用基础系统可能会让人感觉有点困难。人们遇到了相似的使用场景,复制代码成为了一种常见方式,这些常见的使用场景就被转化为了配方。

我们只是将相同的概念引入到Spring Statemachine中,开始为常见使用场景添加配方。最初的两个配方是taskspersist

您可以从参考文档中找到更多关于这些配方的信息。

#示例

示例始终是理解事物如何使用的关键。我们有三个新示例,zookeeperweb 是分布式状态机的示例,persist 是一个示例,展示了如何通过状态机处理任意数据库变更。

Web 示例比实际所需的要稍微复杂一些,因为我们添加了一个 UI 层,它使用 JS 前端并通过 websockets 与后端服务器通信,通知状态机状态变化。状态机运行在Spring Boot应用内部,UI 会根据状态机的变化自动更新。

接下来我们该如何发展?目前我们预计这个版本将是最后一个里程碑版本,下一个版本应该是第一个候选发布版本 (RC)。我们的大部分功能已经完成,并且在添加大型新功能方面,我们将进入代码冻结阶段。进入 RC 阶段的主要任务是修复更多 bug,使核心尽可能稳定,特别是使分布式状态功能稳定。

#SpringOne 2GX 2015 即将到来!

立即预订 在华盛顿特区举办的 SpringOne2GX 的席位。超级早鸟价将于6月12日截止!这是了解最新进展并提供直接反馈的最佳机会。

订阅 Spring 简报

保持与 Spring 简报的联系

订阅

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

Tanzu Spring 通过一个简单的订阅,提供针对 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将到来的活动

查看 Spring 社区中所有即将到来的活动。

查看全部