问题标签 [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.
spring-statemachine - 以编程方式构建状态机
使用新的 Spring Statemachine 项目,我可以在不使用可用于 JavaConfig 和 Spring @Configuration 类的适配器类的情况下以编程方式创建状态机吗?
spring-statemachine - 与主流工作流引擎比较
我想在下一个未来使用 Spring SM,它具有非常简单的工作流、3-4 个状态、基于规则的转换和最大参与者。WF 非常固定,因此将其定义存储在 java config 中是完全可以的。我更喜欢使用SM而不是整个机器附带的WF引擎,但我不知道是否有Actor的概念。这意味着,只有一个特定用户(由登录字符串确定)可以触发状态之间的转换。
另外,我可以并行运行相同的状态机定义吗?是否有实例的概念,例如 WF 术语中的流程实例?
谢谢,米兰
persistence - 在 Spring Statemachine 中持久化和恢复当前状态
我将 Spring Statemachine 引入到现有项目中,希望能够合并和澄清我们的业务逻辑。我们有各种具有互连状态的 JPA 实体,我在将持久状态设置为现有状态机的当前状态时遇到了一些麻烦。
我正在使用 StateMachineFactory 为每个实体实例创建一个新的 StateMachine 实例。我将 StateMachine 的当前状态存储在一个单独的字段中以供 Hibernate 持久保存,并且理想情况下需要将持久字段的值与 StateMachine 同步。我的问题是如何在 Spring Statemachine 中实现这一点。
一种方法可能是定义局部转换以将初始状态移动到持久状态。然后我可以进行条件检查以找到与本地转换相关的事件,这会将源状态移动到目标状态。这对我来说似乎有点乱,我想保持状态机的配置尽可能干净。
我看不到如何通过公共 API 设置 StateMachine 的当前状态而不通过转换,因此我探索的另一种方法是包装 StateMachine 实例以公开以下方法(因为它是方便的默认范围):
然后我可以将以下代码放入MyEntityListener.postLoad:
上述方法似乎工作正常,但我无法想象这是设想的工作方式。肯定有一种更简洁的方法可以实现这一点,或者该项目还不够成熟并且还不包含此功能?
感谢您的任何想法和意见。
spring-statemachine - 运行状态机示例的问题
恭喜spring状态机,我昨天找到了,一直在尝试,特别是在STS中运行的turnstile示例。我发现构建 FSM 非常简单和直观。
因为 spring shell 在 STS 中不能很好地工作,所以我在参考文档中跟踪了从命令行运行示例的说明,
“java -jar spring-statemachine-samples-turnstile-1.0.0.BUILD-SNAPSHOT.jar”
,但运行时出错
“没有主要清单属性,在 spring-statemachine-samples-turnstile-1.0.0.BUILD-SNAPSHOT.jar 中”。
虽然甚至不是使用 gradle 的新手,但我尝试通过将此行添加到 jar 部分的 build.gradle 来解决此问题
“manifest.attributes['Main-Class'] = 'demo.turnstile.Application'”(它不处理我知道的各种子项目)但收到此错误“NoClassDefFoundError: org/springframework/shell/Bootstrap”。
如果可以从 gradle 运行示例,您能否将它们包含在参考文档中?我尝试使用运行样本
gradle 运行,但它没有与 shell 脚本交互。
spring - 状态机中的独立子状态
我需要一些建议。我正在尝试通过 Spring 状态机实现在线订单流程,并尝试在开始工作之前构建状态图。现在说我的订单可以由三个不同的管理员用户 CanceledByAdmin1、CanceledByAdmin2 和 CanceledByAdmin3 取消。我应该使它们成为取消状态的子状态还是创建三个不同的状态?请记住,所有取消的状态都是最终状态并且彼此独立,我不知道除了简化纸图之外,制作子状态是否还有其他作用。任何帮助,将不胜感激。
spring-statemachine - Spring Statemachine:如何获得选择状态的转换?
我因此配置了一个状态机:
然后,在不同的地方,我想从这个配置中获得选择转换。而我可以通过以下方式轻松获得选择状态:
我不知道如何从这些选择状态(上面的“first”、“then”和“last”)获取转换列表。
似乎无法访问此信息。我对吗?
state-machine - Spring Statemachine:不可能对选择状态转换采取行动?
添加到选择伪状态的操作似乎被默默地忽略了。这样做:
当输入 CHOICE_STATE 时,导致 someAction 永远不会被执行。
框架根本不允许将操作添加到 CHOICE_STATE 之外的转换(例如,到上面的 S1 或 S2)。
为了解决这个问题,我们实现了 CHOICE_STATE 之前的状态。然后我们可以像往常一样自由地向这个状态添加动作。我只是想知道这种限制的原因是什么,或者是否有某种方法可以将操作置于我可能错过的伪状态。
state-machine - Spring-Statemachine 配置
我不确定这是问这个问题的正确地方,但我在 spring-statemachine 项目(http://projects.spring.io/spring-statemachine/)中看不到论坛链接来向开发人员提问,我希望这是正确的方法。
有段时间写了一篇博客,
关于极其异步的 Web 应用程序,使用 Spring Webflow 和这些项目以及 Spring Webflow 的限制。
在我提出的解决方案中,我广泛使用了状态机原理。在我写这篇博客的时候,还没有我可以使用的开箱即用的状态机,所以我实现了我自己的版本。
现在令我惊讶的是,我刚刚看到了 Spring Statemachine 项目,并且我正在考虑将我的示例应用程序转换为使用 Spring Statemachine 框架。
在真正开始对该主题进行投资之前,我有两个问题要问。我查看了 Spring Statemachine 的样本,似乎状态机的配置是通过 Java Code 完成的。
这是唯一可能的方法吗,在我的示例应用程序中,我正在读取 UML 模型(XMI)并通过 Eclipse M2T 创建一个 Spring 配置文件来启动应用程序。
我发现最终用户通过 Java 代码配置复杂的状态机是为了实际用途而变得复杂。为此,我使用图形用户界面创建状态机的 UML 模型并将其转换为 Spring 应用程序上下文,以便最终用户更容易理解。
你可以在这里看到。
UML 模型(不幸的是 Stack Overflow 不允许我发布额外的链接,所以请在上一个链接的末尾使用“#sm_model”)
Eclipse M2T UML 模型转换(见上文“#m2t”)
那么是否可以提供一个 XML 文件并用它来配置 Spring Statemachine?我可以自然地通过 M2T 创建 Java 类,但我感觉最终结果对于复杂项目的最终用户来说几乎是不可读的。
我想问的第二个问题,Spring Statemachine 是否支持“嵌套状态机”,我在项目网站上找到了关于这种可能性的提示,但在现有的示例项目中我找不到具体的实现。
在实际 Web 应用程序中使用状态机的最大障碍是“状态爆炸”,而处理它的最佳方法是“嵌套状态机”。
Spring Statemachine 是否支持这个概念。
您可以在以下链接中找到有关“状态爆炸”和“嵌套状态机”的更多详细信息。
状态爆炸(见上文“#stateexplosion”)
嵌套状态机(见上文“#nested_sm”)
我希望这是提出这些问题的正确地方。
谢谢你的答案
spring - 会话范围弹簧状态机
我正在开发一个大型电子商务应用程序,我认为这个项目可能非常适合结帐流程。我刚刚阅读了文档,但仍有一些小问题......
1-我可以在会话范围内创建和注入 StateMachine 吗?我认为理论上可以做到这一点,但是每个会话都有一个 stateMachine 实例是否可以,或者这是否矫枉过正?
2-我可以将状态保留到会话中吗?StateMachine 在 SpringSession 上的表现如何?状态可以持久化或序列化到 Redis 吗?
在这种情况下有效使用弹簧状态机的最佳实践是什么?
谢谢
spring - 如何在特定状态下构造状态机
我正在使用 Spring Statemachine 来提供用户的工作流程。我需要保持状态更改,以便用户的状态不会在重新启动时丢失。现在,我可以根据提供的示例执行此操作,但是缺少的一件事是如果确实发生崩溃,如何重新创建状态。
基本上,我想创建状态机并告诉它将自己设置为崩溃前的最后一个状态,并从数据库中复制任何扩展状态变量。有没有办法做到这一点?