- 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/
我正在为 Apple Watch Extension 设计 UML 图。我应该如何使用 UML 表示主机应用程序? UML 节点还是 UML 组件?请注意,扩展应用程序和 iPhone 应用程序(主机
UML 类图是描述类及其关系的标准图形符号。 是否有标准的文本符号 (DSL) 来描述相同的内容?不要说 XMI 或 EMF;-) 我认为您可以使用 Corba IDL 来做到这一点,并为类使用接口(
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 2年前关闭。 Improve thi
假设我正在设计一个分布式应用程序: 它由一台主机组成,即公司的前端Web服务(CompanyWS)和一台或多台主机,比如三台,即公司的分布式仓库。每个仓库都是一个 Web 服务 (WarehouseW
是否有任何正式方式表明函数参数是可选的? 例如,在这张图片中: 我想通知您可以填充 nodes_clicked 参数或将其留空。 谢谢。 最佳答案 可选参数在 UML 中没有任何处理,因为它只是编译器
UML 序列图中的垂直矩形表示什么? 例如我想知道绿色箭头指向的矩形的含义。这些矩形的高度有什么意义吗? 最佳答案 垂直矩形表示 执行规范 . 执行规范是对象交互的一部分,表示对象在执行某些事件或只是
像下面用 StarUML 绘制的 UML 状态图 (SD) 中是否允许没有直接转换的状态? State1 不直接参与任何转换,所以我怀疑这在 UML 中是否允许/可取。我认为在我的应用程序中,我实际上
我正在使用 Enterprise Architect 制作 UML 类图(并最终用它生成 PHP5 代码)。我可以为类添加属性。对于每个属性,我可以选择一个构造型:DomainCodedValue、F
我阅读了域模型及其重要性,我有以下疑问: 领域模型可以解决什么样的问题?换句话说,对于每个问题,我应该建立一个域模型吗? 据我所知,领域模型使用类图表示。类图和领域模型之间没有区别吗? 我也想了解词汇
首先,我对 UML 还是很陌生;但是,非常感兴趣并且正在尝试尽可能多地了解它。 话虽如此,我正处于被指示组装“上下文图”的情况。我觉得我好像理解什么是上下文图的概念以及如何创建上下文图,所以我觉得我没
我们在学校学习行为状态图的转换具有语法: list of events [guard condition] / list of actions 但是我在 Internet 上找不到任何使用多个事件进行
在维基百科上,我读到关联关系是实例级别的关系,所以我们谈论的是两个类的对象之间的关系。 当我们实际绘制类图时,为什么要在类元素或块而不是对象上使用关联?还有一些类级别的关系,我们再次使用类元素。由于我
我无法理解 UML 中的限定符是什么。 例如,在扫描的页面中,有一个名为 “SharedRegister”,其中包含“state”和“plateNumber”。 为什么不使用一个名为 SharerRe
大多数嵌入式系统应用程序都是用 C 语言编写的,即非 OOP。但是 UML 是为 OO 设计的。所以我的问题是为什么人们提倡和使用 UML 用于嵌入式系统(和实时嵌入式系统)? 最佳答案 UML 不仅
我们如何在 UML 图中显示一个线程被调用并反过来调用其他线程。这看起来更像是一个工作流。是否可以用 UML 表示 最佳答案 Sequence Diagram应该做的工作。 关于uml - 类图中的线
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我有一个关于 uml 组件图的问题:正如我在 Wikipedia 中看到的那样,可以创建我自己的“组件类型”,如 > , >等等。我以为我只能说>和 > ?!这些条目是刻板印象还是什么?我想对像 or
我知道依赖关系是用条纹箭头描述的,例如: Client ----->----> Server 我发现其他关系(关联、组合、聚合)通常需要多重性,但是,我不确定依赖关系是否需要多重性。我应该在上图的两边
我正在尝试创建 UML 图。例如,我有一个带有方法 a() 的类 A 和扩展 A 并覆盖方法 a() 的类 B。是否有任何标准来指示 UML 中的重写方法? 最佳答案 不,对于覆盖父类上的操作的操作没
假设您有一个更大的汽车配置文件的摘录: 现在我想为汽车定义一些约束,比如这些约束状态之一,如果 attrA是 true ,然后 attrB必须是 false像这样使用 OCL: Context UML
我是一名优秀的程序员,十分优秀!