Lebenszyklus von benutzerdefinierten Empfangsknoten in C

In diesem Abschnitt werden die verschiedenen Phasen im "Betriebsleben" eines in C geschriebenen benutzerdefinierten Empfangsknotens beschrieben. Folgende Phasen werden hier abgehandelt:

Registrierung

In der Registrierungsphase ermittelt der Broker, welche Ressourcen verfügbar sind und welche LIL-Dateien diese bereitstellen. In diesem Fall handelt es sich bei den verfügbaren Ressourcen um Knoten. Diese Phase beginnt mit dem Start einer Ausführungsgruppe. Beim Start einer Ausführungsgruppe werden die LIL-Dateien geladen. Der Broker untersucht sie darauf, welche Ressourcen sie bereitstellen können.

In der Registrationsphase wird eine CciFactory-Struktur erstellt, wenn der benutzerdefinierte Knoten cniCreateNodeFactory aufruft.

Folgende APIs ruft der Broker in dieser Phase auf:
  • biGetMessageflowNodeFactory
  • bipGetParserFactory
Folgendes API wird in dieser Phase vom benutzerdefinierten Knoten aufgerufen:
  • cniCreateNodeFactory

Instanzerstellung

Eine Instanz eines benutzerdefinierten Empfangsknotens wird erstellt, wenn mit dem Befehl mqsistart der Ausführungsgruppenprozess gestartet bzw. erneut gestartet wird bzw. ein mit dem Knoten verknüpfter Nachrichtenfluss implementiert wird.

Im Verlauf dieser Phase werden die folgende APIs aufgerufen:
  • cniCreateNodeContext. Diese API legt Speicher für die Instanzen des benutzerdefinierten Knotens an, in dem die Werte für die konfigurierten Attribute abgelegt werden. Diese API wird für jeden Nachrichtenfluss, der den benutzerdefinierten Empfangsknoten verwendet, einmal aufgerufen.
  • cniCreateInputTerminal. Diese API wird innerhalb der API 'cniCreateNodeContext' aufgerufen und soll dem Broker die Eingabeterminals (sofern vorhanden) melden, über die der benutzerdefinierte Empfangsknoten verfügt.
    Anmerkung: Der benutzerdefinierte Knoten verfügt nur dann über Eingabeterminals, wenn er auch als Knoten für die Nachrichtenverarbeitung fungiert. In diesem Fall ist es in der Regel vorteilhafter, einen eigenen benutzerdefinierten Knoten für die Nachrichtenverarbeitung zu verwenden, anstatt beide Vorgänge von einem einzigen komplexen Knoten ausführen zu lassen.
  • cniCreateOutputTerminal. Diese API wird innerhalb der API 'cniCreateNodeContext' aufgerufen und soll dem Broker die Ausgabeterminals melden, über die der benutzerdefinierte Empfangsknoten verfügt.
  • cniSetAttribute. Diese API wird vom Broker aufgerufen, um die Werte für die konfigurierten Attribute des benutzerdefinierten Knotens zu setzen.

Im Verlauf dieser Phase wird eine CciTerminal-Struktur erstellt. Diese Struktur wird beim Aufruf von 'cniCreateTerminal' erstellt.

Verarbeitung

Die Verarbeitungsphase beginnt mit dem Aufruf der Funktion cniRun durch den Broker. Der Broker ermittelt anhand der Funktion cniRun, wie eine Nachricht verarbeitet werden muss; dazu gehört auch die Ermittlung der Domäne, in der eine Nachricht definiert ist, und der Aufruf des entsprechenden Parsers für diese Domäne.

Vom Thread-Pool des Nachrichtenflusses wird ein Thread angefordert und in der 'run'-Methode des Empfangsknotens gestartet. Der Thread stellt eine Verbindung zum Warteschlangenmanager des Brokers her und hält diese Verbindung über seine gesamte Lebensdauer hinweg aufrecht. Nachdem ein Thread angelegt worden ist, geht der Knoten in eine Nachrichtenverarbeitungsschleife, solange er auf das Eintreffen einer Nachricht wartet. In der Schleife bleibt er, bis eine Nachricht eingetroffen ist. Wenn der Nachrichtenfluss für die Verwendung mehrerer Threads konfiguriert ist, wird die Threadzuteilung aktiviert.

Die Nachrichtendaten können jetzt weitergegeben werden.

Vom Broker wird während dieser Phase die folgende API aufgerufen:
  • cniRun. Diese Funktion wird vom Broker aufgerufen, um festzustellen, wie die Nachricht verarbeitet werden soll.
  • cniSetInputBuffer. Diese Funktion stellt einen Eingabepuffer zur Verfügung bzw. informiert den Broker darüber, wo sich dieser Puffer befindet, und ordnet diesen einem Nachrichtenobjekt zu.

Löschen

Vernichtet wird ein benutzerdefinierter Empfangsknoten, wenn der Nachrichtenfluss erneut implementiert wird bzw. wenn mit mqsistop der Ausführungsgruppenprozess gestoppt wird. Der Knoten kann durch Implementierung der Funktion cniDeleteNodeContext gelöscht werden.

Wird ein benutzerdefinierter Empfangsknoten auf einem dieser Wege gelöscht, sollten Sie den gesamten Speicher, der diesem Knoten zugeordnet ist, sowie alle von diesem Knoten verwendeten Ressourcen (wie beispielsweise Sockets) wieder freigeben.

Vom Broker wird während dieser Phase die folgende API aufgerufen:
  • cniDeleteNodeContext. Diese Funktion wird vom Broker zum Löschen der Empfangsknoteninstanz aufgerufen.
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
as01391_