我们可以在StateMachineBuilder中使用UmlStateMachineModelFactory吗?

时间:2016-08-08 11:12:19

标签: spring-statemachine

我正在使用StateMachineBuilder创建状态机,因为我需要以编程方式使用它来配置状态和转换。

但由于一些需求变化,我的配置几乎不变,现在我想使用eclipse uml建模,因为我不再需要动态或编程地构建状态机。 为了避免大代码返工,我想在内部构建器中使用UmlStateMachineModelFactory,如下所示。

Builder<String, String> builder = StateMachineBuilder
                .<String, String> builder();
        builder.configureConfiguration()
        .withConfiguration()
        .autoStartup(false)
        .listener(listener())
        .beanFactory(
                this.applicationContext.getAutowireCapableBeanFactory());



builder.configureModel().withModel().factory(new UmlStateMachineModelFactory("classpath:model2.uml"));

1)在状态机中是否合法,如果是,我如何为每个州附加进入操作?

目前正在使用构建器我使用以下代码为每个州附加条目操作

stateConfigurer.state(&#34; State1&#34;,this.state1EntryAction,null);

// State1EntryAction is  @Autowired inside my controller class  and
// State1EntryAction   implements Action<String, String> and
// annotated with @Component (org.springframework.stereotype.Component)

2)我可以在uml模型中给出入口操作类的名称,以便为每个阶段附加入口操作吗?如果是这样我怎么能在日食纸莎草纸上做到这一点。

提前致谢!

1 个答案:

答案 0 :(得分:1)

Docs可能对此有点不清楚(特别是如果用户不熟悉纸莎草纸和uml概念)。我首先研究了uml xml test files中的uml测试源如何将动作/警卫从uml引用到运行时解析中。当你看到那些使用真正的纸莎草纸模型的人时,事情会变得更加清晰。

默认的guard / action将从应用程序上下文中解析为等效的bean名称,但是有一种方法可以手动挂钩其他实例(即,如果guard / action未定义为bean)。

此测试testSimpleFlat2()将注册其他操作/警卫。这些是通过StateMachineComponentResolver界面解决的,DefaultStateMachineComponentResolver的内部实例将从BeanFactory解析,如果已知,但用户可以添加辅助DefaultStateMachineComponentResolver,如该测试中所示。