【问题标题】:How to retrieve and find current state on Spring State Machine?如何在 Spring 状态机上检索和查找当前状态?
【发布时间】:2017-11-29 12:58:31
【问题描述】:

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

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

我没有尝试保留所有状态机配置,而只是根据我的实体状态启动和发送事件。但在这两种情况下,我都不知道如何放置 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
 }


 }

我在 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);
 }

【问题讨论】:

    标签: spring jpa kotlin fsm spring-statemachine


    【解决方案1】:

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

    我目前正在努力在下一个 1.2.8 版本中对此进行彻底检查,以使持久化更容易。如果您愿意在 1.2.8 发布之前使用快照(在 1.2.x 分支中),那么首先检查新示例 datajpapersist sample。基于与存储配置相同的概念,但在 spring-statemachine-data 中使用了新的持久类。还有关于这个1.2.8 gh issues的问题。

    最好能得到一些反馈。

    【讨论】:

    • 我会尝试使用这个实现并向您发送一些反馈。谢谢!
    猜你喜欢
    • 2020-06-28
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 2015-10-10
    • 2023-03-27
    相关资源
    最近更新 更多