始める前に
WebSphere Message Broker では、SwitchNode および TransformNode という名前の 2 つのサンプル・ユーザー定義ノードのソースが準備されています。 これらのノードは現行の状態で使用することもできますし、変更を加えてもかまいません。
概念上、メッセージ処理ノードは何らかの形でメッセージを処理するために使用され、出力ノードはメッセージをビット・ストリームとして出力するために使用されます。 しかし、メッセージ処理ノードや出力ノードをコーディングするとき、 これらは基本的に同じものです。 出力ノードでメッセージ処理を実行することもできますし、同様に、メッセージ処理ノードを使用してメッセージをビット・ストリームとして出力することもできます。 単純化するため、 このトピックではメッセージ処理ノードとしてノードを主に参照していますが、 どちらのタイプのノードの機能についても取り上げます。
「Java 設定」パネルが表示されます。
MbNodeInterface をインプリメントし、 ブローカーのクラスパス (または LIL パス) に含められるすべてのクラスは、 メッセージ処理ノードとしてブローカーに登録されます。 MbNodeInterface をインプリメントする際は、 このクラスの evaluate メソッドもインプリメントする必要があります。 evaluate メソッドは、 フローに渡される各メッセージごとに、ブローカーによって呼び出されます。
package com.ibm.jplugins; import com.ibm.broker.plugin.*; public class BasicNode extends MbNode implements MbNodeInterface
ノードがインスタンス化されるときは、 ユーザーのノード・クラスのコンストラクターが呼び出されます。 これは、ノードのターミナルを作成し、属性のデフォルト値を初期設定する場所です。
メッセージ処理ノードには、 いくつかの入力ターミナルと出力ターミナルが関連付けられています。 メソッド createInputTerminal および createOutputTerminal は、 ノードがインスタンス化される時にノードにターミナルを追加するために使用されます。 たとえば、1 つの入力ターミナルと 2 つの出力ターミナルを持つノードを作成するには、 次のようにします。
public MyNode() throws MbException { // create terminals here createInputTerminal ("in"); createOutputTerminal ("out"); createOutputTerminal ("failure"); }
ノードの名前を宣言して、ノードがワークベンチに識別されるようにする必要があります。 すべてのノード名は末尾が "Node" でなければなりません。 名前は以下のメソッドを使用して宣言します。
public static String getNodeName() { return "BasicNode"; }
package com.ibm.pluginsamples; public class BasicNode extends MbNode implements MbNodeInterface { ...
ノード属性は、Java Bean プロパティーと同じ方法で宣言します。 属性の getter メソッドおよび setter メソッドはユーザーが作成しなければなりません。 API フレームワークは、Java Bean 内視規則を使用して属性名を推測します。 たとえば、以下の 2 つのメソッドを宣言するには、次のようにします。
private String attributeVariable; public String getFirstAttribute() { return attributeVariable; } publc void setFirstAttribute(String value) { attributeVariable = value; }
ブローカーは、このノードが firstAttribute という属性を持つことを推測します。 この名前は、内部クラス・メンバー変数名ではなく、get または set メソッドの名前に由来します。 属性はストリングとしてしか公開できないので、 get または set メソッドで、数値タイプとストリングの変換を行う必要があります。 たとえば、次のメソッドは timeInSeconds という属性を定義します。
int seconds; public String getTimeInSeconds() { return Integer.toString(seconds); } public void setTimeInSeconds(String value) { seconds = Integer.parseInt(value); }
先に述べたとおり、 メッセージ処理ノードまたは出力ノードの場合、 MbNodeInterface で定義されている、 evaluate メソッドをインプリメントする必要があります。 これは、メッセージを処理するためにブローカーによって呼び出されます。 このメソッドは、ノード用のすべての処理関数を提供します。
メッセージ・フロー・データ (メッセージ、グローバル環境、ローカル環境、および例外リスト) が、 ノードの入力ターミナルで受信されます。
onDelete メソッドは次のようにしてインプリメントします。
public void onDelete() { // perform node cleanup if necessary }