PDA

View Full Version : SRVPGM + PGM



KM
25-09-03, 08:11
Hallo,

ich habe da noch ein Verständnisproblem beim Zusammenspiel von *SRVPGM und *PGM. Ich habe z.B. ein MODULE erstellt und daraus dann ein SRVPGM mit CRTSRVPGM. Dieses SRVPGM habe ich mit einem PGM gebunden über den Befehl CRTPGM im Parameter BNDSRVPGM. Mir wurde bis jetzt immer gesagt, dass man das PGM nicht mehr aktualisieren muß (UPDPGM), wenn man das SRVPGM geändert hat, sondern die Änderung automatisch aktiv wird. Dies trifft in meinem Fall leider nicht zu. Ich habe das SRVPGM geändert und das PGM ruft immernoch die alte Version des SRVPGM auf. Habe ich nun einen Denkfehler oder mache ich irgendwas falsch ???

Danke,
KM

Flappes
25-09-03, 10:57
Hallo

Wird dein SRVPGM mit *INLR oder *INRT beendet? Wenn es mit *INRT beendet wird, bleibt es ja noch im Hauptspeicher stehen. Dann musst du nach der Programmerstellung noch ein RCLACTGRP *ELIGIBLE machen, dann lädt er sich das SRVPGM wieder neu in den Speicher. Wenn du das Modul neu erstellst, musst du auch logischerweise das SRVPGM neu erstellen oder einfach nur updaten. Von alleine passiert das nicht.
Du kannst das mit dem Befehl DSPSRVPGM SRVPGM(XXX) kontrollieren. Bei den Modulen steht auch drin welche Version sprich Datum das Modul hat welches momentan reingelinkt ist.

gruss christian

B.Hauser
25-09-03, 11:11
Hallo KM,

Wird ein Modul in ein Service-Programm eingebunden, müssen die rufenden Programme nicht neu erstellt werden.
Zum Compile-Zeitpunkt wird die eindeutige Signatur des Service-Programms in das Programm-Objekt eingebunden.

Zur Aktivierungs-Zeit (1.Aufruf) wird über die Signatur das Service-Programm aufgelöst und in den Speicher geladen.

Ich vermute, dass hier Dein Problem liegt.
Vermutlich hast Du das Service-Programm mit Aktivierungs-Gruppe *CALLER erstellt (Unterlassungs-Wert)

Das rufende Programm war bereits aufgerufen und die zugehörige Aktivierungs-Gruppe wurde nicht beendet.
(RCLACTGRP).
Vermutlich läuft das rufende Programm sogar in der Default-Aktivierungs-Gruppe.
In dieser Aktivierungs-Gruppe laufen alle OPM-Programme. Ausserdem ist Default-Aktivierungs-Gruppe auch Unterlassungs-Wert beim CRTBNDRPG.
Die Standard-Aktivierungs-Gruppe wird bei Jobstart gestartet und erst durch Job-Ende beendet.

Bevor das neue Service-Programm "automatisch aktiv" wird, muss die Aktivierungs-Gruppe beendet werden.
Am einfachsten durch Ab- und erneutes Anmelden.

Birgitta

KM
25-09-03, 11:12
Hallo Christian,

das Programm wird weder mit LR noch mit RT beendet, denn es handelt sich um ein NOMAIN-Modul (H-Bestimmung).
Das SRVPGM habe ich natürlich mit UPGSRVPGM aktualisiert. Das hatte ich vorhin schon geschrieben. Es geht nur darum warum das PGM noch auf die alte Version des SRVPGMs zugreift, obwohl schon eine neue Version existiert. Ich habe zuvor auch schon alle alten Versionen aus der QRPLOBJ gelöscht. Den RCLACTGRP *ELIGIBLE habe ich vorher auch schon ausgeführt. Hat alles nichts gebracht. Die neue Version des SRVPGM wurde erst nach dem UPDPGM aktiv. Woran kann das liegen ?

Gruß,
KM

B.Hauser
25-09-03, 11:21
Hallo KM,

