cniRun

この関数は、ノードを入力ノードとして宣言します。 これはメッセージ処理ノードおよび出力ノードでは使用されません。また、cniEvaluate を呼び出す必要はありません。 ブローカーはスレッドを割り振り、そのスレッドでこの関数を呼び出します。

定義されている場所 タイプ メンバー
CNI_VFT 条件付き iFpRun

構文

int cniRun(
  CCiContext*  context,
  CCiMessage*  localEnvironment,
  CciMessage*  exceptionList,
  CciMessage*  message
);

パラメーター

context
ノードによって作成され、cniCreateNodeContext 関数によって戻される、ノードのインスタンスのコンテキストのアドレス (入力)。
localEnvironment
入力ローカル環境オブジェクトのアドレス (入力)。

旧バージョンとの互換性のために、このパラメーターを destinationList として参照することができます。

exceptionList
メッセージの例外リストのアドレス (入力)。
message
データが接続されるメッセージ・オブジェクトのアドレス (入力)。

cniSetInputBuffer を呼び出すことにより、ユーザー定義ノードはビット・ストリームをこのメッセージに関連付けることができます。このメッセージのツリーへのデータの取り込みはサポートされていないため、cniAddAsLastChild または cniCreateElementAsLastChildFromBitstream などの関数の呼び出しは効果がありません。メッセージ全体として構文解析されるバッファーを提供する代わりに、ツリーの一部を作成するためには、cniCreateMessage を使用して新規メッセージを作成する必要があります。

例えば、メッセージのペイロードの一部として使用されるビット・ストリームがあり、さらにヘッダーも追加したい場合には、以下のステップを実行します。
  1. cniCreateMessage を使用して新規メッセージを作成します。
  2. cniCreateElementAsLastChildUsingParser などの構文エレメント・アクセス・ユーティリティー関数を使用し、この新規メッセージのルート・エレメントに渡すことにより、この新規メッセージにヘッダー部分を作成します。
  3. cniCreateElementAsLastChild などの関数を使用して、ヘッダーにフィールドを追加します。
  4. cniCreateElementAsLastChildFromBitstream を呼び出してビット・ストリームを構文解析し、この新規メッセージのルート・エレメントに渡すことにより、メッセージの本体を作成します。

戻り値

この関数はブローカーによってループの一部として呼び出されます。 戻り値の意味は以下のとおりです。

CCI_TIMEOUT
入力ノードは、入力データを受信しませんでした。この値は、メッセージ・フローの再構成が要求される場合、制御がブローカーに戻されるべきである、という意味です。ユーザー定義入力ノードは規則的に戻り、制御をブローカーに戻します。
CCI_SUCCESS_CONTINUE
メッセージが正常に処理されました。 ブローカーはデフォルトのトランザクション・コミット処理を実行します。入力ノードが処理を継続できるようにするため、 そのノードの cniRun インプリメンテーション関数が直ちに呼び出されます。
CCI_SUCCESS_RETURN
メッセージが正常に処理されました。 ブローカーはデフォルトのトランザクション・コミット処理を実行します。入力ノードは、スレッドが必要ではなく、 メッセージ・フローのスレッド・プールに戻すと判別しています。 この処理が、唯一のまたは最後のアクティブ・スレッドで実行されている場合、ブローカーはその最後のスレッドがプールに戻されないようにします。そうしないと、別のスレッドをディスパッチするために使用できるアクティブ・スレッドがなくなります。この状況で、ブローカーは、CCI_SUCCESS_CONTINUE が戻されたかのように、cniRun インプリメンテーション関数を直ちに呼び出します。
CCI_FAILURE_CONTINUE
メッセージの処理中にエラーが検出され、 ノードはトランザクション・ロールバック処理を実行するように要求しています。 入力ノードの cniRun インプリメンテーション関数が直ちに呼び出されます。
CCI_FAILURE_RETURN
メッセージの処理中にエラーが検出され、 ノードはトランザクション・ロールバック処理を実行するように要求しています。 ただし、入力ノードは、スレッドが必要ではなく、 メッセージ・フローのスレッド・プールに戻すことができると判別しています。 この処理が、最後のアクティブ・スレッドで実行されている場合、ブローカーはその最後のスレッドがプールに戻されないようにします。そうしないと、別のスレッドをディスパッチするために使用できるアクティブ・スレッドがなくなります。この状況で、ブローカーは、CCI_FAILURE_CONTINUE が戻されたかのように、cniRun インプリメンテーション関数を直ちに呼び出します。
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
最終更新 : 2009-02-20 12:44:34

as07480_