{"id":576,"date":"2016-07-08T16:28:29","date_gmt":"2016-07-08T14:28:29","guid":{"rendered":"http:\/\/lukas.kurth.rocks\/blog\/?p=576"},"modified":"2016-07-08T16:28:29","modified_gmt":"2016-07-08T14:28:29","slug":"diese-veranstaltung-ist-geschlossen","status":"publish","type":"post","link":"https:\/\/lukas.kurth.rocks\/blog\/2016\/07\/08\/diese-veranstaltung-ist-geschlossen\/","title":{"rendered":"Diese Veranstaltung ist geschlossen"},"content":{"rendered":"<p style=\"text-align: justify;\">Hach ja, programmieren ist doch etwas sch\u00f6nes. Alles funktioniert ohne Probleme und keiner \u00fcbt 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&#8230;<\/p>\n<p style=\"text-align: justify;\">Scherz beiseite \ud83d\ude42<\/p>\n<p style=\"text-align: justify;\">Seit neuestem kriege ich ab und an eine\u00a0&#8222;<span style=\"color: #33cccc;\"><em>ClosedByInterruptException<\/em><\/span>&#8222;. Das kommt meistens daher, dass es Threads gibt die sich\u00a0alle gleichzeitig\u00a0f\u00fcr die gr\u00f6\u00dften 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).<\/p>\n<p style=\"text-align: justify;\"><!--more--><\/p>\n<p style=\"text-align: justify;\">Es gibt in diesem Betrieb (mehr als) einen Rechner, auf dem ein Etikettendruck-Programm l\u00e4uft. Palette f\u00e4hrt vor, F\u00f6rdertechnik und Schranken schicken Signale durchs lokale Netz und das Programm schickt die ben\u00f6tigten Daten an den Drucker. Damit er nun auch die richtigen Daten hat, m\u00fcssen diese aus dem ERP System an das Ger\u00e4t \u00fcbertragen werden. Dies geschieht unter anderem durch ERP System interne Scripts von meinem ehemaligen Chef und zum anderen durch ein Multi-Threading-Monster von mir.<\/p>\n<p style=\"text-align: justify;\">Ich verschicke so jedes Mal alle\u00a0Dateien die, mit bestimmten Extensions (*.txt, *.csv etc.) , in einen bestimmten Pfad geschoben werden,\u00a0dank einem eigens geschriebenen FileWatchers, an alle Ger\u00e4te die diese Daten ben\u00f6tigen. In diesem Fall also vor allem die Dateien mit den Artikel-Daten (Text-Datei).<\/p>\n<p style=\"text-align: justify;\">So viel zur Vorgeschichte \ud83d\ude1b<\/p>\n<p style=\"text-align: justify;\">Jetzt bekomme ich ganz sporadisch (weil man danach ja immer gut suchen kann) die &#8222;<span style=\"color: #33cccc;\"><em>ClosedByInterruptException<\/em><\/span>&#8222;. Die kann unter anderem daran liegen, dass der Server meine Versuche die Datei zu verschieben blockiert und ich dann in der Routine festh\u00e4nge (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).<\/p>\n<p style=\"text-align: justify;\">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:<\/p>\n<pre class=\"toolbar:2 wrap:true lang:java decode:true\">try (FileChannel source = new FileInputStream(pSrc.toFile()).getChannel();\r\n  FileChannel destination = new FileOutputStream(pDst.toFile()).getChannel()) {\r\n   while (source.read(buffer) != -1 || buffer.position() &gt; 0) {\r\n      buffer.flip();\r\n      destination.write(buffer);\r\n      buffer.compact();\r\n   }\r\n} catch (IOException e) { \/\/ including ClosedByInterruptException\r\n   logs.error(e.toString() + \" while buffering to \" + pDst.toFile().toString() + \": \" + Arrays.toString(e.getStackTrace()));\r\n}<\/pre>\n<p style=\"text-align: justify;\">Den StackTrace gebe ich nur aus Debug-Gr\u00fcnden zur\u00fcck. Werde den sp\u00e4ter wahrscheinlich wieder entfernen.<\/p>\n<p style=\"text-align: justify;\"><span style=\"color: #e0e0e0;\"><em>Ach und habt ihr schon einmal mit SFTP herumgespielt? Der &#8222;Failure 4&#8220; ist echt nervig. Ihr solltet verschiedene Abfragen und Ausgaben implementieren, damit ihr wisst bei welcher Operation er bei euch h\u00e4ngen geblieben ist.<\/em><\/span><\/p>\n<p>&nbsp;<\/p>\n<p>Eigentlich wollte ich ja noch etwas zu Annotations, Interfaces, Basis- und abstrakten Klassen schreiben, aber das hebe ich mir f\u00fcr einen anderen Tag auf&#8230; Cheerio \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hach ja, programmieren ist doch etwas sch\u00f6nes. Alles funktioniert ohne Probleme und keiner \u00fcbt 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&#8230; Scherz beiseite \ud83d\ude42 Seit neuestem kriege ich ab und an eine\u00a0&#8222;ClosedByInterruptException&#8222;. Das kommt meistens daher, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,5,17,9,13],"tags":[],"class_list":["post-576","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-it","category-java","category-programmierung","category-tips"],"_links":{"self":[{"href":"https:\/\/lukas.kurth.rocks\/blog\/wp-json\/wp\/v2\/posts\/576","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lukas.kurth.rocks\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lukas.kurth.rocks\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lukas.kurth.rocks\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lukas.kurth.rocks\/blog\/wp-json\/wp\/v2\/comments?post=576"}],"version-history":[{"count":10,"href":"https:\/\/lukas.kurth.rocks\/blog\/wp-json\/wp\/v2\/posts\/576\/revisions"}],"predecessor-version":[{"id":586,"href":"https:\/\/lukas.kurth.rocks\/blog\/wp-json\/wp\/v2\/posts\/576\/revisions\/586"}],"wp:attachment":[{"href":"https:\/\/lukas.kurth.rocks\/blog\/wp-json\/wp\/v2\/media?parent=576"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lukas.kurth.rocks\/blog\/wp-json\/wp\/v2\/categories?post=576"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lukas.kurth.rocks\/blog\/wp-json\/wp\/v2\/tags?post=576"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}