- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 Spring 状态机中有一个守卫。
@Bean
public Guard<String, String> myGuard() {
return context -> {
try {
String x = null;
x.length();
return true;
} catch (Exception e) {
context.getStateMachine().setStateMachineError(e);
context.getStateMachine().stop();
throw e;
}
};
}
这当然是一个java.lang.NullPointerException
。
因此,在我创建 context.getStateMachine().stop();
之后,我预计状态机正在停止。
2017-11-24 18:02:55.783 INFO 30652 --- [nio-8080-exec-1] o.s.s.support.LifecycleObjectSupport : stopped org.springframework.statemachine.support.DefaultStateMachineExecutor@367d6b09
就这样,它停止了。但比所有其他守卫、状态和操作都是事后调用的。
但是当出现错误时,我绝对不希望守卫只是切换到false
,我真的想退出机器。
只有一个区域。所以,据我理解,它应该停止。
有什么办法可以解决这个问题吗?或者有什么方法可以在发生这种情况时调用类似“退出事件”的东西?
我很感谢您提供解决此问题的任何想法。
使用:
spring-boot: 1.5.8
spring-statemachine-uml 1.2.6
最佳答案
我不确定在这种情况下,当有人试图阻止机器守卫时会发生什么。老实说,我什至从未尝试过,因为你尝试做的事情毫无意义。回顾一下我最初是如何选择按原样公开上下文来保护的,可以访问机器本身,从而使 stop 方法可见。当机器运行时,我不会尝试停止机器的内部逻辑。我早就该考虑这个了:)
但是话虽如此,守卫实际上只有一个作用,那就是保护转换,并且它应该返回 true 或 false。当调用守卫时,我们确实会处理捕获异常(据我所知,我们将其评估为 false),但从守卫中抛出某些内容通常是未定义的行为。
假设您对操作执行的操作出现错误,那么您应该执行与错误相关的操作。我会创建一个终端状态,设置转换到该终端状态,然后您可以从操作(在 catch 内)发送事件来指示机器进入该状态。通常,这种错误处理不会在单根级别计算机内完成,因为它通常会导致状态爆炸(您需要开始设置从所有状态到错误状态的转换)。这就是为什么子状态通常用于处理正确的错误处理。
但是,如果您更多地开放您的用例以及您想要完成的任务,我可以尝试给出更好的示例。错误处理始终是一个特定的主题,因为它通常需要构建到您的机器设计中。从下面的状态图中可以看到我当前正在使用 spring-cloud-skipper 进行的更复杂的错误处理。这可能超出了您的问题范围,但为您的下一个评论提供了一些背景。
关于java - (UML) Spring-Statemachine 在 statemachine.stop() 之后仍在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47477795/
我的 Spring 状态机中有一个守卫。 @Bean public Guard myGuard() { return context -> { try {
bbv.Common.StateMachine 类是我见过的最好的状态机代码。但它只缺少一件事:获取当前状态。 这是一个订单跟踪系统: fsm = new ActiveStateMachine();
使用新的 Spring Statemachine 项目,我可以在不使用可用于 JavaConfig 和 Spring @Configuration 类的适配器类的情况下以编程方式创建状态机吗? 最佳答
我正在测试 Spring Statemachine,特别是我对应用状态机来管理对象的状态感兴趣。 我的状态机类型为StateMachine . 我的业务对象,Episode ,具有类型为 state
我正在测试 Spring Statemachine,特别是我对应用状态机来管理对象的状态感兴趣。 我的状态机类型为StateMachine . 我的业务对象,Episode ,具有类型为 state
我使用 Spring 指南编写了状态机的实现。 但我无法对更改状态做出任何反应,尽管状态本身已成功更改。也许我误解了 Beans 类的目标?我需要实现状态变化时自动执行closeDoor()和star
我是 Spring 状态机的新手。 我已经在配置文件中配置了状态和转换,使用它们能够成功编排我的微服务。 现在我计划在外部存储库 (MYSQL DB) 中保存状态和转换 当我尝试使用 JpaState
有人可以举一个简单的例子来说明如何使用pluginaweek state_machine对于具有事件记录的票证模型? 我不明白文档中的复杂示例。 示例说明: 新 -> 接受、拒绝、反馈 接受 -> 已
我将 Spring Statemachine 引入到现有项目中,希望能够合并和澄清我们的业务逻辑。我们有各种具有互连状态的 JPA 实体,我在将持久状态设置为现有状态机的当前状态时遇到了一些麻烦。 我
使用 Spring 状态机,我们有状态和事件。我找不到任何关于是否可以在配置期间将静态数据附加到状态的文档。 例如,如果有状态S1和S2 public void configure(StateMach
使用 Spring 状态机,我们有状态和事件。我找不到任何关于是否可以在配置期间将静态数据附加到状态的文档。 例如,如果有状态S1和S2 public void configure(StateMach
由于我必须支持对状态机的并发访问,因此我无法使用通常的 Autowired 单例方法。相反,我尝试按照文档中的描述构建状态机,此处: http://docs.spring.io/spring-stat
我有一个 Spring 状态机,使用 EnumStateMachineConfigurerAdapter 配置,并用 @EnableStateMachineFactory 注释 一切顺利,我可以使用工
我有一个基于注释的状态机配置: @Component @Scope(BeanDefinition.SCOPE_PROTOTYPE) @EnableStateMachine(name = "machin
我尝试在项目中使用 Spring Statemachine 框架,但是在编译时遇到构建 bean 定义错误。 2017-07-25 16:37:25.462:WARN:oejd.DeploymentM
我创建了一个 Spring Cloud 数据流 Stream,以 Gemfire 作为源,以 Log 作为接收器,并使用rabbitMQ 来处理消息。我能够成功地将流部署到我们的一台机器上。但是,当我
我觉得我已经很接近完成这项工作了,但似乎无法完成... 我有一个带有传奇/状态机的 .NET Core ASP 应用程序,它似乎在大多数情况下都运行良好。它: 收到请求 发布一个由传送名单拾取的事件
我正在开发一个 SpriteKit 游戏,使用 GKStateMachine 在多个场景之间进行转换。我正在使用一个包含 StateMachine 实例的类,该实例具有多个状态。状态本身可以通过初始值
我正在尝试让 StateMachine 在状态之间执行一些数据库操作。 所以我有一个“开始”状态,它使用 CallExternalMethodActivity 在用 ExternalDataExcha
我对 C++ 中函数指针的概念还很陌生,所以我不知道如何正确地写下我的问题。请耐心等待。 基本上,我想要做的是创建一个 Button 对象,其构造函数接受一个函数指针作为其参数。该函数指针指向将更改状
我是一名优秀的程序员,十分优秀!