Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

DADM Administration von Message Queues

Der Aufruf DADM (delayed free message administration) bietet folgende Funktionen zur Administration von Message Queues:

  • Übersichtsinformationen über Nachrichten einer Message Queue in den Nachrichtenbereich lesen (Benutzerkennung, Auftrags-Identifikation (Auftrags-Id), Zeitpunkt der Erzeugung, Startzeit und vorhandene Quittungsaufträge, ursprüngliches Ziel ...)

  • Benutzerinformationen, die mit DPUT NI/QI/+I/-I erzeugt wurden, in den Nachrichtenbereich lesen

  • die Bearbeitungsreihenfolge von Nachrichten einer Message Queue ändern

  • einzelne Nachrichten der Message Queue oder auch alle Nachrichten der Message Queue löschen

  • einzelne oder alle Nachrichten der Dead Letter Queue wieder ihrem jeweiligen ursprünglichen Ziel oder einem neuen Ziel zuordnen

Unix-, Linux- und Windows-Systeme
In einer UTM-Cluster-Anwendung können Sie nur Message Queues der lokalen Knoten-Anwendung administrieren.

Im Folgenden wird das Format des DADM-Aufrufs ausführlich dargestellt. Weiterführende Informationen zur Administration von Message Queues finden Sie im openUTM-Handbuch „Anwendungen administrieren“.

Versorgen des KDCS-Parameterbereichs (1. Parameter)

Die folgende Tabelle zeigt die notwendigen Angaben im KDCS-Parameterbereich.

Funktion des Aufrufs

Einträge im KDCS-Parameterbereich

KCOP

KCOM

KCLA

KCRN

KCLT

KCQTYP

KCMOD

Zeitpunkt1

Übersichtsinformation lesen

"DADM"

"RQ"

54

Auftrags-Id/Leerzeichen

LTERM/(OSI-)LPAP/TAC

binär null

binär null

binär null

Queue

"Q"/"U"

Benutzerinformation lesen

"DADM"

"UI"

Länge

Auftrags-Id

binär null

binär null

binär null

Zeitpunkt (absolut)

Reihenfolge ändern

"DADM"

"CS"

0

Auftrags-Id

binär null

binär null

binär null

Zeitpunkt (absolut)

Löschen einer einzelnen Nachricht einer Queue

"DADM"

"DL"

0

Auftrags-Id

LTERM/(OSI-)LPAP/TAC

binär null

"C"/"N"

Zeitpunkt (absolut)

Queue

"Q"/"U"

Löschen aller Nachrichten einer Queue

"DADM"

"DA"

0

Leerzeichen

LTERM/(OSI-)LPAP/TAC

binär null

binär null

binär null

Queue

"Q"/"U"

Einzelne Nachricht verschieben

"DADM"

"MV"

0

Auftrags-Id

TAC/(OSI-)LPAP/Leerzeichen

binär null

binär null

Zeitpunkt (absolut)

Alle Nachrichten verschieben

"DADM"

"MA"

0

Leerzeichen

TAC/(OSI-)LPAP/Leerzeichen

binär null

binär null

binär null

Der Zeitpunkt wird in den Feldern KCTAG/kcday, KCSTD/kchour und KCMIN angegeben.

Alle nicht verwendeten Felder des KDCS-Parameterbereichs müssen mit binär null versorgt werden.

Versorgen des 2. Parameters

Hier stellen Sie die Adresse des Nachrichtenbereichs bereit, in den openUTM die Nachricht lesen soll. Für die Strukturierung des Nachrichtenbereichs beim Aufruf DADM RQ steht eine Sprach-spezifische Datenstruktur zur Verfügung, für COBOL das COPY-Element KCDADC und für C/C++ die Include-Datei kcdad.h.

Versorgen der Parameter

Feldname im KDCS-Parameterbereich

Inhalt

KCOP

"DADM"

KCOM

"RQ"/"UI"/"CS"/"DL"/"DA"/"MV"/"MA"

KCLA

Länge in Byte/0

KCRN

Auftrags-Id/Leerzeichen

KCLT

