[英]Spring State Machine Transitions
我試圖觸發從其他過渡到自動狀態機(SM)的轉換,但無法正常工作:初始動作(findCustomer())應該更改SM的初始狀態,然后每個動作都會觸發一個事件,依此類推最終狀態。 這是我的配置:
@Configuration @EnableStateMachine public class CardStateMachineConfig extends EnumStateMachineConfigurerAdapter<CardStates, CardEvents> {
final private static Logger logger = LoggerFactory.getLogger(CardStateMachineConfig.class);
@Override
public void configure(StateMachineStateConfigurer<CardStates, CardEvents> states) throws Exception {
states.withStates().initial(CardStates.ACTIVE_STATUS).state(CardStates.ACTIVE_STATUS, findCustomer(), null)
.states(EnumSet.allOf(CardStates.class));
}
// @formatter:off
@Override
public void configure(StateMachineTransitionConfigurer<CardStates, CardEvents> transitions) throws Exception {
transitions.withExternal().source(CardStates.ACTIVE_STATUS).target(CardStates.CUSTOMER_FOUND).event(CardEvents.FIND_CUSTOMER).action(findCustomer())
.and().withExternal()
.source(CardStates.CUSTOMER_FOUND).target(CardStates.MOBILECARD_FOUND).event(CardEvents.CUSTOMER_FOUND).action(findMobileCard())
.and().withExternal()
.source(CardStates.FIND_MOBILECARD_FOUND).target(CardStates.WIRECARD_LOCKED_CARD).event(CardEvents.MOBILE_CARD_FOUND).action(wirecardLockCard());
}
// @formatter:on
@Override public void configure(StateMachineConfigurationConfigurer<CardStates, CardEvents> config)
throws Exception {
config.withConfiguration().autoStartup(true).listener(new MobileCardBlockProcessEventHandler());
}
@Bean public Action<CardStates, CardEvents> findCustomer() {
return (context) -> {
context.getStateMachine().sendEvent(CardEvents.CUSTOMER_FOUND);
};
}
@Bean public Action<CardStates, CardEvents> findMobileCard() {
return (context) -> {
context.getStateMachine().sendEvent(CardEvents.MOBILE_CARD_FOUND);
};
}
}
你有事件CardEvents.FIND_CUSTOMER
為CardStates.ACTIVE_STATUS
到CardStates.CUSTOMER_FOUND
。 從findCustomer()
發送事件CardEvents.CUSTOMER_FOUND
比不同CardEvents.FIND_CUSTOMER
。
更改它,我認為它應該起作用。 想一想,我個人更希望通過匿名轉換和選擇狀態來驅動automatic
機器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.