PDA

View Full Version : Job soll auf eine Beendigung warten



Seiten : [1] 2

mk
06-11-20, 08:01
Hallo zusammen,

ich suche z.zt. mal wieder eine Idee.

Folgendes Szenario.

Job B läuft im System als Loop Job der über eine DTAQ verschiedene arbeiten durchführt

Job A ( interaktiv oder Batch ) soll eine Exceldatei erstellen und erstellt die Anfrage
in der DTAQ für Job B.

Job B erstellt diese Exceldatei und soll das OK an Job A senden.

Dazu muss Job A auf die Beendigung warten.
Frage: Wie habt ihr solche Szenarien gelöst ?

Gruß
Michael

Andreas_Prouza
06-11-20, 09:00
Hallo Michael,

Ich habe das bei meinen Produkten immer so gelöst:

Job A sendet in die DTAQ von Job B folgenden Inhalt:
Name der Bibltiothek + Data Queue von Job A an dem die Antwort geschickt wird + die Daten selbst.

Wenn also in den ersten 20 Stellen des DTAQ-Eintrags Lib+Name stehen, sende ich einen Status zurück.

Du musst also, nachdem du die Daten an die DTAQ von Job B sendest, auf die eigene DTAQ horchen gehen.
Damit hast du die beste Performance und die beste Reaktionszeit.

lg Andreas

Fuerchau
06-11-20, 09:07
Nimm eine Keyed-DTAQ. Beim QRCVDTAQ kannst du einen Schlüssel angeben.
Der Batchjob empfängt die Daten mit Job-Nr. '000000' und sendet seine Antwort an Job NNNNNN.
Die Antwort-JobNr. muss natürlich in den Daten enthalten sein.
Der anfordernde Job warten dann mit seiner Job-Nr. als Key auf die Antwort.

Alternative 2 geht auch per MSGQ.
Für Dialogjobs kannst du auf die Display-MSGQ einen Break-Handler setzen.
Du sendest die Anfrage an den Batchjob und lässt den User anschließend weiterarbeiten.
Sobald die Batchaufgabe fertig ist, wird eine Break-Message an die MSGQ gesendet.
Der Breakhandler wird direkt aufgerufen, der aktive Job also unterbrochen, und du kannst dann das tun was du tun musst. Wird der Breakhandler verlassen, läuft das unterbrochene Programm einfach weiter.

Es gibt bestimmt noch mehr Wege.

Andreas_Prouza
06-11-20, 10:28
Bei der Data Queue muss man allgemein darauf achten, dass eventuell hängengebliebene Einträge zuvor herausgelesen werden müssen.
Wenn aus irgendeinem Grund das PGM vom Job A abstürzt und nochmals aufgerufen wird.
Dann würde in der DTAQ das Ergebnis vom vorherigen Aufruf enthalten sein.

Fuerchau
06-11-20, 10:30
Programmabsturz?
Wofür gibts eigentlich MONITOR-Gruppen und MONMSG (CLP/CLLE)?
;-)

Andreas_Prouza
06-11-20, 10:48
Na bei einem MONITOR oder was auch immer, hast du ja einen Absturzt und da würde der Eintrag in der DTAQ liegen bleiben ;-)

mk
06-11-20, 11:49
Hallo,

es ist auch noch eine Idee aufgekommen:

Job A sendet in die DTAQ läuft weiter und macht einen HLDJOB

Job B verarbeitet und macht einen RLSJOB A

Was haltet ihr davon ?
Gruß
Michael

mk
06-11-20, 11:52
Nimm eine Keyed-DTAQ. Beim QRCVDTAQ kannst du einen Schlüssel angeben.
Der Batchjob empfängt die Daten mit Job-Nr. '000000' und sendet seine Antwort an Job NNNNNN.
Die Antwort-JobNr. muss natürlich in den Daten enthalten sein.
Der anfordernde Job warten dann mit seiner Job-Nr. als Key auf die Antwort.

Alternative 2 geht auch per MSGQ.
Für Dialogjobs kannst du auf die Display-MSGQ einen Break-Handler setzen.
Du sendest die Anfrage an den Batchjob und lässt den User anschließend weiterarbeiten.
Sobald die Batchaufgabe fertig ist, wird eine Break-Message an die MSGQ gesendet.
Der Breakhandler wird direkt aufgerufen, der aktive Job also unterbrochen, und du kannst dann das tun was du tun musst. Wird der Breakhandler verlassen, läuft das unterbrochene Programm einfach weiter.

Es gibt bestimmt noch mehr Wege.

Frage:
Heißt das das ich nur eine DTAQ für alle Sender als Empfänger hätte ?

Andreas_Prouza
06-11-20, 11:55
Job A sendet in die DTAQ läuft weiter und macht einen HLDJOB

Job B verarbeitet und macht einen RLSJOB A

Interessanter Lösungsansatz.
Find ich persönlich weniger optimal den Jobstatus als Kommunikationsplattform zu benutzen. Außerdem benötigt dann der Job B auch entsprechende Rechte.
lg Andreas

Andreas_Prouza
06-11-20, 11:57
Frage:
Heißt das das ich nur eine DTAQ für alle Sender als Empfänger hätte ?
Du kannst bei Keyed DTAQ neben den Daten auch einen Key mitgeben.
Und zwar sowohl beim Senden als auch beim Empfangen.
Somit kannst du definieren, dass dein Job A und dein Job B die selbe DTAQ verwendet, aber mit unterschiedlichen Keys "horchen" gehen.
Dadurch brauchst du nicht mehrere DTAQs sondern kannst alles mit einer abbilden.