メッセージ・フロー・アプリケーション開発時に Message Broker Java™ API を使ってユーザー定義ノードを追加し、他のノードにユーザー定義ノードを接続します。
ユーザー定義ノードを追加および接続するために必要なコードは、組み込みノードやサブフロー・ノードで必要なコードと異なります。
ユーザー定義ノード用の Java コードを記述する場合、以下の情報に注意を払ってください。
- ユーザー定義ノードは、GenericNode クラスのインスタンスによってサポートされます。
ユーザー定義ノードをメッセージ・フローに追加するには、GenericNode のインスタンスを作成し、メッセージ・フロー・インスタンスに追加します。
- ユーザー定義ノードの既存のインスタンスを検索するには、getNodeByName() を呼び出して、返されたオブジェクトを GenericNode オブジェクトにキャストします。
- ユーザー定義ノードで定義されたターミナルが、この API で自動的に使用可能になることはありません。 GenericNode クラスのインスタンスを作成する場合、入出力ターミナルがリストされることはありません。 メソッド getInputTerminals() と getOutputTerminals() は空のリストを返します。
- GenericNode の入力ターミナルを取得するには、getInputTerminal() を呼び出し、汎用ノード上の既存のターミナル名を渡します。 このメソッドにより、入力ターミナルが返され、汎用ノードを含んでいるメッセージ・フロー・オブジェクトでそれが使用可能になります。 把握しているターミナル名を指定して getInputTerminal() を使用した後、getInputTerminals() を使用すると、この入力ターミナルが返されます。
- GenericNode の出力ターミナルを取得するには、getOutputTerminal() を呼び出し、汎用ノード上の既存のターミナル名を渡します。 このメソッドにより、出力ターミナルが返され、汎用ノードを含んでいるメッセージ・フロー・オブジェクトでそれが使用可能になります。 把握しているターミナル名を指定して getOutputTerminal() を使用した後、getOutputTerminals() を使用すると、この出力ターミナルが返されます。
以下の例は、ユーザー定義ノードをメッセージ・フローに追加し、それを組み込みノードに接続する方法を示しています。
- MQInput ノードが作成され、メッセージ・フローに追加されます。
- GenericNode クラスを使ってユーザー定義ノードが作成され、メッセージ・フロー・オブジェクトに追加されます。
- MQInput の静的出力ターミナルが変数 outputTerminal に割り当てられます。
- ユーザー定義ノードの入力ターミナルは、把握しているターミナル名 In を指定した getInputTerminal() メソッドにより、変数 inputTerminal に割り当てられます。
- connect() メソッドを使用してノードが接続されます。
- コードの最後のセクションでは、ユーザー定義ノード・インスタンスの getInputTerminals() メソッドを使用することにより、入力ノードがメッセージ・フローで使用できるようになったことを示します。
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());
}