Really nice and helpful video. However, I have a question Josh: If I deploy my state machine on different clusters and supposedly one of the clusters goes down, then how will the states be restored in memory again?
may be we have to save the phase in the db and then re-construct the statemachine by going through but passing through different phases, like if the service crashed at 3rd phase completion, we have to then go through 1 and 2 and go until the phase is 3 automatically , quite absurd
It scares me how complex it is. Can't we just pass order id, state and event and get a next state and persist it outside the state machine instead of using an interceptor?
The ID of the state machines is null every time (56:04), although you're passing the orderId, because of the "doWithAllRegions->reset" bits. The SM are different on every step of the workflow, because of the factory, but the question is how fast each instance is stopped and discarded? Let's say you wanna transition from SI -> A -> B states - what is happening is basically SI to A - get new SM, do 1 node transition, stop the SM; A to B -> get new SM, do 1 node transition, stop the SM; What conditions needs to be satisfied for the SM1 to stop, having in mind A is not a final state? Should it be stopped manually after the transition is done?
Great video. I would recommend start with flow diagram at start which sets the visuals on the state changes happening. Overall nice video. I will try to implement it and link it in my video soon.
So the state machine is only to track the state after all ? Why we need this ? We can simply create an event n pass in Kafka for the next service to pickup... What r other the use cases, pls explain on that
none..i think they just avoided the if an else in your solution when you read a message to understand what to do next in an if else state on consumption
I would like to see such example together with @Transactional For example if paymentConfirmationNumber is attribute of Order entity and I want to set this attribute to order entity on PAID state entry action and also have it saved together with order state within the same transaction. And the second case would be to have some post PAID state change action which will be executed immediately after PAID status is changed, but in the new transaction. So state is changed saved and committed in one transaction, such transaction ends and then post state change action will be executed in new transaction. What is the best approach for such scenarios? I cannot find such examples in spring state machine docs and also anywhere on internet.
This video was about a command line runner application. If you need it in a running service you need to create either a Rest or MVC service or a scheduler of some sort.
Thanks for the amazing video, this is a great reference for me. but i have some doubts on initial state,parent state, sub states etc. and i also don't know that is it possible to create nested state machine(machine in side a machine) please give me some suggestion and reference(book name ,blogs,docs) from where i can clear my all doubts. please create 5-10 mint video for some states listeners ,states mathods and it's use in multithreading environment(distributed system) if it is possible.
Good information about state mashine, but wrong usage of logging framework. Using String.format or string concatenation you kill all benefits. With ERROR log level you will simple burn CPU and produce garbage. Use placeholders {} to format your log entries
A good approach to think about.
Thanks for the video, Josh.
Really nice and helpful video. However, I have a question Josh:
If I deploy my state machine on different clusters and supposedly one of the clusters goes down, then how will the states be restored in memory again?
good question, have you validated this scenario?
I had a same question, did any one get the answer to this question?
may be we have to save the phase in the db and then re-construct the statemachine by going through but passing through different phases, like if the service crashed at 3rd phase completion, we have to then go through 1 and 2 and go until the phase is 3 automatically , quite absurd
GREAT introduction in spring statemachine! Thanks!
Amazing video. it is really helpful to start using spring state machine. Loved the explanation. Thanks you Josh !
Hi Thanx for this tutorial. Do you know how to persist using JPA?
i watched this 4-5 years back it did not make me any sense, and now in 2024 its crystal clear :D
what if the prestatechange method succeeeds and start change fails?
Thanks a lot! Pretty good explanation about using Spring Boot state machine and very helpful!
Can you please create tutorial on Saga - considering Orchestration ?
It scares me how complex it is. Can't we just pass order id, state and event and get a next state and persist it outside the state machine instead of using an interceptor?
Hi.... Is this code available anywhere on the web or anyone has this code working open to share..
Thank you! This is a good starting point.
The ID of the state machines is null every time (56:04), although you're passing the orderId, because of the "doWithAllRegions->reset" bits. The SM are different on every step of the workflow, because of the factory, but the question is how fast each instance is stopped and discarded? Let's say you wanna transition from SI -> A -> B states - what is happening is basically SI to A - get new SM, do 1 node transition, stop the SM; A to B -> get new SM, do 1 node transition, stop the SM; What conditions needs to be satisfied for the SM1 to stop, having in mind A is not a final state? Should it be stopped manually after the transition is done?
Great Tutorial. Thank you
Awesome video! Thanks!! Keep up the good work!!!
Great video. I would recommend start with flow diagram at start which sets the visuals on the state changes happening.
Overall nice video. I will try to implement it and link it in my video soon.
Hi, did you implement one with flow diagram?
@@waltonhumphrey8908 yeah i was able to do that but havent got a chance to record the video.
Nice but you could have started with a good slide on State machines during your intro instead of a dark screen
So the state machine is only to track the state after all ?
Why we need this ?
We can simply create an event n pass in Kafka for the next service to pickup...
What r other the use cases, pls explain on that
none..i think they just avoided the if an else in your solution when you read a message to understand what to do next in an if else state on consumption
In am looking for with rest calls
I would like to see such example together with @Transactional
For example if paymentConfirmationNumber is attribute of Order entity and I want to set this attribute to order entity on PAID state entry action and also have it saved together with order state within the same transaction.
And the second case would be to have some post PAID state change action which will be executed immediately after PAID status is changed, but in the new transaction.
So state is changed saved and committed in one transaction, such transaction ends and then post state change action will be executed in new transaction.
What is the best approach for such scenarios? I cannot find such examples in spring state machine docs and also anywhere on internet.
Hi, did you find any help on this? I am looking for similar examples.
Anushri Aithal No, I didn't find anything yet.
@@martinsefcik i guess then one phase has to be a complete one transaction in itself. By design on phase cannot overlap the other phase.
Why boot application always exits after the operation is completed. How do keep the application running?
This video was about a command line runner application. If you need it in a running service you need to create either a Rest or MVC service or a scheduler of some sort.
Thanks for the amazing video, this is a great reference for me.
but i have some doubts on initial state,parent state, sub states etc. and i also don't know that is it possible to create nested state machine(machine in side a machine)
please give me some suggestion and reference(book name ,blogs,docs) from where i can clear my all doubts.
please create 5-10 mint video for some states listeners ,states mathods and it's use in multithreading environment(distributed system) if it is possible.
Check the notion of "regions" (or "orthogonal regions").
thank u very much . it solved my question!
Well explained. Thanks
Good information about state mashine, but wrong usage of logging framework. Using String.format or string concatenation you kill all benefits. With ERROR log level you will simple burn CPU and produce garbage. Use placeholders {} to format your log entries
Thanks for your sharing!
Where's your mac?
imports?
very good thanks
is it possible to have the source code
Hi buddy thanks for watching. the source code is github.com/spring-tips/statemachine
@@JoshLong Thanks a lot for providing source code link
@@JoshLong Thanks! Really helpful video along with source code.
great work thank you!
Awesome !
Am I the only one who thinks this is unnecessarily overcomplicated?
Try to speak slower while pronouncing every word. Why rush?
Just turn on subtitles, youtube is quite good at recognizing fast speech.
too much coffee 🤔
Awesome!