Diese Veranstaltung ist geschlossen

Hach ja, programmieren ist doch etwas schönes. Alles funktioniert ohne Probleme und keiner übt Druck auf einen aus beispielsweise um etwas zu beheben, was einwandfrei funktioniert. Alles harmoniert und ich liege faul auf dem Sofa und lass die Gedanken schweifen…

Scherz beiseite 🙂

Seit neuestem kriege ich ab und an eine „ClosedByInterruptException„. Das kommt meistens daher, dass es Threads gibt die sich alle gleichzeitig für die größten halten. Fast wie so ein Kollege von mir, aber das ist ein anderes Thema. In meinem Fall tritt es bei Dateioperationen auf (beim Threading immer eine schwierige Geschichte).

Es gibt in diesem Betrieb (mehr als) einen Rechner, auf dem ein Etikettendruck-Programm läuft. Palette fährt vor, Fördertechnik und Schranken schicken Signale durchs lokale Netz und das Programm schickt die benötigten Daten an den Drucker. Damit er nun auch die richtigen Daten hat, müssen diese aus dem ERP System an das Gerät übertragen werden. Dies geschieht unter anderem durch ERP System interne Scripts von meinem ehemaligen Chef und zum anderen durch ein Multi-Threading-Monster von mir.

Ich verschicke so jedes Mal alle Dateien die, mit bestimmten Extensions (*.txt, *.csv etc.) , in einen bestimmten Pfad geschoben werden, dank einem eigens geschriebenen FileWatchers, an alle Geräte die diese Daten benötigen. In diesem Fall also vor allem die Dateien mit den Artikel-Daten (Text-Datei).

So viel zur Vorgeschichte 😛

Jetzt bekomme ich ganz sporadisch (weil man danach ja immer gut suchen kann) die „ClosedByInterruptException„. Die kann unter anderem daran liegen, dass der Server meine Versuche die Datei zu verschieben blockiert und ich dann in der Routine festhänge (ganz schlecht, denn so wird ein synchronize-lock auf die Datei geschrieben und selbst ich kriege die Datei dann nur noch durch einen Programm-Neustart).

Damit dies nicht passiert (vor allem wenn ich gar nicht da bin und meine Kollegen keine Ahnung haben :P) fange ich dies mit einer try-with-resource Anweisung ab:

Den StackTrace gebe ich nur aus Debug-Gründen zurück. Werde den später wahrscheinlich wieder entfernen.

Ach und habt ihr schon einmal mit SFTP herumgespielt? Der „Failure 4“ ist echt nervig. Ihr solltet verschiedene Abfragen und Ausgaben implementieren, damit ihr wisst bei welcher Operation er bei euch hängen geblieben ist.

 

Eigentlich wollte ich ja noch etwas zu Annotations, Interfaces, Basis- und abstrakten Klassen schreiben, aber das hebe ich mir für einen anderen Tag auf… Cheerio 😉

Schreibe einen Kommentar