LTERM-Name/(OSI-)LPAP-Name/TAC/Queue/binär null/Leerzeichen

KCQTYP

Typ des Ziels:"Q"/"U"/binär null

KCMOD

"C"/"N"/binär null

KCTAG/...

Zeitangabe (absolut)
  • KCTAG/kcday

  • Tag (absolut)/binär null
  • KCSTD/kchour

  • Stunde (absolut)/binär null
  • KCMIN

  • Minute (absolut)/binär null
  • KCSEK/kcsec

  • Sekunde (absolut)/binär null

KDCS-Aufruf

1. Parameter

2. Parameter

KDCS-Parameterbereich

Nachrichtenbereich

C/C++-Makroaufrufe

Makronamen

Parameter

KDCS_DADMRQ

(nb,kcla,kcrn,kclt)

KDCS_QADMRQ

(nb,kcla,kcrn,kclt,kcqtyp)

KDCS_DADMUI

(nb,kcla,kcrn,kcday,kchour,kcmin,kcsec)

KDCS_DADMCS

(nb,kcrn,kcday,kchour,kcmin,kcsec)

KDCS_DADMDL

(nb,kcrn,kclt,kcmod,kcday,kchour,kcmin,kcsec)

KDCS_QADMDL

(nb,kcrn,kclt,kcmod,kcday,kchour,kcmin,kcsec,kcqtyp)

KDCS_DADMDA

(nb,kclt)

KDCS_QADMDA

(nb,kclt,kcqtyp)

KDCS_DADMMV

(nb,kcrn,kclt,kcday,kchour,kcmin,kcsec,kcqtyp)

KDCS_DADMMA

(nb,kclt,kcqtyp)

Rückgaben von openUTM

Nachrichtenbereich

Inhalt


Daten

Feldname im KB-Rückgabebereich

Inhalt

KCRLM

tatsächliche Länge

KCRCCC

Returncode

KCRCDC

interner Returncode

KCRMF/kcrfn

Auftrags-Id/Leerzeichen

In den KDCS-Parameterbereich tragen Sie für den DADM-Aufruf Folgendes ein:

KCOP

Im Feld KCOP geben Sie den Operationscode DADM an.

KCOM

Im Feld KCOM wählen Sie die Operationsmodifikation:

  • RQ zum Lesen der Übersichtsinformationen zu einer Message Queue

  • UI zum Lesen einer durch DPUT NI/QI erzeugten Benutzerinformation eines Hauptauftrags

  • CS um eine bestimmte Nachricht vorzuziehen

  • DL zum Löschen einer einzelnen Nachricht

  • DA zum Löschen aller Nachrichten in der Message Queue

  • MV zum Verschieben einer einzelnen Nachricht der Dead Letter Queue in die ursprüngliche Message Queue oder an einen beliebigen Asynchron-TAC, eine beliebige TAC-Queue, einen LPAP-Partner oder einen OSI-LPAP-Partner.

  • MA zum Verschieben aller Nachrichten der Dead Letter Queue. Dabei gibt es zwei Möglichkeiten:

    • Verschieben in die jeweiligen ursprünglichen Message Queues

    • Verschieben aller Nachrichten mit ursprünglichem Ziel TAC, LPAP oder OSI-LPAP an ein beliebiges anderes Ziel vom gleichen Typ (Asynchron-TAC/TAC-Queue, LPAP-Partner oder OSI-LPAP-Partner). Nachrichten, deren ursprüngliches Ziel nicht vom Typ des neuen Ziels ist, verbleiben in der Dead Letter Queue.
      Um alle Nachrichten zu verschieben, sind also bis zu drei Aufrufe mit neuen Zielen vom Typ TAC, LPAP und OSI-LPAP erforderlich.

KCLA

Im Feld KCLA geben Sie die Länge an, in der die Daten in den Nachrichtenbereich übertragen werden sollen. Bei KCOM = RQ wird 54, bei KCOM = CS/DL/DA/MV/MA wird 0 eingetragen.

KCRN

