Hallo zusammen,

ich habe folgendes Problem.

Programm 1 (CLP) macht einen STRCMTCTL LCKLVL(*CHG) CMTSCOPE(*JOB)
Programm 1 ruft im Anschluss Programm 2 (RPGLE) auf
Programm 2 macht verschieden UPDATES auf Dateien die unter COMMIT laufen und kehrt zurück
Programm 1 macht COMMIT
Programm 1 ruft jetzt Programm3 (CLP) auf
Programm 3 versucht zunächst einen STRCMTCTL LCKLVL(*CHG) CMTSCOPE(*ACTGRP) der ja nicht ausgeführt wird da bereits ein STRCMTCTL ausgeführt wurde.
Programm 3 ruft jetzt Programm4 (RPGLE) auf
Programm4 macht mehrere UPDATES und bricht dann aber wegen Fehler ab. Die *PSSR wird mit ENDSR RETURN (RETURN=*CANCL) beendet so dass er im Programm3 einen MONMSG erhält.
Programm3 fragt mit MONMSG ab ob das Programm abgebrochen ist und macht dann einen ROLLBACK und einen ENDCMTCTL (ich weiß, das ist nicht sauber, denn der ENDCMTCTL in dem Programm sollte ja nur gemacht werden wenn das Programm einen STRCMTCTL macht)

So jetzt aber das Problem. Der ENDCMTCTL stürzt ab weil er sagt dass er offene COMMIT-Sätze hat. Warum fährt er beim ROLLBACK, der genau 2 Anweisungen zuvor war, nicht alles sauber zurück?

PHP-Code:
Die Aufrufebene oben ist so
PGM 1 STRCMTCTL
  PGM 2  updates
PGM 1 COMMIT
  PGM 3
    PGM 4  Änderungen und Abbruch
  PGM 3 ROLLBACK
  PGM 3 ENDCMTCTL 
<- Absturz wegen offener COMMITS 
Habe ich ein Problem damit dass PGM2 zwar mit *LR beendet wird und somit die Datei eigentlich zu schliessen hat, dies aber nicht macht weil erst im CL der COMMIT durchgeführt wird? Somit die Datei immer noch offen ist bzw. für COMMIT zurgeordnet ist und PGM3 deshalb keinen ENDCMTCTL machen darf sondern dies nur PGM1 machen darf?

Ich habe keine Ahnung :-)

Viele Grüße Harald