【发布时间】: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