问题标签 [spring-statemachine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
660 浏览

spring-statemachine - 启动状态机时出错

在调用statemachine.start()Iam 时总是得到下面的堆栈跟踪。但它并没有停止我的状态机执行,因为我没有使用任何注释进行状态转换、状态输入等。请帮助我修复这个错误。

0 投票
1 回答
601 浏览

java - 以错误的顺序创建时,Spring 状态机注释 @WithStateMachine 不起作用

我正在使用弹簧状态机,并希望使用@WithStateMachine、@OnTransition 和@OnStateChanged 为转换和状态更改添加功能,以使@EnableStateMachine 的类尽可能简单。我从来没有让它工作,经过一些试验和错误后,我意识到必须在状态机之前创建 @WithStateMachine bean,但这种依赖关系不会自动解决。

我的项目中有趣的部分基本上可以归结为以下几点:

MyComponent 和状态机将在 Listener 之前创建,因为 Spring 将在包 b 之前查看包 a,实际上,Listener 类中的任何方法都不会与状态机关联,并且永远不会调用 anyTransition 方法。

我能想到的唯一两个解决方案是

  • 重命名包
  • 使用 @DependsOn 注释 @EnableStateMachine 类并显式依赖所有 @WithStateMachine 类

在我看来,这两种解决方案都不好。有没有人有更好的方法来解决这个问题?

0 投票
1 回答
1155 浏览

spring - Spring 状态机 timerOnce() 转换中断退出操作

我有以下状态机;

问题是如果timerAction()被触发,动作informPlayers()就会中断。informPlayers()如果当守卫返回 true 时状态转换,则正确调用,bothPlayersConfirmed()因此问题出timerOnce()在转换方法上。堆栈跟踪 :

0 投票
1 回答
326 浏览

spring-statemachine - 可以从外部实体触发弹簧状态机吗

我们有一个项目,SSM 似乎是一个可行的选择。我的问题是是否可以从外部源触发 SSM。该文档讨论了“本地”与“外部”转换,但对我来说,这是在谈论分层状态机;您有多个正交状态“流”,其中一个可以影响另一个。

是否可以通过外部实体触发“动作”?例如。一个消息传递系统,它发送一个引起状态变化的消息?

0 投票
1 回答
1029 浏览

spring-statemachine - 在spring状态机中处理来自入口动作类的代码/配置错误

我正在使用状态机构建器在我的应用程序中构建状态机。该应用程序还具有实现 org.springframework.statemachine.action.Action 的 Action 类。这些动作类用于执行每个阶段的入口动作。如果从这些 Action 类中抛出任何异常,即从 execute(StateContext paramStateContext) 方法,我想在使用错误详细信息更新数据库后捕获该异常并发送一个事件(Terminated) 并将状态机驱动到 End 状态。我尝试通过覆盖 stateMachineError(StateMachine stateMachine, Exception e) 方法来使用状态机侦听器。但不幸的是,这不起作用。任何其他用于捕获异常的弹簧状态机组件,在我使用 try catch 将整个代码包装在 Action 类中之前,并在 catch 块内发送 Terminated 事件,以便状态机导航 End 状态。这是我正在使用的构建器。


我正在使用 1.1.0.RELEASE 版本的 spring-statemachine-core

0 投票
2 回答
698 浏览

spring-statemachine - 显示给定状态下可用的事件?

我正在尝试找到一种根据对象状态呈现 UI 按钮(操作)的方法。有没有办法询问状态机:“显示适用于给定状态的事件?” 配置示例:

0 投票
1 回答
2781 浏览

spring-statemachine - 弹簧状态机根据动作更改为两种可能状态之一

我在为一个非常简单的场景配置我的 SSM 时遇到问题:

在此处输入图像描述

罪魁祸首是触发log_on事件时需要发生的“验证”操作。我重新阅读了 SSM 文档,但不确定这是“fork”、“guard”还是分层配置。

“动作”在这里执行:

我在我的测试中使用“计数器”将流程引导到“失败”(保持登录状态)或“成功”(状态更改为登录状态)。

这是配置:

这是失败的测试(当操作触发 logon_fail 事件时期望“logged_off”):

0 投票
0 回答
1223 浏览

spring-statemachine - 使用不同数据集重新加载和重启状态机的正确方法

我需要同一个 SM 来为同一个数据库表中的各种记录提供服务(不能为每条记录创建 SM)。这是否是用另一条记录中的新状态重新初始化 SM 的合适方法,或者您能建议一个更好的方法吗?

谢谢 !

PS:我知道 1.1.0 中的持久化和恢复接口,但持久化 SMContext 仅适用于字符串状态机,而我使用枚举。

0 投票
1 回答
1638 浏览

java - 如何为库中提供的 Spring 状态机实现实现依赖转换保护?

我在库中提供了一个带有基本程序状态的 Spring 状态机,作为不同实现的基础。由于提供了转换注释,因此使用基本状态机根据当前实现添加自定义转换操作似乎很容易

现在我想对守卫做一些类似的事情,即根据使用基本状态机的实现中最近的使用场景提供一个转换守卫

一个想法是在实现装饰器模式的基本状态机中配置一个默认守卫,即它是一个包装器,实现了包裹在另一个守卫周围的守卫接口。作为默认保护包装,使用了一个简单的保护实现,它总是为评估方法返回 true。

代码片段看起来像......首先是警卫:

现在在状态机配置器中使用 GuardDecorator(仅摘录):

我现在的问题是:

  • 我是否遗漏了文档中的某些内容,是否有内置方法可以做到这一点
  • 任何其他解决方案来获得库中提供的基本状态机的实现依赖保护?
0 投票
1 回答
1043 浏览

spring-statemachine - Spring Statemachine - 从 UML 构建分层状态机

简短:是否可以在 Papyrus 中创建分层(嵌套)状态机 UML 图,然后使用它来构建工作状态机实例?

解释:

没有嵌套状态的简单示例,如文档中所示,工作正常。

我尝试了两种创建嵌套状态的方法:

  1. 在我的主机中创建状态并将另一个子机链接到它(属性-> 子机)
  2. 在单状态机中创建所有内容,使用子状态创建状态

在这两种情况下,创建的 Spring 状态机都不能识别子机状态。

当我使用此代码列出应用程序中的所有状态时:

,它只列出了两种状态,初始化和处理。当我发送事件时,机器从初始化进入处理,而不是[处理,准备]。

我是在做错事,还是在尝试做一些 Spring Statemachine 甚至没有实现的事情?也就是说,是否可以仅从 UML 图创建单级状态机?

编辑:

感谢 Janne Valkealahti 阅读此问题并确保 spring-statemachine 具有此选项。

看来这毕竟是我的错,但我不确定在哪里以及如何(创建/编辑了几个类似的图表但没有成功)。可能它与昨天发生在我的 Fedora 24 上的一些 Papyrus / Eclipse 警告和错误有关。今天,在从头开始创建新图表后,一切都按预期工作。这是新的工作图,状态机列出了所有状态和子状态。