WebSphere Message Broker Version 8.0.0.5 Betriebssysteme: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Sehen Sie sich die Informationen zur aktuellen Produktversion im IBM Integration Bus Version 9.0 an.

Lebenszyklus von benutzerdefinierten Parsern

Im "Betriebsleben" eines benutzerdefinierten Nachrichtenflussparsers gibt es verschiedene Phasen.

Dazu gehören die folgenden 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.

Registrierung

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.

Instanzerstellung

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.

Verarbeitung

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.

Der Parser kann dann mithilfe 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 Syntaxelement-Baumstruktur 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 Syntaxelement-Baumstruktur erforderlich ist.

Bei einer Entscheidung über die beste Navigationsmöglichkeit in der Syntaxelement-Baumstruktur sollten Sie folgende Punkte berücksichtigen:
  • Ein Syntaxelement verfügt über fünf Zeiger auf seine übergeordneten und gleichgeordneten Elemente und auf seine ersten und letzten untergeordneten Elemente, damit eine begrenzte Gruppe von Navigationsmöglichkeiten verfügbar ist.
  • 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 benutzerdefinierte Parser kann die Richtung und Reihenfolge nicht steuern; er muss allerdings in der Lage sein, richtig auf das gewählte Navigationsschema zu reagieren, z. B. die Syntaxanalyse von rechts nach links und von links nach rechts.
  • Bei der Erstellung eines benutzerdefinierten Parsers müssen Sie den Parsercode in eine 'parseNextItem'-Funktion einbetten. Diese Funktion sollte die Syntaxelement-Baumstruktur 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. Der bereitgestellte Musterparser veranschaulicht dieses Verhalten.

Nachdem der Parser die relevanten Teile der Syntaxelement-Baumstruktur syntaktisch analysiert hat, ruft er die Funktion 'cpiWriteBuffer' auf. Diese Funktion hängt ihren Teil der Syntaxelement-Baumstruktur an den Bitstrom in dem Nachrichtenpuffer an, der dem Parserobjekt zugeordnet ist, und erstellt die Ausgabenachricht.

Löschen

Die Löschphase ist die letzte Phase im Lebenszyklus eines benutzerdefinierten Parsers. Nachdem der Parser seinen Teil der Syntaxelement-Baumstruktur 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.

Bemerkungen | Marken | Downloads | Bibliothek | Support | Feedback

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        Letzte Aktualisierung:
        
        Letzte Aktualisierung: 2015-02-28 16:21:58


KonzeptthemaKonzeptthema | Version 8.0.0.5 | as01413_