wenn das rufende Programm nicht in der Default-Aktivierungs-Gruppe gelaufen ist und Du RCLACTGRP *ELIGIBLE ausgeführt hast, trifft vielleicht das Folgende zu.

In dem Service-Programm sind mehrere Prozeduren, die exportiert werden können.
Es wurde eine neue Prozedur hinzugefügt.
Das Service-Programm wurde mit EXTPORT *ALL erstellt und keine Export-Quellen-Datei verwendet.

In diesem Fall wird für das Service-Programm eine neue Signatur erstellt und Du musst leider die Programme neu erstellen.

Aus diesem Grund mache ich immer das folgende.
1 Prozedur = 1 Service-Programm
Das Service-Programm in ein Binderverzeichnis eintragen
Das Binder-Verzeichnis in den H-Bestimmungen hinterlegen (oder beim CRTPGM bzw. CRTSRVPGM angeben.

Bisher hatte ich damit keinerlei Schwierigkeiten.

Birgitta

KM
25-09-03, 12:02
Hallo Birgitta,

sowohl das SRVPGM als auch das PGM wurde mit ACTGRP *CALLER erstellt. Das SRVPGM beinhaltet nur eine Prozedur, die mit EXPORT exportiert wird. Die Signatur des SRVPGM stimmt mit der Signatur im PGM überein. Das dürfte also nicht das Problem sein. Ich hatte mich auch schon mal ab- und wieder angemeldet. Aber das hat auch nicht geholfen. Weißt Du sonst noch einen Rat ?

Danke,
KM

KM
25-09-03, 12:44
Hallo,

jetzt habe ich doch noch herausgefunden wie ich gleich auf die neue Version des SRVPGMs zugreifen kann. Ich habe das SRVPGM jetzt nochmal komplett neu erstellt mit CRTSRVPGM. Beim direkten Aufruf des PGM wurde zwar noch auf die alte Version zugegriffen. Als ich mich dann ab- und wieder angemeldet habe, hat es nun seltsamerweise funktioniert. Der RCLACTGRP *ELIGIBLE hat dabei genauso wenig gebracht wie das Löschen der alten Objekte aus QRPLOBJ. Sondern ich musste mich wirklich ab- und wieder anmelden. Das hat mich nun schon ziemlich verwirrt.

Gruß,
KM

B.Hauser
25-09-03, 17:09
Hallo KM,

da sowohl das rufende Programm als auch das Service Programm mit Aktivierungs-Gruppe *CALLER umgewandelt wurden,
muss ein vorgelagertes Programm die Aktivierungs-Gruppe definieren.

Laufen die Programme in der Default-Aktivierungs-Gruppe, musst Du Dich an und wieder abmelden.
Default-Aktivierungs-Gruppen können nicht mit RCLACTGRP geschlossen werden.
Die beiden Default-Aktivierungs-Gruppen werden bei Job-Start automatisch gestartet und bei Job-Ende beendet.
RCLRSC gibt nur die Ressourcen für die OPM-Programme frei.

Wir haben dieses Dilemma wie folgt gelöst.
In Programme werden nur Module umgewandelt, die aus dem Menü, von der Befehlszeile oder über einen Submit Job aufgerufen werden.
Diese Programme bekommen eine benannte Aktivierungs-Gruppe (Aktivierungs-Gruppe = Programm-Name)
Alle anderen Module werden in Service-Programme mit Aktivierungs-Gruppe *CALLER umgewandelt.

Birgitta

KM
26-09-03, 07:52
Hallo Birgitta,

jetzt wird mir einiges klarer. Ich habe das mal so ausprobiert wie Du es beschrieben hast, nämlich dem rufenden Programm eine ACTGRP gegeben (= Programmname). Jetzt war auch der RCLACTGRP erfolgreich und ich konnte direkt danach auf die neue Version des SRVPGMs zugreifen.

Vielen Dank für Deine Hilfe und die ausführliche Beschreibung.

Gruß,
KM