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.

Folgende APIs werden in dieser Phase aufgerufen:
  • cniCreateNodeContext. Diese API ordnet Speicher für die Erstellung der Instanz des benutzerdefinierten Knotens zu, in dem die Werte für konfigurierte Attribute gespeichert 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 teilt dem Broker mit, über welche Eingabeterminals der benutzerdefinierte Empfangsknoten verfügt (sofern verfügbar).
    Anmerkung: Der benutzerdefinierte Empfangsknoten verfügt nur über Eingabeterminals, wenn er auch als Nachrichtenverarbeitungsknoten fungiert. In diesem Fall sollte möglichst ein separater benutzerdefinierter Nachrichtenverarbeitungsknoten die Nachrichtenverarbeitung übernehmen, statt beide Operationen von einem hierdurch komplexeren Knoten durchführen zu lassen.
  • cniCreateOutputTerminal. Diese API wird innerhalb der API 'cniCreateNodeContext' aufgerufen und teilt dem Broker mit, über welche Ausgabeterminals der benutzerdefinierte Empfangsknoten verfügt.
  • cniSetAttribute. Diese API wird vom Broker aufgerufen, um die Werte für die Attribute des benutzerdefinierten Knotens zu setzen.

In dieser Phase wird die Struktur 'CciTerminal' erstellt. Dies erfolgt beim Aufruf von 'cniCreateTerminal'.

Verarbeitung

Die Verarbeitungsphase beginnt mit dem Aufruf der Funktion cniRun durch den Broker. Mit Hilfe der Funktion cniRun ermittelt der Broker, auf welche Weise die Nachrichtenverarbeitung erfolgen muss, u. a. die Ermittlung, in welcher Domäne eine Nachricht definiert ist sowie der Aufruf des entsprechenden Parsers für die Domäne.

Aus den Thread-Pool des Nachrichtenflusses wird ein Thread abgerufen und in der Methode 'run' des Empfangsknotens gestartet. Der Thread stellt eine Verbindung zum Warteschlangenmanager des Brokers her und erhält diese während seiner gesamten Lebensdauer 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. Wurde für den Nachrichtenfluss die Verwendung mehrerer Threads konfiguriert, ist der Thread-Versand aktiviert.

Die Nachrichtendaten können jetzt weitergegeben werden.

Der Broker ruft in dieser Phase folgende APIs auf:
  • cniRun. Diese Funktion wird vom Broker aufgerufen, um zu ermitteln, auf welche Weise die Eingabenachricht verarbeitet werden soll.
  • cniSetInputBuffer. Diese Funktion stellt einen Eingabepuffer bereit bzw. teilt dem Broker dessen Position mit. Der Puffer wird einem Nachrichtenobjekt zugeordnet.

Vernichtung

Vernichtet wird ein benutzerdefinierter Empfangsknoten, wenn der Nachrichtenfluss erneut implementiert wird bzw. wenn mit mqsistop der Ausführungsgruppenprozess gestoppt wird. Sie können den Knoten durch Implementierung der Funktion cniDeleteNodeContext vernichten.

Wird ein benutzerdefinierter Knoten auf eine dieser Weisen vernichtet, sollte vom Knoten verwendeter Speicher sowie Ressourcen (z. B. Sockets) freigegeben werden.

Der Broker ruft in dieser Phase folgende APIs auf:
  • cniDeleteNodeContext. Diese Funktion wird vom Broker aufgerufen, um die Instanz des Empfangsknotens zu vernichten.
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 18.05.2006
as01391_