@WithStateMachine с @EnableStateMachineFactory

Я пытался использовать @WithStateMachine с @StateMachineConfigEnums, и я не вижу, чтобы мои функции вызывались.

Мой код:

@Configuration
@EnableStateMachineFactory
public class StateMachineConfigEnums extends StateMachineConfigurerAdapter<String, String> {

}
@WithStateMachine
public class OrderTransitionBean {
    @OnTransition(target = "RECEIVED")
    void toState1() {
        System.out.println("Manish toState1");
    }

Может быть простой ответ, что он не поддерживается и @WithStateMachine работает только с @EnableStateMachine. Или, возможно, я что-то упустил.

Хотя другие вещи работают, как показано ниже, или действия, определенные с переходами:

public class OrderStateMachineListener extends StateMachineListenerAdapter<String, String> {

    @Override
    public void stateChanged(State<String, String> from, State<String, String> to) {
        System.out.println("Order state changed to " + to.getId());
    }
}

2 ответа

Решение

Да, вы правы в этом, это не поддерживается, так как поддержка аннотаций работает только с зарегистрированными bean-компонентами, и в этом случае bean-компонент является фабрикой конечных автоматов, а не самой машиной. Поскольку вы первый, кто запросил это, я создал для него gh-224.

Теперь это возможно для всех, кто пытается понять, как это работает. Вам нужно дать имя вашей государственной машине.

Вам необходимо указать имя для @WithStateMachineаннотация. Пример:

@WithStateMachine(name = StateMachineNameConstants.STATE_MACHINE_NAME)

Вы также должны указать то же имя при использовании фабрики для создания конечного автомата:

stateMachine = stateMachineFactory.getStateMachine(StateMachineNameConstants.STATE_MACHINE_NAME);

Если вы используете Enums вместо строк, то вместо @OnTransition создайте аннотацию с именем @StateonTransition (обратитесь к официальному сайту автомата весеннего состояния).

Другие вопросы по тегам