2016-05-12 6 views
1

私は別のスレッドで20人の同時ユーザー処理命令を持っています。スプリングステートマシンを使用して状態を維持するにはどうすればよいですか?spring statemachine for multiple thread同時に

私がしようとしています:

public class myclass extends EnumStateMachineConfigurerAdapter<OrderState, OrderEvents> 

@Override 
    public void configure(StateMachineTransitionConfigurer<OrderState, OrderEvents> transitions) 
      throws Exception { 
     transitions 
       .withExternal() 
       .source(OrderState.A).target(OrderState.B) 
       .event(OrderEvents.X) 
       .and() 
       .withExternal() 
       .source(OrderState.A).target(OrderState.C) 
       .event(OrderEvents.Y) 
@Override 
    public void configure(StateMachineConfigurationConfigurer<OrderState, OrderEvents> config) throws Exception { 
     config 
       .withConfiguration() 
       .autoStartup(true) 
       .listener(new OrderStateMachineListener()); 
    } 

しかし、それには、Yは、ステートマシンを私に伝え、ないどの順序のために:私はこれの他のオプションを持っていますが、このオプションは見えない

@Override 
    public void stateChanged(State<OrderState, OrderEvents> from, State<OrderState, OrderEvents> to) { 
     System.out.println("Order state changed to " + to.getId()); 
    } 

各イベントに適しています。

stateMachine.stop(); 
     stateMachine 
       .getStateMachineAccessor() 
       .doWithAllRegions(access -> access.resetStateMachine(new DefaultStateMachineContext<>(sourceState, null, null, null))); 
     stateMachine.start(); 
     stateMachine.sendEvent(event); 

答えて

0

最終的に機能しました。 @EnableStateMachineの代わりに@EnableStateMachineFactoryを@EnableStateMachineの代わりに使用し、プログラムを呼び出す必要がありました。

@Autowired 
StateMachineFactory<String, String> factory; 

    public void getOrderStatus(long id) { 
     StateMachine<String, String> stateMachine = factory.getStateMachine(); 
     stateMachine.start(); 
     stateMachine.sendEvent(); 
    }