2016-11-25 6 views
0

私は、SpringクライアントにSpring State Machineを使用することを考えています。プロトコル自体は、メッセージIDと長さフィールドを持つ独自のTCPメッセージに基づいています。クライアントは、サーバーへのTCP接続をセットアップし、メッセージを送信し、次のメッセージを送信する前に常に応答を待ちます。各状態では、特定の応答のみが許可されます。複数のクライアントを並行して実行する必要があります。Spring State Machineでグローバルリソースを処理する方法は?

ここで、Spring State Machineに関連する次の質問があります。

1)切断から接続への最初の移行中に、クライアントはjava.net.Socket経由で接続を設定します。このソケット(またはソケットから取得したDataOutputStreamオブジェクトとBufferedReaderオブジェクト)を他のトランジションのアクションで使用できるようにするにはどうすればよいですか?

この意味では、ソケットは状態マシンの何らかの種類のグローバルリソースです。これまで私が見てきた唯一の方法は、メッセージのヘッダーに入れることです。しかし、これは非常に自然に見えません。

2)Spring State Machineにはどのランタイム環境が必要ですか?

JVMが十分か、Tomcatが必要ですか?

スレッドセーフですか?

おかげで、ヴォルフガング

答えて

0
  1. ありイベントヘッダを使用して何も間違ってはいませんが、ヘッダーのみイベント処理の期間中に存在するものは、本当にグローバルリソースではありません。私はマシンのextended stateに必要なオブジェクトを追加しようとしていますが、これはすべてのアクションで利用できます。
  2. JVMだけが必要です。デフォルトでは、マシンの実行は同期的であるため、スレッドの問題は発生しません。 Docsには、基本となるエグゼキュータを非同期に置き換えたい場合にメモがあります(これは通常、複数の並行リージョンが使用されている場合に行われます)。
+0

こんにちはJanne、ご返信ありがとうございます。実際、グローバルリソースに関しては、私はポーズ直後に拡張状態を使用するように切り替えました。それは期待どおりに動作します。おめでとう、ヴォルフガング – WolfgangB

関連する問題