Planung für benutzerdefinierte Nachrichtenverarbeitungsknoten

Planen Sie die Vorgehensweise beim Schreiben eines Nachrichtenverarbeitungs- oder Sendeknoten sowie die Navigation der Nachricht innerhalb des Knotens.

Design-Faktoren

Vor der Entwicklung und Implementierung eines Nachrichtenverarbeitungsknotens müssen Sie folgende Aspekte berücksichtigen:

Navigation in Syntaxelementen

Der Broker stellt Funktionen zur Verfügung, durch deren Aufruf Ihr Knoten die Baumstruktur einer Nachricht durchlaufen kann; dazu gehören Funktionen und Methoden, die die Navigation vom aktuellen Element zu anderen Elementen unterstützen:
  • übergeordneten Element
  • ersten übergeordneten Element
  • letzten untergeordneten Element
  • vorherigen (oder linken) gleichgeordneten Element
  • nächsten (oder rechten) gleichgeordneten Element
Diese Beziehungen werden in der folgenden Abbildung dargestellt.
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.

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. Unter Dienstprogrammfunktionen für C-Knoten und C-Parser-Dienstprogrammfunktionen bzw. in den Javadoc-Informationen finden Sie nähere Informationen.

Die nächste Abbildung zeigt einen einfachen Syntaxelementstrukturbaum, der die Abhängigkeiten zwischen den einzelnen Elementen verdeutlicht.
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. Sein erstes untergeordnetes Element ist 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 von B; Element E ist 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 folgende Abbildung zeigt die erste Generation der Syntaxelemente einer typischen WebSphere MQ-Nachricht, die von einem Broker empfangen wird. (Nicht alle Nachrichten verfügen über einen MQRFH2-Header.)
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 Eigenschaften ist der Ordner für den MQMD-Header. Das nächste gleichgeordnete Element ist der Ordner für den MQRFH2-Header. Der letzte Ordner ist für die Nachrichteninhalte zuständig; in unserem Beispiel handelt es sich um eine XML-Nachricht.

In der vorigen Abbildung ist auch ein MQMD- und ein MQRFH2-Header enthalten. Alle Nachrichten, die von einem Verarbeitungsknoten empfangen werden, der WebSphere MQ verarbeitet, enthalten einen MQMD-Header; außerdem können mehrere andere Header aufgenommen werden.

Navigation in einer XML-Nachricht

Beachten Sie folgende XML-Nachricht:
  <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 gezeigten XML-Nachricht 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 das ankommende MbMessage-Objekt aufgerufen werden. Daraufhin wird ein MbElement zurückgegeben, das das Stammelement (Root) des Elements darstellt. Dieses Stammelement darf nicht im benutzerdefinierten Knoten geändert werden.

In der Abbildung mit der ersten Generation der Syntaxelemente einer typischen Nachricht, die vom Broker empfangen wird, wird deutlich, dass das letzte untergeordnete Element des Stammelements der Ordner mit dem XML-Syntaxanalysebaum ist. 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 getType abrufen, und anschließend mit der Funktion cniElementName oder getName den Namen selbst (Business).

Das Element <Business> hat zwei untergeordnete Elemente, <Product> und <Company>. Navigieren Sie mit cniFirstChild oder getFirstChild, gefolgt von cniNextSibling bzw. getNextSibling zu den einzelnen untergeordneten Elementen.

Das Element <Product> hat ein Attribut (type='messaging'), bei dem es sich um ein untergeordnetes Element handelt. Navigieren Sie auch zu diesem Element mithilfe 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 diesem Beispiel handelt es sich um cniElementCharacterValue. In Java wird die Methode getValue verwendet, die ein Java-Objekt zurückgibt, das den Elementwert darstellt.

Das Element <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. Weitere Informationen finden Sie unter Dienstprogrammfunktionen für C-Knoten und C-Parser-Dienstprogrammfunktionen oder in der Java-Anwendungsprogrammierschnittstelle für benutzerdefinierte Knoten.

Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Feedback

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
Letzte Aktualisierung : 2009-02-17 15:29:54

as01395_