Beim Ausführungsmodell handelt es sich um ein System, mit dem Nachrichtenflüsse über eine Reihe von Knoten hinweg gestartet werden.
Beim Initialisieren einer Ausführungsgruppe werden der Laufzeitumgebung die geeigneten LIL-Dateien (Dateien der ladbaren Implementierungsbibliothek)
und PAR-Dateien (Plug-in-Archivdateien) zur Verfügung gestellt. Der Laufzeitprozess der Ausführungsgruppe wird gestartet und erstellt einen zugeordneten Konfigurationsthread. Sie müssen sicherstellen, dass ein benutzerdefinierter Knoten sicher für Threads ist. Wenn ein Knoten eine Variable über mehrere Threads aktualisiert, muss eine geeignete Sperre vorhanden sein. In Hinsicht dieses Threading-Modells sollten Sie in Ihrer Implementierung benutzerdefinierter Knoten keinerlei Kompromisse eingehen. Beachten Sie die folgenden Punkte:
- Eine an einen Nachrichtenfluss gesendete Nachricht wird nur von dem Thread verarbeitet, der sie
empfangen hat.
- Eine einzelne Instanz einer benutzerdefinierten Erweiterung wird möglicherweise gleichzeitig in mehreren Threads aufgerufen.
- Die Ausführungsumgebung des Nachrichtenflusses basiert auf demselben Konzept wie die prozedurale Programmierung. Knoten, die in einen Nachrichtenfluss eingefügt werden, sind wie Subroutinen, die über
eine Funktionsaufrufschnittstelle aufgerufen werden. Allerdings wird das Ausführungsmodell nicht als eine "Aufruf-Rückgabe"-Schnittstelle bezeichnet, bei der Parameter in Form von Eingabenachrichtendaten übergeben werden, sondern als "Weitergabe-Rückgabe"-Modell.
Angenommen, Sie haben einen Nachrichtenfluss, in dem Sie sowohl benutzerdefinierte Knoten als auch Parser verwenden. Ein benutzerdefinierter Knoten wird für die Nachrichtenverarbeitung verwendet, ein benutzerdefinierter Parser für die Syntaxanalyse von Nachrichten; sowohl Knoten als auch Parser enthalten Implementierungsfunktionen. Der Broker ruft diese Implementierungsfunktionen, oder Rückruffunktionen, immer dann auf, wenn besondere Ereignisse eintreten:
- Wird vom Nachrichtenfluss eine Eingabenachricht empfangen und an den benutzerdefinierten Knoten weitergegeben:
- Im Fall von Knoten in C ruft der Broker für den benutzerdefinierten Knoten die Funktion cniEvaluate auf. Weitere Informationen hierzu finden Sie unter cniEvaluate.
- Im Fall von Knoten in Java™ ruft der Broker die Methode evaluate auf, die vom betreffenden benutzerdefinierten Knoten implementiert ist.
- Zur Abfrage der Nachricht, um festzustellen, wie mit ihr verfahren werden soll, ruft der benutzerdefinierte Knoten eine C-Dienstprogrammfunktion oder eine Java-Methode auf (je nachdem, in welcher Programmiersprache der Knoten erstellt wurde).
Der Broker ruft dann über eine der Implementierungsfunktionen den benutzerdefinierten Parser auf, beispielsweise cpiParseFirstChild. Bei dieser Funktion wird der Parser angewiesen, den Syntaxanalysebaum zu erstellen. Der Parser erstellt diesen Strukturbaum über den Aufruf von Dienstprogrammfunktionen, die die Elemente dieses Syntaxanalysebaums erstellen, beispielsweise cpiCreateElement.
Der Parser kann vom Broker mehrmals aufgerufen werden.