Lebenszyklus von benutzerdefinierten Nachrichtenverarbeitungsknoten in C

In diesem Abschnitt werden die verschiedenen Phasen im "Betriebsleben" eines benutzerdefinierten Nachrichtenverarbeitungsknotens für die Programmiersprache C beschrieben. Hier werden die Objekte erläutert, die erstellt und gelöscht werden, sowie die Implementierungsfunktionen und Klassen, die in den folgenden Phasen aufgerufen werden:

Die Hinweise in diesem Abschnitt gelten für Sendeknoten und für Nachrichtenverarbeitungsknoten. Diese beiden Knotentypen können gemeinsam betrachtet werden, denn obwohl ein Nachrichtenverarbeitungsknoten typischerweise zum Verarbeiten einer Nachricht verwendet wird und ein Sendeknoten zum Erzeugen einer Ausgabe in Form eines Bitstroms, können Sie doch beide Knotentypen für Funktionen verwenden.

Registrierung

Ein benutzerdefinierter Nachrichtenverarbeitungsknoten wird im Broker registriert, wenn die LIL, die den Knoten enthält, vom Betriebssystem geladen und initialisiert wurde.

Der Broker ruft bipGetMessageflowNodeFactory auf, um die Funktion der LIL festzulegen und anzugeben, wie die LIL aufgerufen werden soll.

Von der Funktion bipGetMessageflowNodeFactory wiederum wird die Funktion cniCreateNodeFactory aufgerufen, die eine Factory oder einen Gruppennamen für alle Knoten zurückgibt, die von der LIL unterstützt werden.

Die LIL sollte dann die Dienstprogrammfunktion cniDefineNodeClass aufrufen, um die Namen der einzelnen Knoten sowie eine virtuelle Funktionstabelle der Funktionszeiger der Implementierungsfunktionen zu übergeben.

Instanzerstellung

Während der Instanzerstellung wird eine Instanz des benutzerdefinierten Nachrichtenverarbeitungsknotens erstellt. Diese Phase beginnt, wenn der Broker einen Nachrichtenfluss erstellt und für jede Instanz des benutzerdefinierten Knotens in diesem Nachrichtenfluss die Funktion cniCreateNodeContext aufruft. Die Funktion cniCreateNodeContext ist die, die im Feld iFpCreateNodeContext in dem CNI_VFT struct angegeben ist, das für diesen Knotentyp ancniDefineNodeClass übergeben wurde. Diese Funktion soll die für diesen Knoten erforderlichen Ressourcen anlegen, insbesondere ausreichend Speicher, damit die Instanzierung des benutzerdefinierten Knotens die Werte für die konfigurierten Attribute aufnehmen kann.

Der Broker erstellt bei den folgenden Ereignissen eine Knoteninstanz und ruft cniCreateNodeContext auf:
  • Nachrichtenfluss wird erzeugt.
    • Broker wird gestartet (Benutzer hat mqsistart ausgeführt). Eventuell vorher implementierte Nachrichtenflüsse werden beim Start des Brokers erneut erzeugt.
    • Ausführungsgruppe wird erneut geladen (Benutzer hat mqsireload ausgeführt). Eventuell vorher implementierte Nachrichtenflüsse werden beim Neuladen der Ausführungsgruppe erneut erzeugt.
    • Innerhalb der Ausführungsgruppe ist ein schwer wiegender Fehler aufgetreten, der dazu führt, dass die Ausführungsgruppe erneut gestartet wird.
  • Nachrichtenfluss wird erneut implementiert. Wenn ein Nachrichtenfluss geändert und erneut implementiert wird, führt der Broker die Neuimplementierung so durch, dass er alle Knoten im Fluss löscht und dann sie dann mit der neuen Konfiguration erneut erstellt.
Anmerkung: Beim Start einer Ausführungsgruppe wird kein Nachrichtenfluss erzeugt. Das Stoppen einer Ausführungsgruppe stoppt einfach alle Flüsse. Es löscht nicht den Fluss und beendet auch nicht den Prozess. Der Neustart einer Ausführungsgruppe startet die Nachrichtenflüsse, aber erzeugt die Nachrichtenflüsse nicht erneut.

