Java でのメッセージ処理ノードまたは出力ノードの作成

始める前に

WebSphere Message Broker では、SwitchNode および TransformNode という名前の 2 つのサンプル・ユーザー定義ノードのソースが準備されています。 これらのノードは現行の状態で使用することもできますし、変更を加えてもかまいません。

概念上、メッセージ処理ノードは何らかの形でメッセージを処理するために使用され、出力ノードはメッセージをビット・ストリームとして出力するために使用されます。 しかし、メッセージ処理ノードや出力ノードをコーディングするとき、 これらは基本的に同じものです。 出力ノードでメッセージ処理を実行することもできますし、同様に、メッセージ処理ノードを使用してメッセージをビット・ストリームとして出力することもできます。 単純化するため、 このトピックではメッセージ処理ノードとしてノードを主に参照していますが、 どちらのタイプのノードの機能についても取り上げます。

新規 Java プロジェクトの作成

Java ノードは、次のように、ワークベンチから、準備されている plug-in development environment (PDE) を使用して作成できます。 このためには、次のようにして新規 Java プロジェクトを作成する必要があります。
  1. 「プラグイン開発」パースペクティブに切り替えます。
  2. 「ファイル」>「新規」>「プロジェクト」とクリックします。 左方のメニューから「Java」を選択してから、右方のメニューから「Java プロジェクト」を選択します。
  3. プロジェクトに名前を付けます。

    「Java 設定」パネルが表示されます。

  4. 「ライブラリー」タブを選択して、「外部 JAR の追加」をクリックします。
  5. install_dir¥classes¥jplugin2.jar を選択します。
  6. 「その他」タブのプロンプトに従って、他のビルド設定を定義します。
  7. 「終了」をクリックします。
このようにしたら、次はこのプロジェクトの中で Java ノードのソースを開発することができます。

メッセージ処理ノード・クラスの宣言

MbNodeInterface をインプリメントし、 ブローカーのクラスパス (または LIL パス) に含められるすべてのクラスは、 メッセージ処理ノードとしてブローカーに登録されます。 MbNodeInterface をインプリメントする際は、 このクラスの evaluate メソッドもインプリメントする必要があります。 evaluate メソッドは、 フローに渡される各メッセージごとに、ブローカーによって呼び出されます。

メッセージ処理ノード・クラスを宣言するには、たとえば次のようにします。
package com.ibm.jplugins;

import com.ibm.broker.plugin.*;

public class BasicNode extends MbNode implements MbNodeInterface
次のようにして、ワークベンチで実行できます。
  1. 「ファイル」>「新規」>「クラス」をクリックします。
  2. パッケージおよびクラス名フィールドに適切な値を設定します。
  3. 「スーパークラス」テキスト・フィールドのテキストを削除し、「ブラウズ」をクリックします。
  4. MbNode を選択して、「OK」をクリックします。
  5. 「インターフェース」テキスト・フィールドの横にある「追加」ボタンをクリックして、 MbNodeInterface を選択します。
  6. 「終了」をクリックします。

ノードのコンストラクターの定義

ノードがインスタンス化されるときは、 ユーザーのノード・クラスのコンストラクターが呼び出されます。 これは、ノードのターミナルを作成し、属性のデフォルト値を初期設定する場所です。

メッセージ処理ノードには、 いくつかの入力ターミナルと出力ターミナルが関連付けられています。 メソッド createInputTerminal および createOutputTerminal は、 ノードがインスタンス化される時にノードにターミナルを追加するために使用されます。 たとえば、1 つの入力ターミナルと 2 つの出力ターミナルを持つノードを作成するには、 次のようにします。

public MyNode() throws MbException
{
  // create terminals here
  createInputTerminal ("in");
  createOutputTerminal ("out");
  createOutputTerminal ("failure");
}

ノード名の宣言

ノードの名前を宣言して、ノードがワークベンチに識別されるようにする必要があります。 すべてのノード名は末尾が "Node" でなければなりません。 名前は以下のメソッドを使用して宣言します。

public static String getNodeName()
{
      return "BasicNode";
}
このメソッドが宣言されていない場合は、 Java API フレームワークが以下の規則に従ってデフォルトのノード名を作成します。
  • パッケージ名にはクラス名が付加されます。
  • ドットは除去され、 パッケージ名とクラス名の各部の最初の文字が大文字になります。
たとえば、 デフォルトでは以下のクラスにノード名 "ComIbmPluginsamplesBasicNode" が割り当てられます。
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 メソッドをインプリメントする必要があります。 これは、メッセージを処理するためにブローカーによって呼び出されます。 このメソッドは、ノード用のすべての処理関数を提供します。

evaluate メソッドには、ブローカーによって渡される以下の 2 つのパラメーターがあります。
  1. MbMessageAssembly。 これには、適切なメソッドを使用してアクセスできる以下のオブジェクトが含まれています。
    • 着信メッセージ
    • ローカル環境
    • グローバル環境
    • 例外リスト
  2. メッセージが着信した入力ターミナル。

メッセージ・フロー・データ (メッセージ、グローバル環境、ローカル環境、および例外リスト) が、 ノードの入力ターミナルで受信されます。

ノードのインスタンスの削除

ノードのインスタンスは、次のいずれかの場合に削除します。
  • ブローカーがシャットダウンされた。
  • ノードまたはノードを含むメッセージ・フローを除去し、 構成を再デプロイした。
ノードの削除中は、 ノードがソケットの終了などの終結処理操作を実行できるよう、 ノードに情報が通知されるようにする必要がある場合があります。 ノードがオプションの onDelete メソッドをインプリメントしていれば、 ノードが削除される前にこれがブローカーによって呼び出されます。

onDelete メソッドは次のようにしてインプリメントします。

public void onDelete()
{
    // perform node cleanup if necessary
}
関連資料
例外リスト構造
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2005 Last updated: 11/07/2005
as09970_