[英]Spring state machine to manage JPA entity
我有一個具有字段state
的Task
JPA @ @Entity
因此看起來狀態機可以很好地使用。 該state
可以通過調用類似形式的REST端點改變PUT /api/tasks/{id}/state
。 我想利用Actions
, Guards
的概念,因為它看起來像是很好的抽象。 我想我需要一些東西:
Tasks
的狀態相對應的狀態創建(或還原?)狀態機,並將JPA實體與其上下文關聯起來,以便Action
可以使用它來更改state
任務的state字段(以及其他狀態) )並通過Repository
其保留 我假設第1點將像@EnableStateMachineFactory一樣通過生成器創建計算機,您實際上不能真正在特定狀態下創建計算機(這是有道理的)。 我不清楚如何添加實體,我大概findOne
在@Repository
狀態機的上下文。
那是正確的方法嗎? 有樣本涵蓋嗎? 我很誠實地瀏覽了現有樣本,沒有發現任何類似的東西。
我可以建議使用Spring構建REST服務中的教程嗎? 如果您從頭開始,則將看到在創建基於REST的服務時如何添加依賴於對象狀態的操作。
你應該先問自己-你真的 , 真的需要這樣的狀態機(我不知道你充分利用的情況下)。 StateMachine
將在您的代碼中引入一些(很多?)復雜性。
話雖如此,這是一個可能的設計:
1)為實體實現標准的SOA(例如TaskController
> TaskService
> TaskRepository
)。
2)創建Service (W)
,其唯一目的是創建事件並將其發送到SM。 在該Service (W)
,將注入SM factory
和TaskService
(用於加載現有Task
的狀態)。
4)當請求/事件發送到TaskController
,您將調用Service (W)
,它將執行以下操作:
Task
存在,則用Task
的狀態重新補充SM的狀態 5)在狀態機配置中,您將具有與該事件關聯的源,目標和操作。 該操作將調用TaskService
並更新JPA實體。
如果在需要更新實體時您具有復雜的業務規則,並且希望可能的狀態轉換是確定性的(例如,您具有預定義的工作流程或狀態圖),則此設計很有意義。 每個狀態轉換之前的業務規則都可以抽象為警衛,而SM可以是其他人與您的JPA實體進行交互(更新)的接口。
對於JPA Entity的補水狀態機,請參閱此答案 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.