Commons SCXML-特定の状態への力ジャンプ
-
29-09-2019 - |
質問
使ってます Apache Commons SCXML, 、そして、州のマシン(SCXMLEXECUTOR)に特定の状態にジャンプするように伝えることができるかどうかを知りたいと思います。
使用できません initialstate
属性、私は状態マシンを回復させたいので(つまり、電力障害から)、私が持っている唯一のものは最後の状態です。だからこそ、私は州のマシンに直接ジャンプするように言うことを考えていました。
解決
一般的なケースでは、州のマシンがそれを「気づかない」ことなく州にジャンプすることは本当に悪い考えです。 「通常」)方法。より良いアイデアは、入力「再起動」イベントとして実装された「再起動」機能と、それを処理するために必要な状態と移行を備えた「再起動」機能を備えた状態マシンを設計することです。
他のヒント
これは古い質問ですが、私はこれを見つけただけで、それに対する答えも必要であり、他の人がそれに答えるのに役立つかもしれないと考えました。私はこれをユニットテストの一部として使用しています。特定の状態に到達するだけで非常に便利です(状態Aで、一連のイベントが発生した場合、それは状態Bに行き、まだ行くことを確認したいステートマシンXMLをいじくり回した後!)
私はついにこのコードをscxmltesthelperで見つけました、そしてそれはうまくいきました。執行者と宛先状態でそれを呼び出すだけです。
public static void setCurrentState(SCXMLExecutor exec, final String id) throws IllegalArgumentException{
try {
exec.reset();
} catch (ModelException me) {
throw new IllegalArgumentException("Provided SCXMLExecutor "
+ "instance cannot be reset.");
}
TransitionTarget active = (TransitionTarget) exec.getStateMachine().
getTargets().get(id);
if (active == null) {
throw new IllegalArgumentException("No target with id '" + id
+ "' present in state machine.");
}
Set current = exec.getCurrentStatus().getStates();
current.clear();
current.add(active);
}
所属していません StackOverflow