小编Ala*_*lan的帖子

在Spring Statemachine中坚持和恢复现状

我将Spring Statemachine引入现有项目,希望合并并澄清我们的业务逻辑.我们有各种具有互连状态的JPA实体,我在将持久状态设置为现有状态机的当前状态时遇到了一些麻烦.

我正在使用StateMachineFactory为每个实体实例创建一个新的StateMachine实例.我将StateMachine的当前状态存储在一个单独的字段中,以便Hibernate持久存在,理想情况下需要将持久字段的值与StateMachine同步.我的问题是如何在Spring Statemachine中实现这一目标.

@Entity
@EntityListeners(MyEntityListener.class)
public class MyEntity {

    @Column
    private MyState internalState; // Using AttributeConverter

    @Transient
    private StateMachine<MyState, Event> stateMachine;

}
Run Code Online (Sandbox Code Playgroud)
public class MyEntityListener {

    @PostLoad
    public void postLoad(MyEntity entity) {
        // TODO Set StateMachine's current state to entity's internal state
    );

}
Run Code Online (Sandbox Code Playgroud)
  1. 一种方法可以是定义局部转换以将初始状态移动到持久状态.然后我可以进行条件检查以找到与本地转换相关联的事件,这会将源状态移动到目标状态.这对我来说似乎有些混乱,我希望尽可能保持状态机的配置.

  2. 我无法看到如何在不通过转换的情况下通过公共API设置StateMachine的当前状态,因此我探索的另一种方法是将StateMachine实例包装为公开以下方法(因为它是方便的默认范围):

package org.springframework.statemachine.support;

public abstract class AbstractStateMachine<S, E> extends StateMachineObjectSupport<S, E> implements StateMachine<S, E>, StateMachineAccess<S, E> {

    void setCurrentState(State<S, E> state, Message<E> message, Transition<S, E> transition, boolean exit, StateMachine<S, E> stateMachine)

} …
Run Code Online (Sandbox Code Playgroud)

persistence state spring-statemachine

5
推荐指数
1
解决办法
3807
查看次数

标签 统计

persistence ×1

spring-statemachine ×1

state ×1