メッセージ処理ノードは何らかの形でメッセージを処理するために使用され、出力ノードはメッセージをビット・ストリームとして生成するために使用されます。
メッセージ処理ノードまたは出力ノードをコーディングする場合、ノードは基本的に同じサービスを提供します。 出力ノードでメッセージ処理を実行することもできますし、メッセージ処理ノードを使用してメッセージをビット・ストリームとして送信することもできます。 単純化するため、このトピックではメッセージ処理ノードとしてノードを主に参照していますが、どちらのタイプのノードの機能についても取り上げます。
ロード可能インプリメンテーション・ライブラリー (LIL) は、C ノードのインプリメンテーション・モジュールです。 LIL は共用ライブラリーまたはダイナミック・リンク・ライブラリー (DLL) としてインプリメントされますが、ファイル拡張子は .dll ではなく .lil です。
ノード用に作成する C ノード・インプリメンテーション関数の詳細については、C ノード・インプリメンテーション関数を参照してください。 ランタイム・ブローカーにインプリメントされた C ノード・ユーティリティー関数を呼び出して、ノード操作に役立てることもできます。C ノード・ユーティリティー関数を参照してください。
サンプルに関する情報は、WebSphere Message Broker Toolkit に統合されているインフォメーション・センター、またはオンライン・インフォメーション・センターを使用する場合にのみ表示できます。 サンプルは、WebSphere Message Broker Toolkit に統合されているインフォメーション・センターを使用する場合にのみ実行できます。
ブローカーに対してユーザー定義ノードを宣言して定義するには、初期化関数 bipGetMessageflowNodeFactory を LIL に含めます。 以下のステップは、構成スレッド上で行われ、ブローカーが初期化関数をどのようにして呼び出し、初期化関数がユーザー定義ノードをどのようにして宣言および定義するかについての概要です。
ノードをインスタンス化するには、次のようにします。
属性は、ブローカーを開始するとき、 あるいは新しい値を持つメッセージ・フローを再デプロイするときに設定します。 構成スレッド上のユーザー・コードを呼び出すブローカーによって、属性が設定されます。 コードでは、後にメッセージを処理するときに使用するために、 そのノードのコンテキスト・エリアにこれらの属性を保管する必要があります。
{
const CciChar* ucsAttr = CciString("nodeTraceSetting", BIP_DEF_COMP_CCSID) ;
insAttrTblEntry(p, (CciChar*)ucsAttr, CNI_TYPE_INTEGER);
_setAttribute(p, (CciChar*)ucsAttr, (CciChar*)constZero);
free((void *)ucsAttr) ;
}
{
const CciChar* ucsAttr = CciString("nodeTraceOutfile", BIP_DEF_COMP_CCSID) ;
insAttrTblEntry(p, (CciChar*)ucsAttr, CNI_TYPE_STRING);
_setAttribute(p, (CciChar*)ucsAttr, (CciChar*)constSwitchTraceLocation);
free((void *)ucsAttr) ;
}
ブローカーがキューからメッセージを取り出し、 そのメッセージがユーザー定義のメッセージ処理ノードまたは出力ノードの入力ターミナルに到着すると、 ブローカーはインプリメンテーション関数 cniEvaluate を呼び出します。 この関数はメッセージ処理スレッド上に呼び出され、メッセージを使用して何を行うかを決定します。 特に追加のインスタンスが使用される場合に、この関数はマルチスレッド上に呼び出される場合もあります。
ノードが削除された場合には、ブローカーは cniDeleteNodeContext 関数を呼び出します。 この関数は、cniCreateNodeContext と同じスレッドで開始されます。 この関数を使用して、ユーザー定義ノードが使用していたすべてのリソースを解放します。 以下に例を示します。
void _deleteNodeContext(
CciContext* context
){
static char* functionName = (char *)"_deleteNodeContext()";
free ((void*) context);
return;
}