2016-11-13 9 views
0

私は再試行および最大試行機能を構築したい状態マシンを作ろうとしています。私はこれまで説明しましたが、これまで私はこれを持っています:enter image description here SAVEDから、私はVALIDATEDに行きたいと思いますが、エラーがある場合はAWAITING_VALIDATION状態にしてください。 3分後、再度VALIDATED状態にしてください。ステートマシンで再試行および最大試行

  1. 再試行メカニズムを正しく設定しましたか?
  2. 3つのアテンプの後、私はSAVED状態(そして状態マシンを一時停止)に戻したいと思います。 (バネ状態マシンを使用して)それを可能な限り行うか、何らかのキャッシュを使用して手動で行う必要がありますか?

ご協力いただきありがとうござい

答えて

1

があり、別のマシン構成でこれらの事を行うには多くの方法は、おそらくですが、これは、私はそれにいくつかの時間を過ごすために望んでいたように明確に提示guestionである、と述べました。

あなたは近くにいて、これを実現するためにいくつかのことを忘れてしまった(私はトリックと言っています)。答えはextended state variablesを使用してメモリをマシンに追加することです。これらの変数は、通常、マシンが何をする必要があるかを表すために必要な数を制限するために使用されます。 3つのループが必要であり、必要に応じて各ループを表現するために、より多くの状態を作成し、(特定のガードを持つ)遷移を作成できます。しかし、これは、10または20または100+などのループがさらに必要な場合は、単に状態構成を爆発させます。

extended state variablesと異なるguardsactionsがどのようにこの特定のフローを駆動するのかを示すssm-sample3に例を作成しました。

残念ながらあなたはガードを持つ匿名の移行を使用してVALIDに一時停止するまで、あなたが直接HAS_ERROR接合部とループにAWAITING_VALIDATIONからの移行を防ぎ、現在1.1.1.RELEASEのバグ(サンプルがあるダミーTMP状態を持っている理由ですがあります1.2.xでは不要です)。

これはおそらく私がrefドキュメントに例またはfaqとして追加したいものです。

これが役立つかどうかはわかりません。

+0

ありがとう、あなたの努力に感謝します。私は今日見て、あなたに戻ってきます – Rapster

+0

どのバージョンのPapyrusを使っていますか?私が見ることができないいくつかのことがあり、すべてのラベルは典型的にトランジションに設定されています。私はPapyrus 2.0.1を使用しています – Rapster

+0

これはパピルス1.1.4とありました。 2.0.0はまた、Trigger-> SignalEvent-> Signalから直接外部遷移名を取得します。 2.0.1ではそれはできません。手動でトランジションを行う必要があります。内部遷移がシグナルからその名前を取得すると考えられるので、実際に2.0.1を試したときにこれが昨日気付いたのは、1.1.4/2.0.0に内部移行が影響を与える場合(2.0.1で修正されている)NPEのバグがあるからです。 –