Java での入力ノードの作成

始める前に

以下のトピックを読み、理解していることを確認してください。

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

Java ユーザー定義ノードは、.jar ファイルとして配布されます。 このトピックでは、 Java を使用して入力ノードを作成するために実行する必要のあるステップについて説明します。 以下のステップについて要約しています。
  1. 新規 Java プロジェクトの作成
  2. 入力ノード・クラスの宣言
  3. ノードのコンストラクターの定義
  4. ノード名の宣言
  5. 属性の宣言
  6. ノード機能のインプリメント
  7. ノードのインスタンスの削除

分散プラットフォーム上でブローカーをデプロイする予定の z/OS で、 Java ノードを開発しないでください。 これは、z/OS 上の Java のレベルが、分散プラットフォーム上で Java のレベルと互換性のある コードを作成しない可能性があるためです。

新規 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 ノードのソースを開発することができます。

入力ノード・クラスの宣言

MbInputNodeInterface をインプリメントし、 ブローカーのクラスパス (または LIL パス) に含められるすべてのクラスは、 入力ノードとしてブローカーに登録されます。 MbInputNodeInterface をインプリメントする場合は、 このクラスの run メソッドもインプリメントしなければなりません。 run メソッドは、 メッセージ・フローの開始を表し、 メッセージを公式化するデータを含んでいて、これをフローに伝搬します。 ブローカーは、スレッドが使用可能になると、 指定されたスレッド化モデルに従って run メソッドを呼び出します。

入力ノード・クラスを宣言するには、たとえば次のようにします。

package com.ibm.jplugins;

import com.ibm.broker.plugin.*;

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

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

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

入力ノードには、いくつかの出力ターミナルが関連付けられますが、 通常は入力ターミナルはありません。 ノードに出力ターミナルを追加するには、 ノードをインスタンス化するときに createOutputTerminal メソッドを使用します。 たとえば、3 つの出力ターミナルを持つノードを作成するには、 次のようにします。

public BasicInputNode() throws MbException
{
 createOutputTerminal ("out");
 createOutputTerminal ("failure");
 createOutputTerminal ("catch");
      setAttribute ("firstParserClassName","myParser");
      attributeVariable  = new String ("none");
}

ノード名の宣言

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

public static String getNodeName()
{
      return "BasicInputNode";
}
このメソッドが宣言されていない場合は、 Java API フレームワークが以下の規則に従ってデフォルトのノード名を作成します。
  • パッケージ名にはクラス名が付加されます。
  • ドットは除去され、 パッケージ名とクラス名の各部の最初の文字が大文字になります。
たとえば、 デフォルトでは以下のクラスにノード名 "ComIbmPluginsamplesBasicInputNode" が割り当てられます。
package com.ibm.pluginsamples;
public class BasicInputNode extends MbInputNode implements MbInputNodeInterface
{
   ...

属性の宣言

ノード属性は、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);
}

ノード機能のインプリメント

先に述べたとおり、ブローカーは run メソッドを呼び出して入力メッセージを作成します。 このメソッドは、入力ノードのためのすべてのアプリケーション処理機能を備えている必要があります。

デフォルトのメッセージ・パーサー属性のオーバーライド (オプション)

入力ノードは通常、 最初に入力メッセージを構文解析するメッセージ・パーサーを判別します。 たとえば、プリミティブ MQInput ノードは、 MQMD ヘッダーを構文解析するために MQMD パーサーが必要であることを指示します。 ユーザー定義入力ノードは、 デフォルトとして組み込まれる、オーバーライドも可能な以下の属性を使用することによって、 適切なヘッダーかメッセージ・パーサー、および構文解析の制御のモードを選択することができます。

rootParserClassName
ユーザー定義入力ノードによってサポートされているメッセージ形式を構文解析するルート・パーサーの名前を定義します。 デフォルトでは GenericRoot に設定されます。 これは、ブローカーにパーサーを割り振らせたりチェーニングするために提供されているルート・パーサーです。 おそらく、ノードでこの属性値を変更する必要はありません。
firstParserClassName
ビット・ストリームを構文解析する役割を持つパーサーのチェーンの中で、 最初のパーサーの名前を定義します。 デフォルトでは XML に設定されます。
messageDomainProperty
入力メッセージを構文解析するのに必要なメッセージ・パーサーの名前を定義するオプションの属性。サポートされる値は、MQInput ノードによってサポートされるものと同じです。 (MQInput ノードの詳細については、MQInput ノードを参照してだくさい。
messageSetProperty
MRM パーサーが messageDomainProperty 属性によって指定された場合にのみ、 Message Set フィールドのメッセージ・セットの ID (またはメッセージ・セット名) を定義するオプションの属性。
messageTypeProperty
MRM パーサーが messageDomainProperty 属性によって指定された場合にのみ、 MessageType フィールドのメッセージの ID を定義するオプションの属性。
messageFormatProperty
MRM パーサーが messageDomainProperty 属性によって指定された場合にのみ、 Message Format フィールドのメッセージの形式を定義するオプションの属性。

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

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

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

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