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