我使用Apache commons SCXML在我的项目中维护状态机。我们已经使用Invoker执行一些活动,一旦转换到定义了调用者的状态,就会执行。
当调用者从同一状态被调用两次时,问题就出现了。例如,来自State" A" 事件" TEMP"被解雇,然后它移动到状态" B"。一旦进入状态" B"调用invoker并调用Invoker类的callback方法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>
当事件&#34; TEMP&#34;再次从A国被解雇,然后Invoker没有被召唤。永远不会再调用invoke()方法。调用者只能被调用一次吗?
请让我知道如何再次调用invoker / invoke()。我在互联网上得不到多少帮助。
提前致谢。
答案 0 :(得分:0)
我不确定apache-commons实现的细节,但是SCXML规范要求当它们的包含状态在宏步骤结束时处于活动配置时调用调用者,并且当此状态不再存在时不调用宏步骤结束时的活动配置。因此,无论您来自哪个州,都只能有一个调用者运行的单个实例。
然而,您可以做的是以父状态启动调用程序,并将其id作为#_target发送到onentry块中。您可以发送任意数量的事件,并将应用程序代码从调用者实例移动到事件接收。