Spring state machine invalid transitions
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
add a comment |
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
add a comment |
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
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
spring state-machines finite-state-machine spring-statemachine
asked Nov 20 '18 at 21:25
wearebobwearebob
156
156
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
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.
add a comment |
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);
}
};
}
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
add a comment |
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.
add a comment |
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.
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.
answered Nov 28 '18 at 21:46
wearebobwearebob
156
156
add a comment |
add a comment |
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);
}
};
}
add a comment |
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);
}
};
}
add a comment |
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);
}
};
}
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);
}
};
}
answered Nov 28 '18 at 23:20
Anatoliy KorovinAnatoliy Korovin
1065
1065
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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