У меня есть конечный автомат
@EnableStateMachine
@Configuration
public class StateMachineConfiguration extends EnumStateMachineConfigurerAdapter<Status, Event> {
@Override
public void configure(StateMachineStateConfigurer<Status, Event> states) throws Exception {
states.withStates()
.initial(Status.DRAFT)
.states(EnumSet.allOf(Status.class));
}
@Override
public void configure(StateMachineTransitionConfigurer<Status, Event> transitions) throws Exception {
transitions
.withExternal()
.target(Status.INVITATION).source(Status.DRAFT)
.event(Event.INVITED)
.guard(new Guard())
.action(new ActionInvited())
.and()
.withExternal()
.target(Status.DECLINED).source(Status.INVITATION)
.event(Event.DECLINED)
.action(new ActionDeclined());
}
@Override
public void configure(StateMachineConfigurationConfigurer<Status, Event> config) throws Exception {
config.withConfiguration().autoStartup(true);
}
}
, и у меня есть модель, например Заказ .Модель сохраняется в БД.Я извлекаю модель из БД, теперь моя модель имеет статус Order.status == INVITATION
.Я хочу продолжить обработку модели с помощью машины состояний, но экземпляр машины состояний начнет обработку с начальным состоянием ПРОЕКТ , но мне нужно продолжить обработку с состояния ПРИГЛАШЕНИЕ .Другими словами, я хочу выполнить
stateMachine.sendEvent(MessageBuilder
.withPayload(Event.DECLINED)
.setHeader("orderId", order.id)
.build()
)
и выполнить действие ActionDeclined()
.Я не хочу сохранять контекст конечного автомата в БД.Я хочу установить состояние stateMachine для состояния моей модели во время выполнения.Как я могу сделать это правильно?Использование конструктора DefaultStateContext или другой, более красивый способ?