2014-07-07 41 views
0

我已經使用Apache commons SCXML來維護項目中的狀態機。我們已經使用調用者執行一些活動,只要過渡到定義調用者的狀態即可執行。如何在apache commons中的相同狀態再次調用Invoker SCXML

問題在調用者從相同狀態調用兩次時即將到來。例如,從狀態「A」 事件「TEMP」被觸發,然後它移動到狀態「B」。一旦進入狀態「B」,調用者被調用並且調用Invoker類的回調方法invoke()。當事件「TEMP」再次從A國發射,然後祈求是沒有得到所謂的

<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> 

問題來了。 invoke()方法永遠不會再被調用。調用者只能被調用一次嗎?

請讓我知道如何再次調用invoker/invoke()。我在互聯網上沒有得到太多的幫助。

在此先感謝。

回答

0

我不確定apache-commons實現的細節,但SCXML規範要求調用者在包含狀態處於macrostep結尾的活動配置中時被調用,並且當此狀態不再時被取消調用在macrostep結尾處的活動配置中。因此,無論您來自哪個州,只能有一個調用者正在運行的單個實例。

但是,您可以做的事情是在父狀態下啓動調用者,並使用其ID作爲#ontartry塊中的#_target發送事件。您可以根據需要發送儘可能多的事件,並將您的應用程序代碼從調用者實例化移至接收事件。

相關問題