Im Feld KCRN identifizieren Sie die Nachricht der Queue, die administriert werden soll. Folgende Angaben sind notwendig:

  • Leerzeichenbei KCOM = DA/MA oder wenn sich der Aufruf bei KCOM = RQ auf die erste Nachricht in der Queue bezieht.

  • die Auftrags-Idbei KCOM = UI/CS/DL/MV oder wenn sich der Aufruf bei KCOM = RQ auf nachfolgende Nachrichten in der Queue bezieht. Die Auftrags-Id wird immer beim vorigen DADM RQ im Feld KCRMF/kcrfn zurückgegeben.

KCLT

Im Feld KCLT identifizieren Sie die Queue, d.h.

  • Bei KCOM = RQ/DL/DA geben Sie an:

    • den LTERM-Namen, wenn die Nachricht an einen LTERM-Partner gerichtet war,

    • den (OSI-)LPAP-Namen, wenn die Nachricht an einen (OSI-)LPAP-Partner gerichtet war,

    • den TAC, wenn die Nachricht an ein Asynchron-Programm gerichtet war,

    • den Namen der Queue, wenn Sie Nachrichten einer USER-Queue, einer TAC-Queue oder einer Temporären Queue administrieren wollen.

      • Bei KCOM = UI/CS geben Sie binär null an.

      • Bei KCOM = MV/MA geben Sie an:

        • den TAC, wenn die einzelne bzw. alle Nachrichten mit ursprünglichem Ziel TAC oder TAC-Queue an ein Asynchron-Programm gerichtet werden sollen,

        • den Namen einer TAC-Queue, wenn die einzelne bzw. alle Nachrichten mit ursprünglichem Ziel TAC oder TAC-Queue an eine Service-gesteuerte Queue gerichtet werden sollen,

        • den Namen eines LPAP-Partners (aber kein MASTER-LU61-LPAP), wenn die einzelne bzw. alle Nachrichten mit ursprünglichem Ziel LPAP an einen LPAP-Partner gerichtet werden sollen,

        • den Namen eines OSI-LPAP-Partners (aber kein MASTER-OSI-LPAP), wenn die einzelne bzw. alle Nachrichten mit ursprünglichem Ziel OSI-LPAP an einen OSI-LPAP-Partner gerichtet werden sollen,

        • Leerzeichen, wenn die einzelne bzw. alle Nachrichten wieder ihrem jeweiligen ursprünglichen Ziel zugeordnet werden sollen.

      Alle Nachrichten, deren ursprüngliches Ziel nicht zum neuen Ziel passt, verbleiben in der Dead-Letter-Queue.

KCQTYP

Im Feld KCQTYP geben Sie den Typ der Queue an:

  • bei KCOM = RQ/DL/DA geben Sie an:

    • binär null, wenn die Queue zu einem LTERM, einem (OSI-)LPAP oder einem TAC gehört oder wenn es eine TAC-Queue ist,

    • Q bei einer mit QCRE erzeugten Temporären Queue,

    • U bei einer USER-Queue.

      • bei KCOM = UI/CS/MV/MA geben Sie binär null an.

KCMOD

Im Feld KCMOD geben Sie beim Löschen eines Auftrags-Komplexes an, ob openUTM den negativen Quittungsauftrag aktivieren soll. Folgende Werte sind möglich:

  • binär null bei KCOM = RQ/UI/CS/DA/MV/MA,

  • C zum Löschen des kompletten Auftrags bei KCOM = DL; bei Auftrags-Komplexen werden alle Quittungsaufträge ebenfalls gelöscht,

  • N zum Aktivieren des negativen Quittungsauftrags bei KCOM = DL; die Nachricht selbst wird gelöscht

KCTAG/...

  • Bei KCOM = UI/CS/DL/MV geben Sie in diesen Feldern den Zeitpunkt an, an dem die Nachricht erzeugt wurde, und zwar im Feld KCTAG/kcday den Tag im Jahr (Industrietag, Wert von 001 bis 366), in KCSTD/kchour die Stunde, in KCMIN die Minute und in KCSEK/ kcsec die Sekunde. Dieser Zeitpunkt kann vorher mit DADM RQ ermittelt werden.

  • Bei KCOM = RQ/DA/MA wird binär null eingetragen.

