2016-11-25 3 views
0

Ich denke daran, Spring State Machine für einen TCP-Client zu verwenden. Das Protokoll selbst ist gegeben und basiert auf proprietären TCP-Nachrichten mit Nachrichten-ID und Längenfeld. Der Client richtet eine TCP-Verbindung zum Server ein, sendet eine Nachricht und wartet immer auf die Antwort, bevor er die nächste Nachricht sendet. In jedem Zustand sind nur bestimmte Antworten zulässig. Mehrere Clients müssen parallel ausgeführt werden.Wie behandelt man globale Ressourcen in Spring State Machine?

Jetzt habe ich die folgenden Fragen im Zusammenhang mit Spring State Maschine.

1) Während des ersten Übergangs von getrennt zu verbunden baut der Client eine Verbindung über java.net.Socket auf. Wie kann ich diesen Socket (oder die DataOutputStream und BufferedReader-Objekte aus dem Socket bekommen) für die Aktionen der anderen Übergänge verfügbar machen?

In diesem Sinne wäre der Socket eine Art globale Ressource der Zustandsmaschine. Die einzige Möglichkeit, die ich bisher gesehen habe, wäre, sie in die Kopfzeilen der Nachricht einzufügen. Aber das sieht nicht sehr natürlich aus.

2) Welche Laufzeitumgebung brauche ich für Spring State Machine?

Ist eine JVM ausreichend oder benötige ich Tomcat?

Ist es threadsicher?

Danke, Wolfgang

Antwort

0
  1. Es ist nichts falsch Ereignis-Header verwenden, aber die sind nicht wirklich globale Ressourcen als Header nur für die Dauer einer Ereignisverarbeitung bestehen. Ich würde versuchen, benötigte Objekte in eine Maschine extended state hinzufügen, die dann für alle Aktionen verfügbar ist.
  2. Sie brauchen nur JVM. Bei der Standardausführung der Maschine ist die Ausführung synchron, daher sollten keine Threading-Probleme auftreten. Dokumente haben Notizen, wenn Sie den zugrunde liegenden Executor asynchron ersetzen möchten (dies geschieht normalerweise, wenn mehrere gleichzeitige Regionen verwendet werden).
+0

Hallo Janne, danke für deine Antwort. In der Tat, für die globalen Ressourcen habe ich kurz nach meiner Pose den erweiterten Zustand aktiviert. Das funktioniert wie erwartet. Beste Grüße, Wolfgang – WolfgangB

Verwandte Themen