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()関数の呼出しをコードに記述しないでください。これらの関数を呼び出すとエラーが発生して、tperrno
にTPEPROTO
が戻されます。tpinit()またはtpterm()関数の詳細は、「クライアントのコーディング」を参照してください。
親トピック: サーバーのコーディング