5.1 Oracle Tuxedoシステムのmain()

Oracle Tuxedoシステムには、ATMIサーバーを簡単に開発できるように、サーバーのロード・モジュール用に定義済のmain()ルーチンが提供されています。buildserverコマンドを実行すると、main()ルーチンが自動的にサーバーの一部として組み込まれます。

ノート:

main()はシステムで提供されたルーチンのため、変更することはできません。

定義済main()ルーチンは、アプリケーションへの参加と終了の他に、サーバーにかわって次の操作を行います。

  • ハングアップを無視してプロセスを実行します。つまり、SIGHUPシグナルを無視します。
  • 標準オペレーティング・システム・ソフトウェアの終了シグナル(SIGTERM)を受信すると、終了処理を開始します。サーバーは停止され、必要な場合は再起動します。
  • 掲示板サービスが参照できるように共用メモリーを割り当てます。
  • プロセスに対してメッセージ・キューを作成します。
  • サーバーによって提供される初期サービスを通知します。初期サービスは、定義済のmain()とリンクされたすべてのサービス、またはOracle Tuxedoシステムの管理者が構成ファイルに指定したサブセットです。
  • コマンド行に入力された2つのダッシュ(--)までの引数を処理します。2つのダッシュは、システムで認識される引数の終わりを示します。
  • tpsvrinit()関数を呼び出して、コマンド行で2つのダッシュ(--)の後に入力された引数を処理したり、リソース・マネージャをオープンします(オプション)。このようなコマンド行の引数は、アプリケーション固有の初期化に使用されます。
  • 中止がリクエストされるまで、リクエスト・キューにサービス・リクエスト・メッセージがあるかどうかを確認します。
  • サービス・リクエスト・メッセージがリクエスト・キューに到着すると、中止がリクエストされるまで、main()は次の処理を行います。
    • -rオプションが指定されている場合、サービス・リクエストの開始時間を記録します。
    • 掲示板を更新して、サーバーがBUSYであることを示します。
    • リクエスト・メッセージ用にバッファを割り当て、サービスにディスパッチします(サービス・サブルーチンを呼び出します)。
  • サービスが入力に対する処理を終了して制御が戻ると、中止が要求されるまで、main()は次の処理を行います。
    • -rオプションが指定されている場合、サービス・リクエストの終了時間を記録します。
    • 統計を更新します。
    • 掲示板を更新して、サーバーがIDLE状態であること、つまりサーバーの準備ができたことを示します。
    • キューに次のサービス・リクエストがあるかどうかを確認します。
  • サーバーの中止が要求されると、tpsvrdone()を呼び出して必要な停止操作を実行します。

以上からわかるように、main()ルーチンは、アプリケーションへの参加と終了、バッファやトランザクションの管理、および通信に関する詳細を扱っています。

ノート:

システムで提供されるmain()は、アプリケーションへの参加と終了を行うため、tpinit()またはtpterm()関数の呼出しをコードに記述しないでください。これらの関数を呼び出すとエラーが発生して、tperrnoTPEPROTOが戻されます。tpinit()またはtpterm()関数の詳細は、「クライアントのコーディング」を参照してください。