Beim KDCS-Aufruf geben Sie an:

1. Parameter

Die Adresse des KDCS-Parameterbereichs.

2. Parameter

Die Adresse des Nachrichtenbereichs, in den openUTM die Nachricht lesen soll. Diese Adresse müssen Sie auch angeben, wenn Sie in KCLA 0 eintragen.

Makronamen

Wie Sie Makroaufrufe für C/C++ nutzen, ist in Abschnitt „C/C++-Makroschnittstelle" ausführlich beschrieben.

openUTM gibt zurück:

Nachrichtenbereich

bei KCOM = RQ/UI im angegebenen Nachrichtenbereich die Nachricht in der tatsächlichen, höchstens aber in der angeforderten Länge.

KCRLM

im Feld KCRLM die tatsächliche Länge der Nachricht, ggf. in Abweichung von der angeforderten Länge in KCLA des Parameterbereichs.

KCRCCC

im Feld KCRCCC den KDCS-Returncode.

KCRCDC

im Feld KCRCDC den internen Returncode von openUTM (siehe openUTM-Handbuch „Meldungen, Test und Diagnose“).

KCRMF/kcrfn

im Feld KCRMF/kcrfn bei KCOM = RQ die Auftrags-Id der nächsten Nachricht in der Queue (siehe KCLT) oder Leerzeichen bei der letzten Nachricht der Queue.

KDCS-Returncodes im Feld KCRCCC beim DADM-Aufruf

Im Programm sind auswertbar:

000

