Сначала вы должны спросить себя - нужен ли вам действительно , действительно конечный автомат для этого (я не знаю ваш полный вариант использования).StateMachine
привнесет некоторую (большую?) Сложность в ваш код.
При этом возможен такой дизайн:
1) Реализация стандартного SOA для сущности (например, TaskController
-> TaskService
-> TaskRepository
).
2) Создать Service (W)
, единственной целью которого является создание событий и их отправка на SM.В этом Service (W)
вам будут введены SM factory
и TaskService
(для загрузки состояния существующего Task
).
4) Когда запрос / событие отправляется на TaskController
, вы будете вызывать Service (W)
, который будет делать следующее:
5) В конфигурации конечного автомата у вас будет источник, цель и действие, связанные с этим событием.Действие вызовет TaskService
и обновит сущность JPA.
Этот дизайн имеет смысл, если у вас есть сложные бизнес-правила, когда необходимо обновить сущность, и вы хотите, чтобы возможные переходы состояний были детерминированными (например, выиметь заранее определенный рабочий процесс или диаграмму состояний).Бизнес-правила перед каждым переходом состояния могут быть абстрагированы как защитные, и SM может быть интерфейсом, через который другие взаимодействуют (обновляют) с вашей сущностью JPA.
Для регидрирования конечного автомата из сущности JPA, пожалуйста, смотри этот ответ .