Die benutzerdefinierte Erweiterung ruft innerhalb der Funktion 'cniCreateContext' die Funktionen cniCreateInputTerminal und cniCreateOutputTerminal auf, um die Ein- bzw. Ausgabeterminals für den Nachrichtenverarbeitungsknoten einzurichten.

Verarbeitung

Während der Verarbeitungsphase im Lebenszyklus eines benutzerdefinierten Nachrichtenverarbeitungsknotens wird die Nachricht umgewandelt, wenn eine Operation für die Eingabenachricht ausgeführt wird.

Wenn der Broker die Nachricht aus der Warteschlange abruft und diese Nachricht im Eingabeterminal Ihres benutzerdefinierten Knotens eintrifft, ruft der Broker die Implementierungsfunktion cniEvaluate auf. Mit Hilfe dieser Funktion wird entschieden, was mit der Nachricht geschehen soll.

Sie können in Ihrem benutzerdefinierten Nachrichtenverarbeitungsknoten eine Reihe knotenspezifischer Dienstprogrammfunktionen für die Nachrichtenverarbeitung verwenden, wie beispielsweise für den Zugriff auf die Nachrichtendaten, den Zugriff auf ESQL, die Umwandlung eines Nachrichtenobjekts oder die Weitergabe einer Nachricht. Diese Dienstprogrammfunktionen für den Knoten, die für die Verarbeitung der Nachricht verwendet werden, sollten in die Funktion cniEvaluate eingebettet werden.

Diese Schnittstelle generiert nicht automatisch eine untergeordnete Baumstruktur für eine Nachricht. Eine untergeordnete Eigenschaftenstruktur ist keine Voraussetzung für Nachrichten, sie kann jedoch hilfreich sein, um unabhängig vom Empfangsknoten eine konsistente Nachrichtenbaumstruktur zu erhalten. Soll in einer Nachricht eine untergeordnete Eigenschaftenbaumstruktur erstellt werden und wird ein benutzerdefinierter Empfangsknoten verwendet, dann müssen Sie die Struktur selbst generieren.

Löschen

Nachdem ein benutzerdefinierter Nachrichtenverarbeitungsknoten eine Nachricht verarbeitet hat, müssen Sie sicherstellen, dass der Knoten gelöscht wird, um alle Systemressourcen, die von ihm belegt wurden, und alle Datenbereiche für die Knoteninstanz (wie beispielsweise Kontexte, die bei der Erstellung oder Verarbeitung der Nachricht angefordert wurden) wieder freizugeben.

Die Instanz eines benutzerdefinierten Nachrichtenverarbeitungsknotens wird über die vom Broker aufgerufene Funktion cniDeleteNodeContext gelöscht.

Wenn die Instanz des Knotens gelöscht wird, ruft der Broker cniDeleteNodeContext auf. Die folgenden Ereignisse können dazu führen, dass ein Knoten gelöscht wird:
  • Kontrollierte Beendigung des Ausführungsgruppenprozesses
    • Broker wird gestoppt (Benutzer hat mqsistop ausgeführt).
    • Ausführungsgruppe wird erneut geladen (Benutzer hat mqsireload ausgeführt).
    • Innerhalb der Ausführungsgruppe ist ein schwer wiegender Fehler aufgetreten, der dazu führt, dass die Ausführungsgruppe erneut gestartet wird.
    Anmerkung: Dies schließt NICHT das Stoppen einer Ausführungsgruppe ein. Das Stoppen einer Ausführungsgruppe stoppt einfach alle Flüsse. Es löscht nicht den Fluss und beendet auch nicht den Prozess.
  • Nachrichtenfluss wird gelöscht. Zum Beispiel: Ein Nachrichtenfluss wird aus Sicht der Brookerverwaltung der Tools gelöscht.
  • Nachrichtenfluss wird erneut implementiert. Wenn ein Nachrichtenfluss geändert und erneut implementiert wird, führt der Broker die Neuimplementierung so durch, dass er alle Knoten im Fluss löscht und dann sie dann mit der neuen Konfiguration erneut erstellt.
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
as01394_