Guten Morgen!
ich verzweifle an meinem Code und hoffe, dass hier einige erfahrene Programmierer mitlesen, die bei der Schilderung meines Problems ein Grinsen ins Gesicht bekommen und meinen Knoten im Kopf lösen
Ich habe eine PHP-Webseite in Entwicklung, die in der Folge einer Userhandlung zunächst ein Word-Dokument, bestehend aus 119 Feldern, durch einen MySQL-Abruf befüllt.
Dieses docx wird anschließend zu einem PDF geformt und in einem gesonderten Userverzeichniss abgelegt, damit der User das fertige "Produkt" online sieht.
So weit so gut. Ich habe mich dazu entschieden Java zu nutzen, um das Word zu befüllen, das PDF zu erstellen, die Datenbankabrufe durchzuführen und die fertige PDF in den speziellen Ordner des Webservers zu platzieren.
Das ganze Procedere läuft derzeit so ab:
1
das PHP-Skript schreibt die AuftragsID und den Pfad des "verschlüsselten" Userverzeichnisses in eine txt-Datei. (der Pfad variiertmit jeder neuen auftragsID)
2
Auf einem Windowsrechner läuft in einer Endlosschleife eine Java, dass auf solch eine txt-Datei wartet und verarbeitet.
3
die txt wird in ein gesondertes Verzeichnis verschoben, am Dateinamen inkrementiert und dann ausgelesen.
4
Anhand der AuftragsID wird ein Datenbankabruf gestartet und die Werte für die 119 Felder ausgelesen und in einem Array bereitgehalten.
5
per WordprocessingML wird nun ein docx-Template mit den Werten befüllt und mit der AuftragsID im Dateinamen gespeichert.
Anschließend wird ein batch (ja, ein Batch) erstellt, dass MS-Word aufruft und ein Makro startet.
6
Als Ergebnis erhält man ein fertiges PDF.
7
Nun läuft eine while-Schleife, die so lange läuft, wie keine(!) pdf existiert.
8
Sobald eine pdf gefunden, wird diese in das mitgeteilte Verzeichnis aus 1 gespeichert.
Schlussworte & Bitte
Das Java läuft sauber durch. Aber es hakt immer wieder an der Stelle, worin das pdf erstellt und dieses verschoben werden soll (6-7)
Sprich: wenn ich alle Programmabschnitte per Hand, sequentiel, durchfühe macht jedes brav sas, was es soll. Sobald das Java mit der Endlosschleife startet (2) kommt es zu unvorhersehbarem Verhalten.
Es ist seit einer Woche mein tägliches Ritual das Java morgens zu testen. An einem Tag läuft es sauber, an einem anderen Tag herrscht Chaos.
Dann produziert das Ding nur Datenmüll.
Ich sehe das Problem darin, dass mein Java zigtausend mal schneller in den Schleifen ist, als die Dateioperationen durchgeführt sind. Ich komme zu dem Schluss das ich mit den Schleifen so ein Verhalten hervorrufe und habe mich nun mit Threads und RaceConditions beschäftigt.
Ist mein geschilderter Sachverhalt ein klassisches Beispiel für den Einsatz von Threads?
Denke ich mit meinen vielen Schleifen und If-Conditions zu "analog"/"prozedural" ?
Ich verzweifle da echt... im Grunde muss ein Codeabschnitt stets abwarten, dass ein vorheriger Abschnitt ein Ergebnis produziert hat... was ist an meinem Denken so falsch?
ich verzweifle an meinem Code und hoffe, dass hier einige erfahrene Programmierer mitlesen, die bei der Schilderung meines Problems ein Grinsen ins Gesicht bekommen und meinen Knoten im Kopf lösen
Ich habe eine PHP-Webseite in Entwicklung, die in der Folge einer Userhandlung zunächst ein Word-Dokument, bestehend aus 119 Feldern, durch einen MySQL-Abruf befüllt.
Dieses docx wird anschließend zu einem PDF geformt und in einem gesonderten Userverzeichniss abgelegt, damit der User das fertige "Produkt" online sieht.
So weit so gut. Ich habe mich dazu entschieden Java zu nutzen, um das Word zu befüllen, das PDF zu erstellen, die Datenbankabrufe durchzuführen und die fertige PDF in den speziellen Ordner des Webservers zu platzieren.
Das ganze Procedere läuft derzeit so ab:
1
das PHP-Skript schreibt die AuftragsID und den Pfad des "verschlüsselten" Userverzeichnisses in eine txt-Datei. (der Pfad variiertmit jeder neuen auftragsID)
2
Auf einem Windowsrechner läuft in einer Endlosschleife eine Java, dass auf solch eine txt-Datei wartet und verarbeitet.
3
die txt wird in ein gesondertes Verzeichnis verschoben, am Dateinamen inkrementiert und dann ausgelesen.
4
Anhand der AuftragsID wird ein Datenbankabruf gestartet und die Werte für die 119 Felder ausgelesen und in einem Array bereitgehalten.
5
per WordprocessingML wird nun ein docx-Template mit den Werten befüllt und mit der AuftragsID im Dateinamen gespeichert.
Anschließend wird ein batch (ja, ein Batch) erstellt, dass MS-Word aufruft und ein Makro startet.
6
Als Ergebnis erhält man ein fertiges PDF.
7
Nun läuft eine while-Schleife, die so lange läuft, wie keine(!) pdf existiert.
8
Sobald eine pdf gefunden, wird diese in das mitgeteilte Verzeichnis aus 1 gespeichert.
Schlussworte & Bitte
Das Java läuft sauber durch. Aber es hakt immer wieder an der Stelle, worin das pdf erstellt und dieses verschoben werden soll (6-7)
Sprich: wenn ich alle Programmabschnitte per Hand, sequentiel, durchfühe macht jedes brav sas, was es soll. Sobald das Java mit der Endlosschleife startet (2) kommt es zu unvorhersehbarem Verhalten.
Es ist seit einer Woche mein tägliches Ritual das Java morgens zu testen. An einem Tag läuft es sauber, an einem anderen Tag herrscht Chaos.
Dann produziert das Ding nur Datenmüll.
Ich sehe das Problem darin, dass mein Java zigtausend mal schneller in den Schleifen ist, als die Dateioperationen durchgeführt sind. Ich komme zu dem Schluss das ich mit den Schleifen so ein Verhalten hervorrufe und habe mich nun mit Threads und RaceConditions beschäftigt.
Ist mein geschilderter Sachverhalt ein klassisches Beispiel für den Einsatz von Threads?
Denke ich mit meinen vielen Schleifen und If-Conditions zu "analog"/"prozedural" ?
Ich verzweifle da echt... im Grunde muss ein Codeabschnitt stets abwarten, dass ein vorheriger Abschnitt ein Ergebnis produziert hat... was ist an meinem Denken so falsch?