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

5.2.3 注意点

  プロセスバインド機能を使用する場合、特別な注意が必要となります。
  ここでは、プロセスバインド機能を使用するアプリケーションを作成する場合に必要となる注意点を説明しています。

5.2.3.1 クライアント異常を考慮したトランザクションアプリケーション

  クライアントオブジェクトの異常やクライアントの電源断などにより、クライアントオブジェクトが異常終了した場合、トランザクションアプリケーション内に異常終了したクライアントオブジェクト用の領域が残ってしまいます。
  このために、プロセスバインド機能ではクライアント思考時間監視機能と異常出口を提供しています。

クライアント思考時間監視

  クライアント思考時間監視は、サーバオブジェクトを呼び出し、復帰した後、次の同一トランザクションアプリケーションを呼び出すまでの時間を監視します。
  クライアントに制御が渡り、監視時間内に次の同一トランザクションアプリケーションが呼び出されない場合、システムは、クライアントにバインドされているトランザクションアプリケーションの異常出口をスケジュールします。
  異常出口の登録方法については、トランザクションアプリケーション作成言語がC言語または、COBOL(COBOLはWindows(R)版、Solaris版のみです)の場合、本章を、アプリケーション作成言語がC++言語の場合、“3.3 サーバアプリケーションのソースの作成”を参照してください。

異常出口

  クライアント思考時間がワークユニット定義で定義した値(秒)を超過すると、異常出口がスケジュールされます。
  異常出口では、セションID参照APIを発行することによりセションID(クライアント識別子)を参照することができます。
  セションIDをキーにトランザクションアプリケーション内のタイムアウトとなったクライアントオブジェクト用の領域を解放してください。

クライアントオブジェクト領域の解放

  異常出口では、タイムアウトとなったクライアントのセションIDをセションID参照APIを発行することにより知ることができます。そのため、プロセスバインド機能を使用しているトランザクションアプリケーションではメソッド間にまたがって使用する領域を獲得する場合、セションIDをキーに獲得した領域の管理が必要となります。

  op1でクライアントオブジェクト固有の領域として獲得した領域は、op2で参照後、削除されるロジックとなっています。また、クライアントオブジェクトがop1を呼び出した後、op2を呼び出すまでに異常終了した場合、op1でクライアントオブジェクト固有の領域として獲得した領域は、サーバオブジェクトプロセスが終了するまで解放されなくなってしまいます。
  領域をセションIDをキーに管理することにより、異常出口で領域を解放することが可能となります。

C言語・COBOLで作成したオブジェクトにおける異常出口の作成と登録

  異常出口関数を作成します。異常出口では、以下のような処理を行うことが可能です。

  異常出口が正常終了(復帰値=0)した場合、次の通信を行います。
  異常出口が異常終了(復帰値=0以外)した場合、異常出口が動作したトランザクションアプリケーションプロセスが異常終了します。
  サーバプロセス異常終了時の動作は、“5.2.3.2 その他の注意点”を参照してください。
  ワークユニット定義にて、異常出口名を定義します。詳細は、“OLTPサーバ運用ガイド”を参照してください。

  なお、COBOLはWindows(R)版、Solaris版のみ使用できます。

C++言語で作成したオブジェクトにおける異常出口の作成と登録

  異常出口関数を作成します。関数名は、“ApmRecover”固定です。
  異常出口では、以下のような処理を行うことが可能です。

  異常出口が正常終了(復帰値=0)した場合、次の通信を行います。
  異常出口が異常終了(復帰値=0以外)した場合、異常出口が動作したトランザクションアプリケーションのプロセスが異常終了します。
  サーバプロセス異常終了時の動作は、“5.2.3.2 その他の注意点”を参照してください。
  tdcコマンド実行時に生成される“TD_オブジェクト名_proto.h”の異常出口(ApmRecover)のコメントアウト記述を外します。

5.2.3.2 その他の注意点