# Exception Handling bei In/Outputsockets in eigenen Threads



## Decline (17. Jun 2014)

Hallo

ich habe folgenden Aufbau:
Meine Application in der diverse Magie passiert und dem User über eine Benutzeroberfläche präsentiert wird. Die Genau Zusammenstellung ist für meine Frage nicht wirklich relevant.
2 seperate Threads die einen Input bzw. Output zu einer peripheren Hardware in form eines sockets bilden.

Die In und Outputs werden dazu benutzt um über ein Protokol zu kommunizieren. In den beiden Threads läuft ein infiniteloop der darauf wartet Nachrichten zu verarbeiten, um sie dann über AccessObjects der Application zur Verfügung zu stellen.

Soweit so gut, und es funktioniert alles tadelos, allerdings frage ich mich gerade wie ich IOExceptions bzw. Socketexceptions in diesen Threads handeln soll.

Ich sehe hier 3 Möglichkeiten.
1) Implizite Lösung mit den AccessObjects. Jedes mal wenn ich eine Nachricht schicke überprüfe ich ob der socket noch am Leben ist. Wenn nicht teile ich das dem User mit. Beim Output habe ich es so gelöst, da ich sofort mitbekomme wenn etwas nicht in Ordnung ist, da die Kommunikation von meiner Seite aus initiert wird. Beim Input habe ich allerdings das Problem dass ich grundsäztlich auf Nachrichten eines bestimmten Types warte, um die sich dann verschiedene Komponenten kümmern.
Es gibt allso kein allgemeines Timeout da es auch im Betriebsfall sein kann das nicht laufend Nachrichten kommen.
Ich könnte das Problem mit diesem Ansatz lösen, allerdings würde mich interessieren ob eine der folgenden Lösungen nicht vielleicht besser ist. Im wesentlichen würde ich mir damit den ExceptionHandling code an vielene Stellen ersparrren, da ich die Exceptions dann an einer stelle verarbeiten könnte.

2) ich starte einen zusätzlichen Monitorthread der alle x sekunden überprüft ob die beiden Threads noch arbeiten.

3) ich baue den beiden Kommunikationsthreads Listener ein, über die die Mainapplication über Zustandsänderungen informiert werden kann. Dazu noch eine Zusatzfrage. Ist es zulässig zwischen verschiedenen Threads mithilfe von Listenern zu kommunizieren? In den meisten nebenläufigen Anwendungen wäre diese Lösung ja sowieso inpraktikabel da die Kommunikation laufend erfolgen muss. Aber in meinem Fall will ich eigentlich nur dem User über den Status der Sockets unterrichten, weshalb ich mir denke das es zumindest eine Lösung wäre die man in betracht ziehen könnte.

Ich hoffe ich habe die Problematik verständlich beschrieben.
Danke für allfällige Antworten

mfg
Decline


----------



## Rock45 (27. Jun 2014)

Ist das Problem denn noch aktuell?

So ganz verstehe ich es leider nicht. Tut mir Leid.


1.
Alles was du brauchst ist eine TCP Verbindung zwischen den Teilnehmern. Java nimmt dir da alles ab. Die Frage ob die Verbindung noch steht bzw. auf einer Seite offen oder geschlossen ist. Du kannst ein entsprechendes Objekt auf Serverseite erstellen, dieses an den Input schicken, welches mit den vorgepackten Daten anstellen kann, was du willst.
Wenn du den Code für Exception Handlung nicht haben willst, dann musst du die Exceptions eben so lange an einen Aufrufer weiter geben, bis die "zentrale Sammelstelle" für Exceptions erreicht ist. 

2.
Die Threads laufen so lange wie du es willst. Du kannst bestimmen wann sie aus welchen Gründen unterbrochen, oder wieder aufgenommen werden. 
Allgemein halte ich (persönlich) sowieso gar nichts von Zufalls Lösungen ala "ich guck ab und zu mal ob alles noch läuft". 

3.
Lange Antwort ja mit einem wenn, kurze Antwort nein, mit einem aber. 

Letztlich gehts dir ja (glaube ich) um: "Aber in meinem Fall will ich eigentlich nur dem User über den Status der Sockets unterrichten"

Die Klasse Socket, mit der du das realisierst, bietet dir dafür die Möglichkeiten.


Ansonsten meld dich halt noch mal, aber so ganz werd ich aus deiner Denke nicht schlaue, sorry


----------

