5.3 サーバーのコーディングのためのガイドライン

通信の詳細はOracle Tuxedoシステムのmain()ルーチンによって処理されるため、通信の実装よりもアプリケーション・サービスのロジックに集中できます。ただし、システムで提供されるmain()と互換性を保つために、アプリケーション・サービスが特定の規則に従っている必要があります。これらの規則は、サービス・ルーチンをコーディングするためのサービス・テンプレートとも呼ばれます。次に、これらの規則についてまとめます。これらの規則の詳細は、『Oracle Tuxedo ATMI C関数リファレンス』tpservice(3c)のリファレンス・ページを参照してください。

  • リクエスト/レスポンス・サービスが一度に受信できるリクエストの数は1つだけであり、送信できる応答も1つだけです。
  • リクエスト/レスポンス・サービスが一度に処理するリクエストは1つだけです。別のリクエストを受け取ることができるのは、リクエスタに応答を送信した後、または別の処理を行うために別のサービスにリクエストを転送した後だけです。
  • サービス・ルーチンを終了するには、tpreturn()またはtpforward()関数のいずれかを呼び出す必要があります。これらの関数は、C言語のreturn文と同じように機能しますが、処理が終了すると、呼出し側の関数ではなくOracle Tuxedoシステムのmain()関数に制御が戻ります。
  • tpacall()を使用して別のサーバーと通信する場合は、サービスの開始元は未処理の応答がすべて処理されるまで待機するか、またはtpcancel()を使用して未処理の応答をすべて無効にしてから、tpreturn()またはtpforward()を呼び出す必要があります。
  • サービス・ルーチンは、1つの引数、つまりsvcinfoを使用して呼び出され、この引数は、サービス情報が定義された構造体(TPSVCINFO)を指すポインタです。