Spring state machine invalid transitions












0















I've just started experimenting with the Spring state machine library. I have a simple state machine I'm trying to model, however I want to be notified whenever I provide an event that isn't a valid transition for the state the machine is currently in.



For example, if my state machine only allows transitioning from A to B if I receive event X, then I would like to be notified if the state is A but event Y is received because this is an error.



I know this would be possible by setting up transitions for all possible negative states and handling it there, but ideally there would be some way to only allow the transitions I explicitly define and alert me if anything else happens. Is this possible?










share|improve this question



























    0















    I've just started experimenting with the Spring state machine library. I have a simple state machine I'm trying to model, however I want to be notified whenever I provide an event that isn't a valid transition for the state the machine is currently in.



    For example, if my state machine only allows transitioning from A to B if I receive event X, then I would like to be notified if the state is A but event Y is received because this is an error.



    I know this would be possible by setting up transitions for all possible negative states and handling it there, but ideally there would be some way to only allow the transitions I explicitly define and alert me if anything else happens. Is this possible?










    share|improve this question

























      0












      0








      0








      I've just started experimenting with the Spring state machine library. I have a simple state machine I'm trying to model, however I want to be notified whenever I provide an event that isn't a valid transition for the state the machine is currently in.



      For example, if my state machine only allows transitioning from A to B if I receive event X, then I would like to be notified if the state is A but event Y is received because this is an error.



      I know this would be possible by setting up transitions for all possible negative states and handling it there, but ideally there would be some way to only allow the transitions I explicitly define and alert me if anything else happens. Is this possible?










      share|improve this question














      I've just started experimenting with the Spring state machine library. I have a simple state machine I'm trying to model, however I want to be notified whenever I provide an event that isn't a valid transition for the state the machine is currently in.



      For example, if my state machine only allows transitioning from A to B if I receive event X, then I would like to be notified if the state is A but event Y is received because this is an error.



      I know this would be possible by setting up transitions for all possible negative states and handling it there, but ideally there would be some way to only allow the transitions I explicitly define and alert me if anything else happens. Is this possible?







      spring state-machines finite-state-machine spring-statemachine






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 20 '18 at 21:25









      wearebobwearebob

      156




      156
























          2 Answers
          2






          active

          oldest

          votes


















          0














          The sendEvent method on the state machine returns a boolean signifying if the transition succeeded.



          boolean accepted = stateMachine.sendEvent("event");


          In this case "accepted" would tell you if the transition succeeded. If the boolean comes back as true that means the transition happened, if it comes back as false that means the transition was invalid and nothing was done.






          share|improve this answer































            0














            you can use a statemachine listener to catch a not accepted event:



            ...    

            @Override
            public void configure(
            StateMachineConfigurationConfigurer
            <States, Events> config) throws Exception {

            config.withConfiguration()
            .listener(listener())
            .autoStartup(true);
            }

            ...

            private StateMachineListener<States, Events> listener() {
            return new StateMachineListenerAdapter<States, Events>(){

            @Override
            public void eventNotAccepted(Message<Events> event) {
            log.error("event not accepted: {}", event);
            }
            };
            }





            share|improve this answer























              Your Answer






              StackExchange.ifUsing("editor", function () {
              StackExchange.using("externalEditor", function () {
              StackExchange.using("snippets", function () {
              StackExchange.snippets.init();
              });
              });
              }, "code-snippets");

              StackExchange.ready(function() {
              var channelOptions = {
              tags: "".split(" "),
              id: "1"
              };
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function() {
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled) {
              StackExchange.using("snippets", function() {
              createEditor();
              });
              }
              else {
              createEditor();
              }
              });

              function createEditor() {
              StackExchange.prepareEditor({
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: true,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: 10,
              bindNavPrevention: true,
              postfix: "",
              imageUploader: {
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              },
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              });


              }
              });














              draft saved

              draft discarded


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53401774%2fspring-state-machine-invalid-transitions%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              0














              The sendEvent method on the state machine returns a boolean signifying if the transition succeeded.



              boolean accepted = stateMachine.sendEvent("event");


              In this case "accepted" would tell you if the transition succeeded. If the boolean comes back as true that means the transition happened, if it comes back as false that means the transition was invalid and nothing was done.






              share|improve this answer




























                0














                The sendEvent method on the state machine returns a boolean signifying if the transition succeeded.



                boolean accepted = stateMachine.sendEvent("event");


                In this case "accepted" would tell you if the transition succeeded. If the boolean comes back as true that means the transition happened, if it comes back as false that means the transition was invalid and nothing was done.






                share|improve this answer


























                  0












                  0








                  0







                  The sendEvent method on the state machine returns a boolean signifying if the transition succeeded.



                  boolean accepted = stateMachine.sendEvent("event");


                  In this case "accepted" would tell you if the transition succeeded. If the boolean comes back as true that means the transition happened, if it comes back as false that means the transition was invalid and nothing was done.






                  share|improve this answer













                  The sendEvent method on the state machine returns a boolean signifying if the transition succeeded.



                  boolean accepted = stateMachine.sendEvent("event");


                  In this case "accepted" would tell you if the transition succeeded. If the boolean comes back as true that means the transition happened, if it comes back as false that means the transition was invalid and nothing was done.







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 28 '18 at 21:46









                  wearebobwearebob

                  156




                  156

























                      0














                      you can use a statemachine listener to catch a not accepted event:



                      ...    

                      @Override
                      public void configure(
                      StateMachineConfigurationConfigurer
                      <States, Events> config) throws Exception {

                      config.withConfiguration()
                      .listener(listener())
                      .autoStartup(true);
                      }

                      ...

                      private StateMachineListener<States, Events> listener() {
                      return new StateMachineListenerAdapter<States, Events>(){

                      @Override
                      public void eventNotAccepted(Message<Events> event) {
                      log.error("event not accepted: {}", event);
                      }
                      };
                      }





                      share|improve this answer




























                        0














                        you can use a statemachine listener to catch a not accepted event:



                        ...    

                        @Override
                        public void configure(
                        StateMachineConfigurationConfigurer
                        <States, Events> config) throws Exception {

                        config.withConfiguration()
                        .listener(listener())
                        .autoStartup(true);
                        }

                        ...

                        private StateMachineListener<States, Events> listener() {
                        return new StateMachineListenerAdapter<States, Events>(){

                        @Override
                        public void eventNotAccepted(Message<Events> event) {
                        log.error("event not accepted: {}", event);
                        }
                        };
                        }





                        share|improve this answer


























                          0












                          0








                          0







                          you can use a statemachine listener to catch a not accepted event:



                          ...    

                          @Override
                          public void configure(
                          StateMachineConfigurationConfigurer
                          <States, Events> config) throws Exception {

                          config.withConfiguration()
                          .listener(listener())
                          .autoStartup(true);
                          }

                          ...

                          private StateMachineListener<States, Events> listener() {
                          return new StateMachineListenerAdapter<States, Events>(){

                          @Override
                          public void eventNotAccepted(Message<Events> event) {
                          log.error("event not accepted: {}", event);
                          }
                          };
                          }





                          share|improve this answer













                          you can use a statemachine listener to catch a not accepted event:



                          ...    

                          @Override
                          public void configure(
                          StateMachineConfigurationConfigurer
                          <States, Events> config) throws Exception {

                          config.withConfiguration()
                          .listener(listener())
                          .autoStartup(true);
                          }

                          ...

                          private StateMachineListener<States, Events> listener() {
                          return new StateMachineListenerAdapter<States, Events>(){

                          @Override
                          public void eventNotAccepted(Message<Events> event) {
                          log.error("event not accepted: {}", event);
                          }
                          };
                          }






                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Nov 28 '18 at 23:20









                          Anatoliy KorovinAnatoliy Korovin

                          1065




                          1065






























                              draft saved

                              draft discarded




















































                              Thanks for contributing an answer to Stack Overflow!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53401774%2fspring-state-machine-invalid-transitions%23new-answer', 'question_page');
                              }
                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              MongoDB - Not Authorized To Execute Command

                              in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith

                              Npm cannot find a required file even through it is in the searched directory