Die Operation wurde ausgeführt (bei KCOM = RQ/UI) bzw. der Administrationsauftrag wurde angenommen (bei KCOM = CS/DL/DA/(MV/MA).
Über die tatsächliche Ausführung wird erst beim Transaktionsende entschieden (siehe „Eigenschaften des DADM-Aufrufs").

01Z

Längenkonflikt: KCLA < KCRLM, die Nachricht wurde abgeschnitten.

07Z

Es konnten nicht alle Nachrichten der Dead Letter Queue verschoben werden, weil der taskspezifische Pufferbereich für die Wiederanlauf-Information zu klein generiert wurde, siehe openUTM-Handbuch „Anwendungen generieren“ "Wiederanlaufbereich".
Maßnahme: Generierung mit KDCDEF, Pufferbereich mit MAX RECBUF=(...,length) größer definieren oder den DADM-Aufruf wiederholen.

40Z

Das System kann die Operation nicht ausführen (Generierungs- bzw. Systemfehler, ursprüngliches Ziel nicht mehr existent, keine Administrationsberechtigung, Blockade durch anderen Vorgang), siehe KCRCDC.

42Z

Der Eintrag in KCOM ist ungültig.

43Z

Die Längenangabe in KCLA ist negativ bzw. ungültig.

44Z

Die in KCRN angegebene Auftrags-Id ist ungültig.

46Z

Die Angabe in KCLT ist ungültig. Mögliche Ursachen:

  • der angegebene LTERM- oder (OSI-)LPAP-Name ist nicht vorhanden
  • der TAC ist ungültig oder gesperrt
  • der TAC ist kein Vorgangs-TAC oder ein Dialog-TAC
  • es gibt keine USER-Queue oder Temporäre Queue mit dem angegebenen Namen oder der in KCTYP angegebene Typ passt nicht zu dem Queue-Namen
  • bei KCOM=MV/MA: Es wurde ein LTERM-Name, Master-LU61-LPAP-Name oder MASTER-OSI-LPAP-Name angegeben oder der angegebene TAC wurde gelöscht oder es wurde KDCMSGTC oder KDCDLETQ angegeben.
  • bei KCOM=MV: Es wurden Leerzeichen angegeben, aber das ursprüngliche Ziel der Nachricht wurde gelöscht.
  • bei KCOM=MV: Das ursprüngliche Ziel und das neue Ziel der Nachricht passen vom Typ her nicht zusammen, d.h.
    • ursprünglich TAC oder TAC-Queue, neu LPAP oder OSI-LPAP

    • ursprünglich LPAP, neu TAC oder TAC-Queue oder OSI-LPAP

    • ursprünglich OSI-LPAP, neu TAC oder TAC-Queue oder LPAP

47Z

Der Nachrichtenbereich fehlt oder ist in der angegebenen Länge nicht zugreifbar.

49Z

Der Inhalt nicht verwendeter Felder des KDCS-Parameterbereichs ist ungleich binär null.

56Z

Der Wert in KCMOD oder die Zeitangabe in KCTAG/kcday, KCSTD/kchour, KCMIN oder KCSEK/kcsec ist ungültig.

Ein weiterer Returncode ist dem DUMP zu entnehmen:

71Z

In diesem Teilprogramm-Lauf wurde noch kein INIT-Aufruf gegeben.

Rückgaben im Nachrichtenbereich bei DADM RQ

Für die Rückgabeninformation bei Aufruf DADM RQ steht eine Datenstruktur zur Verfügung, für COBOL das COPY-Element KCDADC und für C/C++ die Include-Datei kcdad.h. Diese Datenstruktur können Sie zur Definition des Nachrichtenbereichs verwenden. Sie hat folgenden Aufbau:

Byte 

Feldname
COBOL/C/C++

Bedeutung

1 - 8

KCDAGUS

UTM-Benutzerkennung des Auftraggebers

9 - 16

KCDADPID

Auftrags-Id (von openUTM vergeben)

17 - 25

KCDAGTIM1

Zeitpunkt des FPUT-/DPUT-Aufrufs in der Form dddhhmmss:

17 - 19

KCDAGDOY

ddd

Tag im Jahr (Wertebereich 001 - 366) 

20 - 21

KCDAGHR

hh

Stunde (Wertebereich 00 - 23)

22 - 23

KCDAGMIN

mm

Minute (Wertebereich 00 - 59)

24 - 25

KCDAGSEC

ss

Sekunde (Wertebereich 00 - 59)

26 - 34

KCDASTIM1

bei zeitverzögertem Auftrag die gewünschte Startzeit in der Form dddhhmmss:

26 - 28

KCDASDOY

ddd

Tag im Jahr (Wertebereich 001 - 366)

29 - 30

KCDASHR

hh

Stunde (Wertebereich 00 - 23)

31 - 32

KCDASMIN

mm

Minute (Wertebereich 00 - 59)

33 - 34

KCDASSEC

ss

Sekunde (Wertebereich 00 - 59)

                     

Bei einem Auftrag ohne Zeitverzögerung werden Leerzeichen zurückgegeben.

35


KCDAPMSG

Y

Positiver Quittungsauftrag vorhanden

N

Kein positiver Quittungsauftrag vorhanden

36

KCDANMSG

Y

Negativer Quittungsauftrag vorhanden

N

Kein negativer Quittungsauftrag vorhanden

37 - 44

KCDADEST

Ziel der Nachricht bzw. ursprüngliches Ziel bei Dead Letter Queue 

45

KCDATYPE

Typ des Ziels der Nachricht bzw. Typ des ursprünglichen Ziels bei Dead Letter Queue:

Q

für temporäre Queue

U

für USER-Queue

T

für TAC-Queue

A

für Asynchron-TAC

L

für LTERM

P

für LPAP

O

für OSI-LPAP 

46 - 53  

KCDAFCTM

Erzeugungs- oder Umwandlungszeitpunkt von DPUT in FPUT der Nachricht. Bei Service-gesteuerten Queues können die mit DADM RQ angezeigten Nachrichten den mit DGET BF gelesenen Nachrichten eindeutig zugeordnet werden. KCDADPID bzw. KCDAFCTM müssen mit den Rückgabewerten KCRDPID bzw. KCRGTM des entsprechenden DGET BF Aufrufs übereinstimmen.

54

KCDAGUST

Typ des Auftraggebers:

U

für USER

S

für LU6.1-Session

O

für OSI-Association

Für C/C++ sind die zusammenfassenden Felder KCDAGTIM und KCDASTIM nicht definiert, wohl aber die spezifischen Felder für Tag/Stunde/Minute/Sekunde.

Eigenschaften des DADM-Aufrufs

  • Ermitteln der Auftrags-Id

    Die Auftrags-Id wird von openUTM intern vergeben. Sie kann im Teilprogramm wie folgt mit DADM RQ-Aufrufen ermittelt werden: Beim ersten DADM RQ-Aufruf (mit KCRN = Leerzeichen) informiert openUTM über die erste Nachricht in der Queue. openUTM schreibt dabei u.a. die Auftrags-Id in den Nachrichtenbereich. Stehen für die Queue weitere Nachrichten in der Message Queue, dann gibt openUTM in KCRMF/kcrfn die Auftrags-Id der jeweils nächsten Nachricht zurück. Bei der letzten Nachricht in der Queue trägt openUTM im Feld KCRMF/kcrfn Leerzeichen ein.

  • DADM CS/DL/DA/MV/MA-Aufrufe (Reihenfolge ändern, löschen oder verschieben) unterliegen der Transaktionssicherung und werden deshalb erst bei Transaktionsende ausgeführt. Daher garantiert KCRCCC = 000 nach einem solchen Aufruf noch nicht, dass der Aufruf erfolgreich ausgeführt werden kann, denn in der Zwischenzeit könnte die Nachricht in der Queue durch einen anderen DADM-Aufruf gelöscht worden sein. Ob ein DADM CS/DL/DA/MV/MA-Aufruf erfolgreich war, kann man in einer nachfolgenden Transaktion durch einen DADM RQ-Aufruf erfahren.

  • Durch den Aufruf DADM CS wird die entsprechende Nachricht an die erste Stelle der zugehörigen Warteschlage vorgezogen. Für zeitgesteuerte Nachrichten, deren Startzeitpunkt noch nicht erreicht ist, wird der Aufruf mit 40Z abgewiesen.

  • Nach einem Löschauftrag mit DADM DL/DA darf innerhalb derselben Transaktion kein weiterer Löschauftrag und auch kein DADM CS-Aufruf gegeben werden; openUTM lehnt dies mit 40Z ab.

  • Ein Teilprogramm, das einen DADM-Aufruf absetzt, muss unter einer administrationsberechtigten Benutzerkennung ablaufen, sonst quittiert openUTM den DADM-Aufruf mit 40Z. Allerdings gibt es folgende Ausnahme:
    Wenn ein Vorgang von einem Druckersteuer-LTERM aus gestartet wurde und wenn nur solche Aufträge administriert werden, die an Drucker dieses Druckersteuer-LTERMs gerichtet sind, dann benötigen weder das Teilprogramm noch der Benutzer die Administrationsberechtigung.

  • Die Dead Letter Queue besteht aus Nachrichten, die nicht verarbeitet werden konnten. Um diese Nachrichten evtl. nach einer Fehlerbehebung noch verarbeiten zu können, müssen sie entweder ihrem ursprünglichen Ziel oder einem neuen Ziel vom gleichen Typ zugeordnet werden.
    Mit DADM MV kann eine einzelne Nachricht, mit DADM MA können alle Nachrichten der Dead Letter Queue verschoben werden. Dabei gibt es zwei Möglichkeiten:

    • Verschieben in die jeweilige(n) ursprüngliche(n) Message Queue(s).

    • Verschieben der Nachricht bzw. aller Nachrichten mit ursprünglichem Ziel TAC (Asynchron-TAC oder TAC-Queue), LPAP oder OSI-LPAP an ein beliebiges anderes Ziel vom gleichen Typ.

    Dabei wird ein evtl. definiertes QLEV und der STATUS der Empfänger-Queue ignoriert.

    Bei DADM MA verbleiben Nachrichten in folgenden Fällen in der Dead Letter Queue, ohne dass dies über einen Returncode angezeigt wird:

    • KCLT = Leerzeichen: Alle Nachrichten, deren ursprüngliches Ziel nicht mehr existiert.

    • KCLT != Leerzeichen: Alle Nachrichten, deren ursprüngliches Ziel nicht zum neuen Ziel passt. Nachrichten, deren ursprüngliches Ziel nicht mehr existiert, passen dabei nur zum neuen Ziel Asynchron-TAC oder TAC-Queue.