Über die Message
Broker-Java™-API können bei der Entwicklung von Nachrichtenflussanwendungen benutzerdefinierte Knoten hinzugefügt und mit anderen Knoten verbunden werden.
Der Code, der zum Hinzufügen und Verbinden benutzerdefinierter Knoten erforderlich ist,
unterscheidet sich von dem Code, der für integrierte Knoten und untergeordnete
Nachrichtenflussknoten erforderlich ist.
Beim Erstellen von
Java-Code für benutzerdefinierte Knoten müssen
folgende Aspekte berücksichtigt werden:
- Benutzerdefinierte Knoten werden von Instanzen der Klasse
GenericNode unterstützt.
Um Nachrichtenflüssen benutzerdefinierte
Knoten hinzuzufügen, können Sie Instanzen der Klasse GenericNode
erstellen und sie der Nachrichtenflussinstanz hinzufügen.
- Wenn Sie Instanzen eines benutzerdefinierten Knotens abrufen möchten, rufen Sie
die Methode getNodeByName() auf und setzen Sie das zurückgegebene
Objekt in ein Objekt der Klasse GenericNode um.
- Die Terminals, die Sie in den benutzerdefinierten Knoten definiert haben, sind in
der API nicht automatisch verfügbar. Wenn Sie eine Instanz der Klasse
GenericNode erstellen, sind darin weder Eingabe- noch Ausgabeterminals
aufgeführt. Die Methoden getInputTerminals()
und getOutputTerminals() geben leere Listen zurück.
- Führen Sie zum Abrufen eines Eingabeterminals für die Klasse GenericNode die
Methode getInputTerminal() aus und übergeben Sie den Terminalnamen, der auf dem
generischen Knoten vorhanden ist. Diese Methode gibt das Eingabeterminal zurück und stellt es in
dem Nachrichtenflussobjekt zur Verfügung, das den generischen Knoten enthält. Nachdem
Sie die Methode getInputTerminal() mit einem bekannten Terminalnamen
ausgeführt haben, wird beim Aufruf von getInputTerminals() dieser
Eingabeterminal zurückgegeben.
- Führen Sie zum Abrufen eines Ausgabeterminals für die Klasse GenericNode die
Methode getOutputTerminal() aus und übergeben Sie den Terminalnamen, der auf dem
generischen Knoten vorhanden ist. Diese Methode gibt das Ausgabeterminal zurück und stellt es in
dem Nachrichtenflussobjekt zur Verfügung, das den generischen Knoten enthält. Nachdem Sie die
Methode getOutputTerminal() mit einem bekannten Terminalnamen
ausgeführt haben, wird beim Aufruf von getOutputTerminals() dieser
Ausgabeterminal zurückgegeben.
Das folgende Beispiel zeigt, wie ein benutzerdefinierter Knoten zu einem Nachrichtenfluss
hinzugefügt und mit einem integrierten Knoten verbunden werden kann:
- Es wird ein MQInput-Knoten erstellt und zum
Nachrichtenfluss hinzufügt.
- Mithilfe der Klasse GenericNode wird ein benutzerdefinierter Knoten erstellt
und zum Nachrichtenflussobjekt hinzugefügt.
- Das statische Ausgabeterminal von
MQInput wird der Variablen
outputTerminal zugeordnet.
- Das Eingabeterminal des benutzerdefinierten
Knotens wird der Variablen inputTerminal zugeordnet, indem die
Methode getInputTerminal() mit dem bekannten Terminalnamen
In ausgeführt wird.
- Die Knoten werden mithilfe der Methode connect() miteinander verbunden.
- Der letzte Abschnitt des
Codes zeigt, dass der Eingabeknoten jetzt im Nachrichtenfluss zur Verfügung steht und in
der Methode getInputTerminals() der benutzerdefinierten
Knoteninstanz verwendet werden kann.
File msgFlow = new File("main.msgflow");
MessageFlow mf1 = FlowRendererMSGFLOW.read(msgFlow);
MQInputNode mqinNode = new MQInputNode();
mqinNode.setNodeName("My Input Node");
mqinNode.setQueueName("IN");
mf1.addNode(mqinNode);
GenericNode myNode = new GenericNode("MyUserDefinedNode");
myNode.setNodeName("MyNode");
mf1.addNode(myNode);
OutputTerminal outputTerminal = mqinNode.OUTPUT_TERMINAL_OUT;
InputTerminal inputTerminal = myNode.getInputTerminal("In");
mf1.connect(outputTerminal, inputTerminal);
InputTerminal[] inputTerminals = myNode.getInputTerminals();
System.out.println("Input terminals on my node:");
for (int i = 0; i < inputTerminals.length; i++) {
InputTerminal inputTerminal = inputTerminals[i];
System.out.println(inputTerminal.getName());
}