PDA

View Full Version : MSGQ als PGM Schalter



Techniker
08-09-08, 17:05
Hi

ich versuche gerade eine MSGQ die ich erstellt habe als Programm Schalter zu verwenden.

Also ich habe eine Queue Namens xyz erstellt und dann CHGMSGQ angepasst
CHGMSGQ MSGQ(XYZ) DLVRY(*BREAK) SEV(0) PGM(LIB/PGM)

Jetzt habe ich gedacht, dass sobald eine Nachricht in die MSGQ xyz eigeht das Programm PGM in der Bibliothek Lib ausgeführt wird. Aber das klappt nicht. Liege ich da falsch?

:confused:

BenderD
08-09-08, 17:43
das sollte wohl funzen, kriegst du da eine Fehlermeldung, oder wie stellst du das fest?

D*B


Hi

ich versuche gerade eine MSGQ die ich erstellt habe als Programm Schalter zu verwenden.

Also ich habe eine Queue Namens xyz erstellt und dann CHGMSGQ angepasst
CHGMSGQ MSGQ(XYZ) DLVRY(*BREAK) SEV(0) PGM(LIB/PGM)

Jetzt habe ich gedacht, dass sobald eine Nachricht in die MSGQ xyz eigeht das Programm PGM in der Bibliothek Lib ausgeführt wird. Aber das klappt nicht. Liege ich da falsch?

:confused:

Techniker
08-09-08, 18:00
Also ich bin schon etwas schlauer.

Mann Benötigt ein CL welches die MSGq Alocated in etwa so:

PGM
DLTMSGQ MSGQ(lib/msgq)
MONMSG MSGID(CPF2105)
CRTMSGQ MSGQ(lib/msgq)
CHGMSGQ MSGQ(lib/msgq) DLVRY(*BREAK) +
SEV(0) PGM(lib/pgm *ALWRPY)
ALCOBJ OBJ((lib/pgm *MSGQ *EXCL))
DLYJOB RSMTIME(220000)
ENDPGM


und wenn man dann etwas in die MSGQ schickt wird das CL ausgelöst welches mann hinterlegt hat.

Soweit die Theorie.

Aber wenn ich eine Nachricht in die Que schicke meldet mir das PGM vollgendes:

Anzahl Parameter bei Programm für Durchbruchnachrichten pgm in
lib Nachrichtenwarteschlange msgq in lib nicht
gültig.

Techniker
08-09-08, 18:01
Ursache . . . . : Bei allen Programmen für Durchbruchnachrichten müssen drei
Parameter angegeben werden: Warteschlange, Warteschlangenbibliothek und
Nachrichtenmarkierung.
Fehlerbeseitigung: Die richtige Anzahl Parameter angeben, umwandeln und
Anforderung wiederholen.

BenderD
08-09-08, 20:23
den ALCOBJ brauchts nicht, Parameter müsssen freilich stimmen; ein Beispiel findest du hier:
http://www.bender-dv.de/Sourcen/QCLSRC.M



Also ich bin schon etwas schlauer.

Mann Benötigt ein CL welches die MSGq Alocated in etwa so:

PGM
DLTMSGQ MSGQ(lib/msgq)
MONMSG MSGID(CPF2105)
CRTMSGQ MSGQ(lib/msgq)
CHGMSGQ MSGQ(lib/msgq) DLVRY(*BREAK) +
SEV(0) PGM(lib/pgm *ALWRPY)
ALCOBJ OBJ((lib/pgm *MSGQ *EXCL))
DLYJOB RSMTIME(220000)
ENDPGM


und wenn man dann etwas in die MSGQ schickt wird das CL ausgelöst welches mann hinterlegt hat.

Soweit die Theorie.

Aber wenn ich eine Nachricht in die Que schicke meldet mir das PGM vollgendes:

Anzahl Parameter bei Programm für Durchbruchnachrichten pgm in
lib Nachrichtenwarteschlange msgq in lib nicht
gültig.

Pikachu
09-09-08, 08:20
Aus der Hilfe zum Parameter "Programm für Durchbruchnachr." des Befehls CHGMSGQ:

Die folgenden Parameter werden an das Programm übergeben:
o Die Nachrichtenwarteschlange (10 Zeichen lang). Der Name der
Nachrichtenwarteschlange, an die die Nachricht gesendet wurde.
o Die Bibliothek (10 Zeichen lang). Der Name der Bibliothek, in der
sich die Nachrichtenwarteschlange befindet.
o Der Nachrichtenreferenzschlüssel (4 Zeichen lang). Der
Referenzschlüssel der Nachricht, die an die Nachrichtenwarteschlange
gesendet wird.

Techniker
09-09-08, 10:22
Hallovielen lieben Dank!!!!!Ich habe gestern noch weiter gemacht und einfach ein CL erstellt welches sollange auf eine Nachricht wartet bis sie kommt und dann eine Aktion auslöst. Also mit RCVMSG ....Das klappt auch alles wunderbar. Aber ich glaube mit einem Exitprogramm ist das ganze performanter. Ich teste das mal mit den Richtigen Parametern. Die habe ich nicht benutzt.

Pikachu
09-09-08, 10:33
Hier gibt's noch eine weitere Beschreibung (http://publib.boulder.ibm.com/infocenter/iadthelp/v7r0/topic/com.ibm.etools.iseries.langref2.doc/bhprg.html).

BenderD
09-09-08, 10:42
hier gehts nicht um Performance, der Unterschied liegt darin in welchem Job die Aktion erfolgt.
CHGMSGQ ordnet die MessageQ einem Job zu (der ALCOBJ, den du irgendwo gefunden hast, soll verhindern, dass sich jemand anderes diese Zuordnung wegholt), nach dem CHGMSGQ macht dieser Job lustig weiter. Wenn dann eine Message in die Q gestellt wird, wird der gerade laufende Vorgang indem Job, der irgendwann mal CHGMSGQ gesagt hat, unterbrochen und der Break Handler aufgerufen (wenn der an den Inhalt der Nachricht dran will, muss er sich den mit RCVMSG holen). Wenn der Job zu dieser Zeit beendet ist, wird nix aufgerufen, bis zum ende des Breakhandlers kann keine weitere Unterbrechung erfolgen.
Bei der RCVMSG Variante only, hängt der wartende Job ohne Aktivität auf der MessageQ und wird erst tätig, wenn eine Message kommt.
Breakhandler kann also ein laufender Job sein, der gerade was anderes macht, im anderen Fall wartet einer untätig darauf tätig zu werden.

D*B


Hallovielen lieben Dank!!!!!Ich habe gestern noch weiter gemacht und einfach ein CL erstellt welches sollange auf eine Nachricht wartet bis sie kommt und dann eine Aktion auslöst. Also mit RCVMSG ....Das klappt auch alles wunderbar. Aber ich glaube mit einem Exitprogramm ist das ganze performanter. Ich teste das mal mit den Richtigen Parametern. Die habe ich nicht benutzt.