Planung für benutzerdefinierte Nachrichtenverarbeitungsknoten

Dieser Abschnitt enthält Hinweise zur Erstellung von Nachrichtenverarbeitungsknoten, um sicherzustellen, dass diese richtig arbeiten. Hier wird erläutert, wie Sie mit dem Nachrichtenverarbeitungsknoten innerhalb von Nachrichten navigieren.

Designspezifische Aspekte

Vor der Entwicklung und Implementierung eines Nachrichtenverarbeitungsknotens müssen Sie Folgendes festlegen:
  • Den Nachrichtenparser, der die Nachricht syntaktisch analysieren wird
  • Ob die Attributwerte des Standardnachrichtenparsers für diesen Nachrichtenverarbeitungsknoten überschrieben werden sollen
  • Das entsprechende Threadmodell für den Nachrichtenverarbeitungsknoten
  • Wie die Nachrichtenverarbeitung beendet wird und ob und wie der Knoten Transaktionen unterstützt
  • Welche der vom Nachrichtenverarbeitungsknoten erforderlichen Konfigurationsattribute exportiert werden müssen, damit sie vom Nachrichtenflussentwickler geändert werden können
  • Die optionalen Knoten-APIs, die der benutzerdefinierte Knoten zur Verfügung stellen soll
  • Allgemeine Entwicklungsaspekte:

Navigation in Syntaxelementen

Die Brokerinfrastruktur stellt Funktionen zur Verfügung, mit denen ein implementierter Nachrichtenverarbeitungsknoten die Baumstruktur einer Nachricht durchlaufen kann; dazu gehören Funktionen und Methoden für die Navigation vom aktuellen Element zum
  • übergeordneten Element
  • ersten übergeordneten Element
  • letzten untergeordneten Element
  • vorherigen (oder linken) gleichgeordneten Element
  • nächsten (oder rechten) gleichgeordneten Element
(Siehe die Abbildung unten.) Andere Funktionen und Methoden unterstützen die Bearbeitung der Elemente selbst; dazu gehören Funktionen und Methoden, mit denen Elemente erstellt, deren Werte gesetzt oder abgefragt, neue Elemente in die Baumstruktur eingefügt bzw. Elemente aus der Baumstruktur entfernt werden können. Weitere Informationen finden Sie unter Dienstprogrammfunktionen für C-Knoten und C-Parser-Dienstprogrammfunktionen oder in Javadoc.

Ein Syntaxelement mit Verbindungen zu anderen Elementen

Die Abbildung zeigt ein Syntaxelement. Es ist mit anderen Elementen verbunden. Dabei handelt es sich um das vorherige und das nächste gleichgeordnete Element links bzw. rechts des Elements, um das erste und letzte untergeordnete sowie das übergeordnete Element des Elements.
Die nächste Abbildung zeigt einen einfachen Syntaxelementstrukturbaum, der die Abhängigkeiten zwischen den einzelnen Elementen verdeutlicht.

Syntaxelementstrukturbaum

Die Abbildung zeigt einen Syntaxelementstrukturbaum. Element A steht ganz oben, oberhalb von Element B, das wiederum oberhalb der Elemente C, D und E steht (letztere sind gleichgeordnet).

Das Element A ist das Stammelement der Baumstruktur. Ihm sind daher keine Elemente übergeordnet. Dieses Stammelement verfügt über das erste untergeordnete Element B. Da A keine weiteren untergeordneten Elemente hat, ist Element B gleichzeitig auch das letzte untergeordnete Element von A.

Element B verfügt über drei untergeordnete Elemente, nämlich C, D und E. Element C ist das erste untergeordnete Element, E das letzte untergeordnete Element von B.

Element C hat zwei gleichgeordnete Elemente, nämlich D und E. Das nächste gleichgeordnete Element von C ist das Element D. Das nächste gleichgeordnete Element von D ist das Element E, das vorherige gleichgeordnete Element von E ist D, und das vorherige gleichgeordnete Element von D ist C.

Die Abbildung unten zeigt die erste Generation der Syntaxelemente einer typischen Nachricht, wie sie von WebSphere Message Broker empfangen wird. (Nicht alle Nachrichten verfügen über einen MQRFH2-Header.)

Erste Generation von Syntaxelementen in einer typischen Nachricht

Oben in der Abbildung ist ein Kästchen mit der Bezeichnung 'Root' (Stammelement) zu sehen. Dieses Kästchen ist über eine Linie mit dem links darunter liegenden Kästchen 'Properties' (Eigenschaften) und über eine zweite Linie mit dem rechts darunter liegenden Kästchen 'XML' verbunden. Zwischen diesen beiden Kästchen liegen zwei weitere Kästchen, 'MQMD' und 'MQRFH2'.

