【问题标题】:how to call Invoker again on same state in apache commons SCXML如何在 apache commons SCXML 的相同状态下再次调用 Invoker
【发布时间】:2014-07-07 05:56:51
【问题描述】:

我在我的项目中使用 Apache commons SCXML 来维护状态机。一旦执行到定义调用程序的状态的转换,我们就使用调用程序执行一些活动。

从同一状态调用调用程序两次时出现问题。例如,从状态“A” 事件“TEMP”被触发,然后它移动到状态“B”。一旦进入状态“B”,调用者就会被调用,并且调用者类的回调方法invoke()。

<state id="A">
    <transition event="TEMP" target="B"></transition>
</state>

<state id="B">
    <invoke src="INVOKER" targettype="invoker-req">
        <transition event="FAIL" target="A"></transition>
        <transition event="SUCC" target="C"></transition>
    </invoke>
</state>

当从状态 A 再次触发事件“TEMP”并且没有调用 Invoker 时,问题就来了。 invoke() 方法不再被调用。调用者只能调用一次吗?

请让我知道如何再次调用调用者/invoke()。我在互联网上没有得到太多帮助。

提前致谢。

【问题讨论】:

    标签: java scxml apache-commons-scxml


    【解决方案1】:

    我不确定 apache-commons 实现的细节,但 SCXML 规范要求调用者在其包含状态在宏步骤结束时处于活动配置时被调用,而当该状态不再处于时不被调用宏步结束时的活动配置。因此,无论您来自哪个状态,都只能运行一个调用程序实例。

    但是,您可以做的是在父状态下启动调用程序,并在 onentry 块中发送事件,其 id 为 #_target。您可以发送任意数量的事件,并将您的应用程序代码从调用程序实例化移动到事件的接收。

    【讨论】:

      猜你喜欢
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      相关资源
      最近更新 更多