Пружинный автомат "динамическая вилка"

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

  • пользователь находится в состоянии A
  • в этом состоянии он может создать короткую (предопределенную) задачу для другого пользователя (небольшой конечный автомат)
  • эти пользователи должны в основном выполнить конечный автомат поток до конца
  • должно быть возможным одновременное создание многих задач.
  • пользователь возвращается в состояние A, как только все созданные им задачи завершены.

Вот графическое представление того, чего я пытаюсь достичь.

Изображение желаемого состояния машинной диаграммы

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

В весенней ссылке я обнаружил, что псевдо-состояние форка может быть тем, что я ищу, однако официальный репо-пример покрывает только статическую конфигурацию ( https://github.com/spring-projects/spring-statemachine/blob/master/docs/src/reference/asciidoc/sm-examples.adoc#statemachine-examples-tasks), где каждая задача уже определена (T1, T2, T3). Однако для моих нужд приложения я хотел бы иметь возможность (во время выполнения) добавить "T4".

По сути, я хотел бы знать, могут ли мои требования быть выполнены с помощью одного конечного автомата и могу ли я использовать fork() для своих нужд. Если это не так, я буду рад любым советам, которые подтолкнут меня в правильном направлении.

1 ответ

Как я прокомментировал на выходных, если вам нужна "динамическая" конфигурация, то самый простой способ сделать это - использовать "интерфейсы динамического компоновщика", как и во всех других примерах. Он был в основном добавлен, чтобы иметь возможность использовать SSM вне контекста весеннего приложения. Рецепт задач использует эту модель, поскольку он поддерживает запуск группы DAG с использованием иерархических областей и субмашин.

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

Хотя этот рецепт дает некоторую предысторию того, как это можно сделать, мы надеемся, что в нашей дорожной карте есть что-то лучшее, что должно добавить язык dsl, который должен значительно упростить создание таких пользовательских реализаций.

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