ページの先頭行へ戻る
Interstage Application Server アプリケーション作成ガイド(コンポーネントトランザクションサービス編)

5.2.2 プログラミングの流れ

5.2.2.1 プログラミングの概要

  クライアントオブジェクトとサーバオブジェクト内のプロセスをバインドするために、セションIDを使用します。
  セションIDをサーバオブジェクトの呼び出し時に、パラメタに設定することによりシステムがクライアントオブジェクトとサーバオブジェクト内のプロセスをバインドします。
  セションID採番方法は、“5.1 セションIDを採番するためのトランザクションアプリケーションの作成”を参照してください。
  セションIDのパラメタへの設定方法は以下のようになります。

  1. オクテット型の配列で配列サイズは48バイトのパラメタを含むオペレーションをIDL定義に定義します。

  2. IDL定義で定義したパラメタ名をワークユニット定義に定義します。

  3. サーバオブジェクト呼び出し時に、採番したセションIDを1.および2.で定義したパラメタに設定します。

  4. サーバオブジェクトでは、バインドを継続したい場合、セション継続APIを発行します。

  5. 2回目以降の呼び出し時も、3.の手順を行います。

  6. バインドを継続する必要がなくなった場合、セション継続APIを発行せずにサーバオブジェクトから復帰します。

IDL定義

  IDL定義の記述例を示します。

ワークユニット定義

  ワークユニット定義の記述例を示します。

  プロセスバインド管理機能を使用するために必要なワークユニット定義を以下に示します。
  [Application Program]セクションに以下の定義を設定します。

Bind Type:バインド形式

  バインド形式を指定します。

  "DISABLE" : プロセスバインド機能を使用しない。
  "PROCESS " : プロセス
  "INSTANCE" : インスタンス

  プロセスバインド機能を使用する場合、必須です。

  Application Language:(アプリケーション言語)がC言語または、COBOL(COBOLはWindows(R)版、Solaris版のみです)の場合、"PROCESS "を設定してください。Application Language:(アプリケーション言語)がC++言語の場合、"INSTANCE"設定してください。

SessionID Param:セションID通知パラメタ

  IDL定義で定義したセションIDを設定するためのパラメタ名を設定します。

  プロセスバインド機能を使用する場合、必須です。

Method Name to Begin Session:セションを開始するメソッド名

  セションを開始するメソッド名を設定します。

  プロセスバインド機能を使用する場合、必須です。

Maximum Session Active Time for Client:クライアント思考時間の最大時間

  クライアント思考時間の最大時間を秒単位で設定します。

  0~86400の整数値。

  本ステートメントは省略可能です。

  本ステートメントを省略した場合、省略値として300が設定されます。

  0を指定した場合は時間監視を行いません。

Recover Exit Program:異常出口プログラム

  クライアント思考時間超過となった場合に呼び出される異常出口プログラム名を設定します。

  本ステートメントは、Application Language:(アプリケーション言語)がC言語または、COBOL(COBOLはWindows(R)版、Solaris版のみです)の場合のみ有効です。Application Language:(アプリケーション言語)がC++言語の場合、本ステートメントは無視されます。

  本ステートメントは省略可能です。

Request Assignment Mode:要求メッセージ振り分け方式

  クライアントからの要求メッセージを、要求待ちのサーバアプリケーションプロセスに振り分ける方式を指定します。

  プロセスバインド機能を使用する場合、本ステートメントに必ず“FIFO”を指定してください。

ワークユニット定義時の注意事項

5.2.2.2 C言語・COBOLの場合の通信イメージ

  C言語・COBOLの場合の通信イメージを以下に示します。
  なお、COBOLはWindows(R)版、Solaris版のみ使用できます。

  1. セションIDをA::B::op1のワークユニット定義に定義したパラメタに設定します。

  2. A::B::op1を呼び出します。

  3. バインド情報を作成します。

  4. op1をスケジュールします。

  5. セション継続APIを発行します。

  6. セション継続APIが発行されているので、バインド情報を削除せずに保持します。

  7. セションIDをA::B::op2のワークユニット定義に定義したパラメタに設定します。

  8. A::B::op2を呼び出します。

  9. op2をスケジュールします。

  10. セション継続APIを発行します。

  11. セション継続APIが発行されているので、バインド情報を削除せずに保持します。

  12. セションIDをA::B::op3のワークユニット定義に定義したパラメタに設定します。

  13. A::B::op3を呼び出します。

  14. op3をスケジュールします。

  15. セション継続APIが発行されていないので、バインド情報を削除します。

5.2.2.3 C++言語の場合の通信イメージ

  C++言語の場合の通信イメージを以下に示します。

  1. セションIDをA::B::op1のワークユニット定義に定義したパラメタに設定します。

  2. A::B::op1を呼び出します

  3. セションIDに対応したインスタンスを生成します。

  4. 生成したインスタンスのop1をスケジュールします。

  5. セション継続APIを発行します。

  6. セション継続APIが発行されているので、インスタンスを削除せずに保持します。

  7. セションIDをA::B::op2のワークユニット定義に定義したパラメタに設定します。

  8. A::B::op2を呼び出します。

  9. セションIDに対応し、保持されているインスタンスに切り替えます。

  10. op2をスケジュールします。

  11. セション継続APIを発行します。

  12. セション継続APIが発行されているので、インスタンスを削除せずに保持します。

  13. セションIDをA::B::op3のワークユニット定義に定義したパラメタに設定します。

  14. A::B::op3を呼び出します

  15. セションIDに対応し、保持されているインスタンスに切り替えます。

  16. op3をスケジュールします。

  17. セション継続APIが発行されていないので、セションIDに対応するインスタンスを削除します。