Diese Elemente der ersten Generation werden oft als "Ordner" bezeichnet, in denen die Syntaxelemente, die die Nachrichtenheader und die Nutzdaten darstellen, gespeichert werden. In diesem Beispiel ist das erste untergeordnete Element des Stammelements der Ordner Properties (Eigenschaften). Das nächste gleichgeordnete Element von Properties (Eigenschaften) ist der Ordner für den MQMD-Header der ankommenden WebSphere MQ-Nachrichten. Das nächste gleichgeordnete Element ist der Ordner für den MQRFH2-Header. Schließlich gibt es noch den Ordner für die Nachrichteninhalte, die Nutzdaten; in unserem Beispiel handelt es sich um eine XML-Nachricht.

In der Abbildung oben ist auch ein MQMD- und ein MQRFH2-Header enthalten. Alle von einem MQmessage-Nachrichtenverarbeitungsknoten empfangenen Nachrichten verfügen über MQMD-Header; es gibt noch eine Reihe anderer Header, die ebenfalls vorkommen können.

Navigation in einer XML-Nachricht

Sehen wir uns die folgende XML-Nachricht an:
  <Business>
    <Product type='messaging'></Product>
    <Company>
      <Title>IBM</Title>
      <Location>Hursley</Location>
      <Department>WebSphere MQ</Department>
    </Company>
  </Business>
In diesem Beispiel gibt es die folgenden Elementtypen:
Namenselement
Business, Product, Company, Title, Location, Department
Wertelement
IBM, Hursley, WebSphere MQ
Name/Wert-Element
type='messaging'

Die Navigation in einer Nachricht kann über die Dienstprogrammfunktionen und Methoden des Knotens oder die ähnlichen Dienstprogrammfunktionen des Parsers erfolgen. Bei der XML-Nachricht, die oben zu sehen ist, muss zunächst die Funktion cniRootElement aufgerufen werden, wobei der Knoten die Nachricht als Eingabe für diese Funktion erhalten hat. In Java muss die Funktion getRootElement für die ankommende MbMessage aufgerufen werden. Daraufhin wird ein MbElement zurückgegeben, das das Stammelement (Root) des Elements darstellt. Das Stammelement sollte nicht durch einen benutzerdefinierten Knoten geändert werden.

In der Abbildung oben ist das letzte untergeordnete Element des Stammelements der Ordner mit dem XML-Syntaxanalysebaum. In einem mit C erstellten Knoten erfolgt die Navigation in diesem Ordner über den Aufruf von cniLastChild (wobei die Ausgabe des vorherigen Aufrufs die Eingabe für diese Funktion darstellt), in einem mit Java erstellten Knoten über den Aufruf der Methode getLastChild für das Stammelement.

In der höchsten Ebene gibt es nur ein Element (<Business>), daher erfolgt beim Aufruf von cniFirstChild (in C) oder getFirstChild (in Java) eine Navigation zu dieser Stelle im Strukturbaum. Sie können den Typ des Elements (in diesem Fall ein Namenselement) mit cniElementType oder getElementType abrufen, und anschließend mit der Funktion cniElementName oder getName den Namen selbst (Business).

<Business> hat zwei untergeordnete Elemente, <Product> und <Company>; Sie können also mit dem Aufruf von cniFirstChild oder getFirstChild und dem anschließenden Aufruf von cniNextSibling oder getNextSibling nacheinander zu diesen Elementen gelangen.

<Product> hat ein Attribut (type='messaging'), bei dem es sich um ein untergeordnetes Element handelt. Navigieren Sie auch zu diesem Element wieder mit Hilfe der Funktionen cniFirstChild oder getFirstChild, und rufen Sie anschließend mit cniElementType oder getType den Elementtyp ab (es handelt sich um ein Name/Wert-Element). Mit cniElementName oder getName können Sie den Namen abrufen. Das 'type'-Attribut des Wertes wird mit der Funktion cniElementValueType abgerufen, gefolgt von der entsprechenden Funktion in der Gruppe cniElementValue. In unserem Beispiel ist dies die Funktion cniElementCharacterValue. In Java wird die Methode getValue verwendet, die ein Java-Objekt zurückgibt, das den Elementwert darstellt.

<Company> hat drei untergeordnete Elemente, und jedes dieser drei Elemente hat wiederum ein untergeordnetes Element, bei dem es sich um ein Wertelement handelt (IBM, Hursley und WebSphere MQ). Sie können zu diesen Elementen mit den oben beschriebenen Funktionen navigieren und auf ihre Werte zugreifen.

Es stehen weitere Funktionen zur Verfügung, mit denen die Elementbaumstruktur ganz oder teilweise kopiert werden kann. Diese Kopie kann anschließend geändert werden, indem Elemente hinzugefügt oder entfernt und ihre Namen und Werte geändert werden, um so eine Ausgabenachricht zu erstellen.

Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
as01395_