0

短い: Papyrus で階層型 (ネストされた) ステートマシン UML ダイアグラムを作成し、それを使用して動作するステートマシン インスタンスを構築することは可能ですか?

説明:

ドキュメントのように、ネストされた状態のない単純な例は正しく機能しています。

ネストされた状態を作成するには、次の 2 つの方法を試しました。

  1. メインマシンで状態を作成し、別のサブマシンをそれにリンクします (プロパティ -> サブマシン)
  2. 単一のステート マシンですべてを作成し、サブステートでステートを作成する

どちらの場合も、作成された Spring ステートマシンはサブマシンの状態を認識しません。

このコードを使用して、アプリケーション内のすべての状態を一覧表示すると:

public List<String> getAllStates() {
    List<String> list = new ArrayList<>();
    Collection<State<String, String>> states = machine.getStates();
    for (State state : states) {
        Collection<State<String, String>> substates = state.getStates();
        for (State<String, String> substate : substates) {
            list.add(substate.getIds().toString());
        }
    }
    return list;
}

では、INITIALIZATION と PROCESSING の 2 つの状態のみがリストされています。イベントを送信すると、マシンは [PROCESSING, PREPARATION] ではなく、INITIALIZATION から PROCESSING に入ります。

何か間違ったことをしていますか、それとも Spring Statemachine によって実装されていないことをしようとしていますか? つまり、UML ダイアグラムから単一レベルのステート マシンしか作成できないのでしょうか?

編集:

この質問を読んで、spring-statemachine にこのオプションがあることを保証してくれた Janne Valkealahti に感謝します。

結局のところ、それは私のせいだったようですが、どこでどのように行われたかはわかりません(いくつかの同様の図が作成/編集されましたが、成功しませんでした)。昨日発生した Fedora 24 での Papyrus / Eclipse の警告とエラーに関連している可能性があります。今日、ゼロから新しい図を作成した後、すべてが期待どおりに機能しています。これは、ステート マシンがすべてのステートとサブステートをリストする新しい作業図です。

4

1 に答える 1

0

サブマシンのリンクはまだ機能していませんが、UML サブステート マシンのサポート #121で機能しています。

試したように、サブステートは単一のマシン内で構成する必要があります。この Uml テスト ソースはsimple-submachine.umlにあります。UML xml を投稿すると、明らかな不足があるかどうか (または 3 つのパピルス ファイル、di、表記法、uml をすべて配置) をどこかに (おそらく github gist) 見つけて、パピルスで開くことができます。

于 2016-08-03T07:51:04.393 に答える