如何在Spring状态机上检索和查找当前状态?

如何在Spring状态机上检索和查找当前状态?,spring,jpa,kotlin,fsm,spring-statemachine,Spring,Jpa,Kotlin,Fsm,Spring Statemachine,我正在创建一个需要FSM的项目,我选择Spring状态机来帮助我解决这个问题。我正在使用JPA,并试图找出如何根据当前状态启动状态机,从JPA存储库中检索状态。我在文档中发现了这种方法: 但我也对这种方法感到困惑: 我并没有试图持久化所有状态机配置,只是根据实体状态启动和发送事件。但在这两种情况下,我都不知道如何放置jpa存储库来查找我的当前状态 现在我正在尝试这种方法: class StateMachineAdapter<S, E, T> { lateinit var stat

我正在创建一个需要FSM的项目,我选择Spring状态机来帮助我解决这个问题。我正在使用JPA,并试图找出如何根据当前状态启动状态机,从JPA存储库中检索状态。我在文档中发现了这种方法:

但我也对这种方法感到困惑:

我并没有试图持久化所有状态机配置,只是根据实体状态启动和发送事件。但在这两种情况下,我都不知道如何放置jpa存储库来查找我的当前状态

现在我正在尝试这种方法:

class StateMachineAdapter<S, E, T> {

lateinit var stateMachineFactory: StateMachineFactory<S, E>

lateinit var persister: StateMachinePersister<S, E, T>

fun stateMachineRestore(contextObject: T): StateMachine<S, E> {
    val stateMachine: StateMachine<S, E> = stateMachineFactory.getStateMachine()
    return persister.restore(stateMachine, contextObject)
}


fun persist(stateMachine: StateMachine<S, E>, contestation: T) {
    persister.persist(stateMachine, contestation)
}

fun create(): StateMachine<S, E> {
    val stateMachine: StateMachine<S, E> = stateMachineFactory.getStateMachine()
    stateMachine.start()
    return stateMachine
 }


 }
类StateMachineAdapter{
lateinit var stateMachineFactory:stateMachineFactory
lateinit变量持久化器:StateMachinePersister
有趣的stateMachineRestore(contextObject:T):StateMachine{
val stateMachine:stateMachine=stateMachineFactory.getStateMachine()
返回persister.restore(stateMachine、contextObject)
}
乐趣持久(状态机:状态机,竞赛:T){
persister.persist(状态机、竞争)
}
fun create():状态机{
val stateMachine:stateMachine=stateMachineFactory.getStateMachine()
stateMachine.start()
返回状态机
}
}
我在Spring文档中发现了这段代码,我认为可以用JpaRepository替换它:

public void change(int order, String event) {
Order o = jdbcTemplate.queryForObject("select id, state from orders where id = ?", new Object[] { order },
        new RowMapper<Order>() {
            public Order mapRow(ResultSet rs, int rowNum) throws SQLException {
                return new Order(rs.getInt("id"), rs.getString("state"));
            }
        });
handler.handleEventWithState(MessageBuilder.withPayload(event).setHeader("order", order).build(), o.state);
 }
公共无效更改(整数顺序、字符串事件){
Order o=jdbcTemplate.queryForObject(“从orders中选择id,状态,其中id=?”,新对象[]{Order},
新的行映射器(){
公共顺序映射行(ResultSet rs,int rowNum)抛出SQLException{
返回新订单(rs.getInt(“id”)、rs.getString(“state”);
}
});
handler.handleEventWithState(MessageBuilder.withPayload(event).setHeader(“order”,order).build(),o.state);
}

使用现有功能确实很难做到这一点,因为您可能已经从示例和文档中看到了很多活动部件

我目前正致力于在下一个1.2.8版本中对此进行全面检查,以使持久化更容易。如果您愿意在1.2.8版本发布之前使用快照(在1.2.x分支中),那么从检查新样本开始。基于与存储配置相同的概念,但在中具有新的持久化类。还有围绕这一点的问题


最好能得到一些反馈。

我将尝试使用此实现并向您发送一些反馈。非常感谢。