問題タブ [spring-statemachine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2295 参照

spring - Spring State マシンが複数のユーザーから同じイベントを受け入れない

Statesの単純なステート マシンがEventsありTransitionsます。

州:WIP, SUBMITTED, REJECTED, APPROVED

イベント:SUBMIT, APPROVE, REJECT

トランジション:

  1. SUBMIT イベントの SUBMITTED への WIP
  2. APPROVE イベントの APPROVED に SUBMITTED
  3. REJECT イベントの SUBMITTED から REJECTED

WIP以下のように初期状態として設定しました。

複数のユーザーがこのステート マシンと対話します。ソース状態とターゲット状態の組み合わせに対して同じイベントが複数回発生した場合、最初のイベントのみがステート マシンによって受け入れられ、後続のイベントは受け入れられません。

これはステート マシンからの有効な動作ですか? はいの場合、追加する必要がある追加の構成はありますか?

0 投票する
1 に答える
2401 参照

jpa - DDD および依存性注入コンテキストのエンティティのステート マシン?

Spring Boot を使用してマイクロサービスを開発し、多くの混乱した状態を解消する必要がある永続オブジェクトを開発する必要があるため、 Spring State MachineState の設計パターンを研究しており、そこからクリーンな設計ソリューションを探しています。混乱。DDD、状態の概念、状態マシンをチェックして、どれを適用するかを確認しました

いくつかの概念を実装する方法と、それらを接続する方法がわかりません。次の場合は、理解したいと思います。

  1. Spring State Machine は、遷移中のエンティティで機能しますか、それともグローバル アプリケーション状態レベルでのみ機能しますか?
  2. 複数のエンティティをそれぞれ独自の状態で管理するには、プロトタイプ スコープのコンポーネントとして作成する必要がありますか?
  3. State パターンと簡単に統合できますか、それとも一緒に使用すべきではありませんか?
  4. これを管理するには、ステートまたはステート マシンをエンティティに挿入する必要があります (実行可能であることはわかっていますが、 @Configurable と適切な AspectJ ウィービング構成を使用するという考えは好きではありません)。より複雑になる可能性があるという誰かの印象を共有します。@Scope("prototype")
  5. 代わりに、単一のエンティティが状態を変更するために、ドメイン サービスにエンティティごとに (つまり別のドメイン サービス) ステート マシンを委任することが可能である場合は? または、これは貧血ドメインのアンチパターンですが、もしそうなら、ステート マシンは DDD とどの程度うまく統合されますか?
  6. Spring State Machine を使用してやりたいことを実行できるようにする方法、それがどれほど軽量であるか、そしてそれがどれほど遅くメモリを消費するかについての例はありますか?

私はそれを得ました: - DDD は、単純なデータ オブジェクトよりも多くの機能を持つドメイン オブジェクトを望んでいます。これは、この非常に完全ですが、DDD に関する少し古い記事のようです- 状態パターンは、その特定のケースでコンテキスト要素がどのように動作するかをカプセル化する必要があります - 状態マシンは約ですある状態と別の状態の間の通過の管理をカプセル化する - それらが連携する必要がある場合、状態は特定のコマンドで次の状態を指示するのではなく、状態マシンのイベントを生成し、状態マシンが選択する (またはブロックする場合)失敗する Guard があります) 新しい状態 - どういうわけか、状態マシンによって新しい状態をコンテキストに設定する必要があります

通常、Context オブジェクトは State オブジェクトに直接委任する必要があります。しかし、ステート マシンがオブジェクトのステートの変更を決定するため、この場合、コンテキストは一種のプロキシ ステートに委任されるべきではないでしょうか? ステート マシンをエンティティまたはプロキシに注入する必要がありますか?

これらの質問のいくつかについて、考え、提案、部分的な回答をいただければ幸いです。

ところで私はただ

0 投票する
2 に答える
2388 参照

spring - Spring statemachine 2 つのステート マシン構成を持つ永続化レシピ

スプリング ステートマシンの Persist サンプルを 2 つの異なるステート マシン構成に拡張しようとしています。 http://docs.spring.io/spring-statemachine/docs/1.0.0.RELEASE/reference/htmlsingle/#statemachine-examples-persist

だから私は

  • 新しいスキーマを追加しました
  • テストデータを追加しました
  • Persist、PersistCommandのコードを複製し、それらを私のケースに適合させました

