Как получить и найти текущее состояние в Spring State Machine?

Я создаю проект, которому нужен FSM, и я выбираю Spring State Machine, чтобы помочь мне решить проблему. Я использую 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
 }


 }

Я нашел этот фрагмент кода в документации 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);
 }

person Vipercold    schedule 29.11.2017    source источник


Ответы (1)


Это действительно было довольно неудобно делать с использованием существующей функциональности, так как есть много движущихся частей, как вы, вероятно, видели из примеров и документации.

В настоящее время я работаю над пересмотром этого в следующем выпуске 1.2.8, чтобы упростить сохранение. Если вы хотите использовать моментальные снимки (в ветке 1.2.x) до выхода версии 1.2.8, начните с проверки нового образца образец datajpapersist. На основе тех же концепций, что и хранение конфигураций, но с новыми сохраняемыми классами в spring-statemachine-data. Также проблемы, связанные с 1.2.8 gh.

Было бы неплохо получить отзывы по этому поводу.

person Janne Valkealahti    schedule 30.11.2017
comment
Я попробую использовать эту реализацию и отправил вам отзыв. спасибо ! - person Vipercold; 30.11.2017