Im "Betriebsleben" eines benutzerdefinierten Nachrichtenflussparsers gibt es verschiedene Phasen.
In diesem Abschnitt werden die Interaktionen zwischen WebSphere Nachrichtenbroker-Komponenten beim Ausführen eines benutzerdefinierten Parsers beschrieben. Hier werden die Ereignisse aufgeführt, die die einzelnen Phasen starten und die im Verlauf und im Anschluss dieser Phasen auftreten, sowie die APIs, die aufgerufen werden. Ein Verständnis der hier beschriebenen Konzepte erleichtert eine effizientere Konzipierung und Entwicklung von Parsern.
Die erste Phase im Lebenszyklus des benutzerdefinierten Parsers ist die Registrierungsphase. Ihr Zweck ist die Anmeldung des benutzerdefinierten Parsers im Broker. Diese Phase beginnt mit dem Start der Ausführungsgruppe.
Der Parser wird im Verlauf der Instanzerstellungsphase im Lebenszyklus erstellt. Wenn eine Eingabenachricht empfangen oder eine Ausgabenachricht in einem Compute-Knoten erstellt wird, dann wird der entsprechende Parser ermittelt, und die Parservoraussetzungen werden aus dem Nachrichtenheader (beispielsweise MQMD) abgerufen. Der Broker startet und lädt die LIL (Loadable Implementation Library) und die Parser-Factory. Vor dem Aufruf der Funktion cpiCreateContext erstellt der Broker ein Namenselement als Stammelement für den Parser. Dieses Element ist jedoch unbenannt. Der Parser sollte dieses Element mit der Funktion cpiSetElementName benennen. Der Ausführungsgruppenprozess erstellt eine Instanz des Parsers, und der Broker ruft die Funktion cpiCreateContext auf, damit das Parserobjekt den entsprechenden Nachrichtenabschnitt anfordern kann.
Anschließend ruft der Broker die Funktion cpiParseBuffer aus. Die Funktion cpiParseBuffer führt notwendige Initialisierungstasks aus und gibt die Länge des Nachrichteninhalts zurück, den der Parser übernimmt. Der Parser ermittelt den Umfang der Nachrichtendaten, die syntaktisch analysiert werden müssen, und fordert die entsprechende Anzahl an Bytes an.
Wenn eine Instanz eines benutzerdefinierten Parser-Objekts erstellt wird, wird die Implementierungsfunktion zur Kontexterstellung, cpiCreateContext, ebenfalls vom Broker aufgerufen. Durch diesen Aufruf kann der Parser Instanzdaten reservieren, die dem Parser zugeordnet sind. Außerdem ist die Funktion cpiDeleteContext erforderlich, um den Kontext des Parserobjekts wieder zu löschen.
Während der Verarbeitungsphase bearbeitet, ändert und referenziert der Parser Elemente im Nachrichtenobjekt. Die Verarbeitungsphase des Nachrichtenflusses beginnt, sobald eine erste Nachrichtenverarbeitung stattfindet; dies wäre beispielsweise eine Navigation, bei der auf ein Element in einer Nachricht zugegriffen werden muss, das nicht in der im Broker enthaltenen internen Modelldarstellung dieser Nachricht vorhanden ist.
Im Verlauf der Verarbeitungsphase des Nachrichtenflusses wird der Parser aufgerufen, sobald versucht wird, in die Nachrichtenstruktur zu navigieren. Der Parser prüft den Puffer, der bei Aufruf der Funktion cpiParseBuffer angelegt wurde, und erstellt alle notwendigen Nachrichtenelemente.
Diese Funktionen werden aufgerufen, sobald eine Navigation (wie beispielsweise ein Filterausdruck, der ein Nachrichtenfeld angibt) in den Teil der Syntaxelementstruktur erfolgt, der eine logische Darstellung der Daten für ein Nachrichtenformat darstellt, das von einem benutzerdefinierten Parser unterstützt wird. Diese Navigation tritt ein, wenn für eine Operation im Broker die Erstellung oder Erweiterung einer Syntaxelementstruktur erforderlich ist.
Nachdem der Parser die relevanten Teile der Syntaxelementstruktur syntaktisch analysiert hat, ruft er die Funktion 'cpiWriteBuffer' auf. Diese Funktion hängt ihren Teil der Syntaxelementstruktur an den Bitstrom in dem Nachrichtenpuffer an, der dem Parserobjekt zugeordnet ist, und erstellt die Ausgabenachricht.
Die Löschphase ist die letzte Phase im Lebenszyklus eines benutzerdefinierten Parsers. Nachdem der Parser seinen Teil der Syntaxelementstruktur in den Bitstrom geschrieben und die Ausgabenachricht erstellt hat, müssen die Systemressourcen, die vom Broker für den Parser erstellt wurden, wieder freigegeben werden.
Die Löschphase beginnt, wenn der Befehl mqsistop eingegeben wird, um den Ausführungsprozess zu beenden.