2017-05-15 14 views
0

イム自動ステートマシン(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); 
     }; 
    } 
} 
+0

は、何が間違っていましたか? [最小で完全で検証可能な例](https://stackoverflow.com/help/mcve)を入力してください。 – Obenland

+0

1- SMは、初期状態CardStates.ACTIVE_STATUSでインスタンス化されるが、findCustomer()アクションがトリガされません。だから何も起こらない:SMは進化しない。 2テストクラスからcardStateMachine.sendEvent(CardEvents.FIND_CUSTOMER)を使用してイベントCardEvents.FIND_CUSTOMERをトリガーすると、findCustomer()アクションはSMステートの変更と呼ばれますが、context.getStateMachine()。sendEvent(CardEvents。 CUSTOMER_FOUND);考慮されていません:それはその遷移で定義されたfindMobileCard()アクションを呼び出すことになっています。 –

答えて

0

あなたはCardStates.CUSTOMER_FOUNDからCardStates.ACTIVE_STATUSのイベントCardEvents.FIND_CUSTOMERを持っています。 findCustomer()からはCardEvents.FIND_CUSTOMERと異なるイベントCardEvents.CUSTOMER_FOUNDを送ります。私はそれが動作するはずだと思うと

変更。思考は、個人的に私は匿名の移行と選択状態を介してautomaticマシンを運転することを好むでしょう。