如何在 Spring 状态机上检索和查找当前状态?
How to retrieve and find current state on Spring State Machine?
我正在创建一个需要 FSM 的项目,我选择 Spring 状态机来帮助我解决问题。我正在使用 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);
}
使用现有功能确实很难做到这一点,因为您可能已经从示例和文档中看到了很多移动部件。
我目前正在努力在下一个 1.2.8 版本中围绕这个问题进行大修,以使坚持更容易。如果您愿意使用快照(在 1.2.x 分支中)直到 1.2.8 出来,然后从检查新示例开始 datajpapersist sample. Based on same concepts as storing configs but with new persist classes in spring-statemachine-data. Also issues around this 1.2.8 gh issues.
最好能得到一些反馈。
我正在创建一个需要 FSM 的项目,我选择 Spring 状态机来帮助我解决问题。我正在使用 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);
}
使用现有功能确实很难做到这一点,因为您可能已经从示例和文档中看到了很多移动部件。
我目前正在努力在下一个 1.2.8 版本中围绕这个问题进行大修,以使坚持更容易。如果您愿意使用快照(在 1.2.x 分支中)直到 1.2.8 出来,然后从检查新示例开始 datajpapersist sample. Based on same concepts as storing configs but with new persist classes in spring-statemachine-data. Also issues around this 1.2.8 gh issues.
最好能得到一些反馈。