クライアントオブジェクトとサーバオブジェクト内のプロセスをバインドするために、セションIDを使用します。
セションIDをサーバオブジェクトの呼び出し時に、パラメタに設定することによりシステムがクライアントオブジェクトとサーバオブジェクト内のプロセスをバインドします。
セションID採番方法は、“5.1 セションIDを採番するためのトランザクションアプリケーションの作成”を参照してください。
セションIDのパラメタへの設定方法は以下のようになります。
オクテット型の配列で配列サイズは48バイトのパラメタを含むオペレーションをIDL定義に定義します。
IDL定義で定義したパラメタ名をワークユニット定義に定義します。
サーバオブジェクト呼び出し時に、採番したセションIDを1.および2.で定義したパラメタに設定します。
サーバオブジェクトでは、バインドを継続したい場合、セション継続APIを発行します。
2回目以降の呼び出し時も、3.の手順を行います。
バインドを継続する必要がなくなった場合、セション継続APIを発行せずにサーバオブジェクトから復帰します。
IDL定義の記述例を示します。
ワークユニット定義の記述例を示します。
プロセスバインド管理機能を使用するために必要なワークユニット定義を以下に示します。
[Application Program]セクションに以下の定義を設定します。
バインド形式を指定します。
"DISABLE" : プロセスバインド機能を使用しない。
"PROCESS " : プロセス
"INSTANCE" : インスタンス
プロセスバインド機能を使用する場合、必須です。
Application Language:(アプリケーション言語)がC言語または、COBOL(COBOLはWindows(R)版、Solaris版のみです)の場合、"PROCESS "を設定してください。Application Language:(アプリケーション言語)がC++言語の場合、"INSTANCE"設定してください。
IDL定義で定義したセションIDを設定するためのパラメタ名を設定します。
プロセスバインド機能を使用する場合、必須です。
セションを開始するメソッド名を設定します。
プロセスバインド機能を使用する場合、必須です。
クライアント思考時間の最大時間を秒単位で設定します。
0~86400の整数値。
本ステートメントは省略可能です。
本ステートメントを省略した場合、省略値として300が設定されます。
0を指定した場合は時間監視を行いません。
クライアント思考時間超過となった場合に呼び出される異常出口プログラム名を設定します。
本ステートメントは、Application Language:(アプリケーション言語)がC言語または、COBOL(COBOLはWindows(R)版、Solaris版のみです)の場合のみ有効です。Application Language:(アプリケーション言語)がC++言語の場合、本ステートメントは無視されます。
本ステートメントは省略可能です。
クライアントからの要求メッセージを、要求待ちのサーバアプリケーションプロセスに振り分ける方式を指定します。
プロセスバインド機能を使用する場合、本ステートメントに必ず“FIFO”を指定してください。
ワークユニット定義時の注意事項
アプリケーション開発言語がC言語、COBOL(COBOLはWindows(R)版、Solaris版のみです)の場合、Bind Type:ステートメントに“INSTANCE”を設定することはできません。ワークユニット定義の登録に失敗します。
アプリケーション開発言語がC++言語の場合、Bind Type:ステートメントに“PROCESS”を設定することはできません。ワークユニット定義の登録に失敗します。
Bind Type:ステートメント に“PROCESS”または、“INSTANCE”を設定し、SessionID Paramステートメントを設定していない場合、ワークユニット定義の登録に失敗します。
Bind Type:ステートメントに“PROCESS”または、“INSTANCE”を設定し、Method Name to Begin Sessionステートメントを設定していない場合、ワークユニット定義の登録に失敗します。
Method Name to Begin Session:ステートメントに設定したメソッドのパラメタにSessionID Paramステートメントで設定したパラメタがない場合、ワークユニットの起動に失敗します。
SessionID Param:ステートメントで設定したパラメタ名がIDL定義内でセションIDの形式と異なった型として定義されている場合、ワークユニットの起動に失敗します。
Request Assignment Mode:ステートメントを省略した場合、または“LIFO”を指定した場合、1プロセスにセションが集中し性能劣化を引き起こすことがあります。
C言語・COBOLの場合の通信イメージを以下に示します。
なお、COBOLはWindows(R)版、Solaris版のみ使用できます。
セションIDをA::B::op1のワークユニット定義に定義したパラメタに設定します。
A::B::op1を呼び出します。
バインド情報を作成します。
op1をスケジュールします。
セション継続APIを発行します。
セション継続APIが発行されているので、バインド情報を削除せずに保持します。
セションIDをA::B::op2のワークユニット定義に定義したパラメタに設定します。
A::B::op2を呼び出します。
op2をスケジュールします。
セション継続APIを発行します。
セション継続APIが発行されているので、バインド情報を削除せずに保持します。
セションIDをA::B::op3のワークユニット定義に定義したパラメタに設定します。
A::B::op3を呼び出します。
op3をスケジュールします。
セション継続APIが発行されていないので、バインド情報を削除します。
C++言語の場合の通信イメージを以下に示します。
セションIDをA::B::op1のワークユニット定義に定義したパラメタに設定します。
A::B::op1を呼び出します
セションIDに対応したインスタンスを生成します。
生成したインスタンスのop1をスケジュールします。
セション継続APIを発行します。
セション継続APIが発行されているので、インスタンスを削除せずに保持します。
セションIDをA::B::op2のワークユニット定義に定義したパラメタに設定します。
A::B::op2を呼び出します。
セションIDに対応し、保持されているインスタンスに切り替えます。
op2をスケジュールします。
セション継続APIを発行します。
セション継続APIが発行されているので、インスタンスを削除せずに保持します。
セションIDをA::B::op3のワークユニット定義に定義したパラメタに設定します。
A::B::op3を呼び出します
セションIDに対応し、保持されているインスタンスに切り替えます。
op3をスケジュールします。
セション継続APIが発行されていないので、セションIDに対応するインスタンスを削除します。