Lebenszyklus von benutzerdefinierten Parsern

In diesem Abschnitt werden die verschiedenen Phasen im "Betriebsleben" eines benutzerdefinierten Nachrichtenflussparsers beschrieben. Dabei handelt es sich um die folgenden Phasen:

Dieser Abschnitt vermittelt ein besseres Verständnis der Interaktionen, die bei der Ausführung eines benutzerdefinierten Parsers zwischen den Komponenten von WebSphere Message Broker stattfinden. Hier werden die Ereignisse aufgeführt, die die einzelnen Phasen anstoßen und die im Verlauf und im Anschluss dieser Phasen auftreten, sowie die APIs, die aufgerufen werden. Ein Verständnis der hier beschriebenen Konzepte ermöglicht eine effizientere Konzipierung und Entwicklung von Parsern.

Registrierung

Die erste Phase im Lebenszyklus des benutzerdefinierten Parsers ist die Registrierungsphase. Ihr Zweck ist die Anmeldung des benutzerdefinierten Parsers im Broker. Diese Phase wird von der Initialisierungsphase beim Start des Ausführungsgruppenprozesses ausgelöst.

Instanzerstellung

Der Parser wird im Verlauf der Instanzerstellungsphase im Lebenszyklus erstellt. Wenn eine Eingabenachricht empfangen oder eine Ausgabenachricht in einem Rechenknoten 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. Der Ausführungsgruppenprozess erstellt eine Instanz des Parsers, und der Broker ruft die Funktion 'cpiCreateContext' auf, damit das Parserobjekt den entsprechenden Nachrichtenabschnitt anfordern kann.

Vor dem Aufruf dieser Funktion hat der Broker ein Namenselement als Stammelement für den Parser erstellt. Dieses Element ist jedoch unbenannt. Der Parser sollte dieses Element mit der Funktion cpiSetElementName benennen.

Anschließend ruft der Broker die Funktion 'cpiParseBuffer' auf. Diese Funktion hat an dieser Stelle die Aufgabe, notwendige Initialisierungstasks auszuführen und die Länge des Nachrichteninhalts zurückzugeben, 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.

Sobald eine Instanz eines benutzerdefinierten Parserobjekts erstellt wird, ruft der Nachrichtenbroker die Implementierungsfunktion 'cpiCreateContext' (für die Kontexterstellung) auf. Dadurch 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.

Verarbeitung

Bei der Verarbeitung werden die Elemente in einem Nachrichtenobjekt, das vom Parser interpretiert wird, manipuliert, geändert und referenziert. 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 überprüft den Puffer, der bei Aufruf der Funktion 'cpiParseBuffer' angelegt wurde, und erstellt alle notwendigen Nachrichtenelemente.

Der Parser kann dann mit Hilfe der folgenden Implementierungsfunktionen durch die Nachrichtenelemente navigieren:
  • cpiParseFirstChild
  • cpiParseLastChild
  • cpiParsePreviousSibling
  • cpiParseNextSibling

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. Dieser Fall tritt ein, wenn für eine Operation im Broker die Erstellung oder Erweiterung einer Syntaxelementstruktur erforderlich ist.

Bei einer Entscheidung über die beste Navigationsmöglichkeit in der Syntaxelementstruktur sollten Sie Folgendes bedenken:
  • Ein Syntaxelement verfügt über fünf Zeiger auf seine übergeordneten und gleichgeordneten Elemente und auf seine ersten und letzten untergeordneten Elemente. Die verfügbaren Navigationsmöglichkeiten sind also begrenzt.
  • Für alle diese Navigationsvorgänge werden dieselben internen Klassen verwendet.
  • Die Navigation wird nicht vom Parser gesteuert. Der ESQL-Knoten oder ein benutzerdefinierter Knoten entscheidet, in welche Richtung die Navigation erfolgt und in welcher Reihenfolge die navigationsspezifischen Implementierungsfunktionen des Parsers aufgerufen werden. Der Plug-in-Parser kann diese Vorgänge nicht steuern; er muss allerdings in der Lage sein, richtig auf das gewählte Navigationsschema zu reagieren. Das kann beispielsweise eine Syntaxanalyse von rechts nach links oder auch von links nach rechts bedeuteten.
  • Bei der Erstellung eines benutzerdefinierten Parsers müssen Sie den tatsächlichen Parsercode in eine 'parseNextItem'-Funktion einbetten. Diese Funktion sollte die Syntaxelementstruktur erstellen, und zwar Element um Element, sowie Namen, Werte und Abschluss-Flags setzen. Die Implementierung dieser Funktion hängt von dem Bitstrom ab, der syntaktisch analysiert werden soll. Die Implementierung wird von dem in WebSphere Message Broker verfügbare Beispielparser veranschaulicht.

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. So entsteht die Ausgabenachricht.

Löschen

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.

Zugehörige Tasks
Parser in C erstellen
Zugehörige Verweise
Benutzerdefinierte C-Parser-API
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
as01413_