2017-08-16 4 views
0

1、Webでデータベースにマシン構成データを作成しました。stateMachineFactoryでstatemachineを作成すると、なぜstatemachineが動作しないのですか?

@Override 
public void createMachine(MachineCfgDto data) { 
    String machineId = data.getName(); 
    Set<String> status = new HashSet<String>(); 
    String initStatus = null; 
    for(int i=0;i<data.getCfg().size();i++) { 
     if(i==0) { 
      initStatus =data.getCfg().get(i).getSrc(); 
     } 
     status.add(data.getCfg().get(i).getSrc()); 
     status.add(data.getCfg().get(i).getTarget()); 
    } 
    Map<String,JpaRepositoryState> machineStatus = new HashMap<String,JpaRepositoryState>(); 
    for(String s : status) { 
     JpaRepositoryState mStatus = stateRepository.save(new JpaRepositoryState(machineId,s,initStatus.equals(s)?true:false)); 
     machineStatus.put(s, mStatus); 
    } 

    for(CfgData cfg : data.getCfg()) { 
     JpaRepositoryTransition trans = new JpaRepositoryTransition(machineStatus.get(cfg.getSrc()),machineStatus.get(cfg.getTarget()),cfg.getEvent()); 
     trans.setKind(TransitionKind.EXTERNAL); 
     transitionRepository.save(trans); 
    } 
} 

2は、私がStateMachineFactoryでステートマシンを作成し、それを起動し、その後、私は、ステートマシンののSendEventメソッドによってイベントを送信し、それがうまく動作しない線量。 SendEvent後

@Override 
public void submit(String machineId, String curStatus,Long[] ids) { 
    StateMachine<String, String> machine = stateMachineFactory.getStateMachine(machineId); 
    PersistStateMachineHandler handler = new PersistStateMachineHandler(machine); 
    handler.addPersistStateChangeListener(new TestListener(jdbcTemplate)); 
    System.out.println("状态机是否终结:" + machine.isComplete() + "machine-uuid:"+machine.getUuid()); 
    State<String, String> s = machine.getInitialState(); 
    System.out.println("状态id:" + s.getId()); 
    if(machine.isComplete()) { 
     machine.start(); 
    } 
    machine.sendEvent("start"); 
    System.out.println("状态机是否终结:" + machine.isComplete()+ machine.getState().getId()); 
    handler.handleEventWithState(MessageBuilder.withPayload("start").setHeader("ids", ids).build(), curStatus); 

} 

、マシンの現在の状態が変化していない、それが初期状態「S0」すべての時間だ、なぜか、どのように春のステートマシンを使用してcorrentに感謝を教えてください!

この場合、私はpersitを使用しますが、それはあまりにも

答えて

0

申し訳ありませんが動作しない、私は問題を発見しました! 私はトランジションを作成するとき、私はそれにmachineIdを設定することを忘れます。したがって、sendEventによってマシンを使用して、変換を持っていません。

関連する問題