これまでのところ大したことはありません。次に、構成に進みます。

  • StateMachineConfig (および @EnableStateMachine アノテーション) を削除しました
  • StateMachineConfiguration を Bean として PersistHandlerConfig に追加し、Builder を使用する
  • その構成を複製し、それを私のユースケースに適合させました
  • 明らかに、私のケースの Order のようなクラスを作成しました

さらに、AbstractStateMachineCommands クラスを適応させ、そこにステートマシンのリストを自動配線しました。start/stop および state メソッドは、すべてのステート マシンの状態を開始/停止および出力するようになりました (ここでは、出力や変数は気にしません)。

発生する問題は次のとおりです。

  • 永続化は機能しなくなりました
  • アプリケーションと両方のステート マシンを起動できます
  • すべての persist 呼び出しと myUseCase 呼び出しを使用できますが、永続的なデータには取り組んでいません。
  • たとえば、永続化プロセス 1 を呼び出すと、アプリケーションは基になる SM の状態を PROCESSING に変更しますが、永続化されたデータは変更されません。
  • デバッグ中に、LifecycleObjectSupport で getTaskExecutor メソッドが null を返すことを解決できました (元の例では、Bean ファクトリは SyncTaskExecutor のインスタンスを返します)。
  • さらに、TestEventListener はどのステート マシンでも機能しなくなったようです。
  • ステート マシン Bean を含むいずれかの構成で @EnableStateMachine を使用すると、StateMachineConfiguration の afterPropertiesSet で NPE が発生します。

それで、誰か私がどこでそれを台無しにしたか教えてもらえますか? それとも、Persist レシピは 2 つのステート マシンには適用できないのでしょうか?

どうもありがとう。

コード例: Application.java には、次の構成とエンティティが含まれるようになりました。

TicketPersist.java と TicketPersistCommands.java は注文の場合と同じです (注文をチケットに置き換えただけです)。AbstractStateMachineCommands を次のように調整しました。

0 投票する
1 に答える
1465 参照

event-sourcing - スプリングステートマシンをイベントソーシングパターンと組み合わせることは可能ですか?

私の考えは、春のステートマシンによってドメイン オブジェクトの状態を追跡することです。つまり、statemachine は、ドメイン オブジェクトの状態を遷移する方法を定義します。イベントがイベント ストアとの間で永続化/復元されると、ステート マシンにイベントを送信することで、ドメイン オブジェクトの状態を (再) 生成できます。

ただし、ステート マシン オブジェクトの作成は比較的コストがかかるようです。ドメイン オブジェクトで状態遷移が発生するたびにステート マシン オブジェクトを作成するのはそれほど効率的ではありません。statemachine オブジェクトだけを維持すると、並行性の問題が心配になります。1 つのアプローチは、'statemachine-pool' を用意することですが、複数の異なるドメイン オブジェクトに対して statamachines を作成する必要がある場合は面倒です。

イベントソーシングパターンでスプリングステートマシンを適用するのは良い考えですか?

0 投票する
2 に答える
1350 参照

spring - Spring State Machine タスクの実行が起動しない

次のリファレンスで説明されている方法でランナブルを実行する際に問題が発生しています。

http://docs.spring.io/autorepo/docs/spring-statemachine/1.0.0.M3/reference/htmlsingle/#statemachine-examples-tasks

私の実装は次のようになります。

TaskExecutor の初期化は次のようになります。

dp (DataProcessor) のコードは次のようになります。

コードを実行すると、'in action..' と 'after action..' のメッセージが遅延なく表示されます..

以下を使用する場合:

TasksHandler を使用して期待する結果が得られます。

  • 状態が UNLOCKED に変更されました
  • スレッド 2 で... 10000 のスリープ
  • スレッド 3 で... 5000 のスリープ
  • スレッド 4 で... 8000 のスリープ
  • スレッド 5 で... 4000 のスリープ
  • スレッド 6 で... 4000 のスリープ
  • スレッド 1 で... 9000 のスリープ
  • 2016 年 1 月 13 日 12:32:13 PM - org.springframework.scheduling.concurrent.ThreadPoolTask​​Executor 初期化
  • 情報: ExecutorService を初期化しています
  • 状態が LOCKED に変更されました
  • スレッド5以降...
  • スレッド6以降...
  • スレッド 3 の後...
  • スレッド 4 の後...
  • スレッド 1 の後...
  • スレッド 2 の後...

TasksHandler を使用すると、スリープの遅延の前後のメッセージは表示されません。私の質問は、実際に実行可能ファイルを実行するにはどうすればよいですか?? 正しく実行している場合、何を確認すればよいですか?