リクエスト/レスポンス通信モードでは、あるソフトウェア・モジュールが別のソフトウェア・モジュールにリクエストを送り、レスポンスを待ちます。最初のソフトウェア・モジュールがクライアント、2番目のソフトウェア・モジュールがサーバーとして動作するため、このモードはクライアント/サーバー相互作用とも呼ばれます。オンラインの銀行業務の多くは、リクエスト/レスポンス・モードでプログラミングされます。たとえば、残高照会のリクエストは、次のように行われます。
クライアント・プロセスはアプリケーションに参加すると、リクエスト・メッセージをサブルーチンに送信して処理を行い、応答メッセージを受信できるようになります。
TPCALL(3cbl)呼出しは、サービス・サブルーチンにリクエストを送信し、同期的に応答を待ちます。TPCALL
ルーチンの呼出しには、次のシグネチャを使用します。
01 TPSVCDEF-REC.
COPY TPSVCDEF.
01 ITPTYPE-REC.
COPY TPTYPE.
01 IDATA-REC.
COPY User Data.
01 OTPYTPE-REC.
COPY TPTYPE.
01 ODATA-REC.
COPY User Data.
01 TPSTATUS-REC.
COPY TPSTATUS.
CALL "TPCALL" USING TPSVCDEF-REC
ITPTYPE-REC
IDATA-REC
OTPTYPE-REC
ODATA-REC
TPSTATUS-REC.
TPSVCDEF
データ構造体の詳細は、『C言語を使用したOracle Tuxedo ATMIアプリケーションのプログラミング』を参照してください。IDATA-REC
およびITPTYPE-REC
構造体は、リクエスト・レコードを定義します。ODATA-REC
およびOTPTYPE-REC
構造体は、応答レコードを定義します。ITPTYPE-REC
およびOTPTYPE-REC
データ構造体は、TPTYPE-REC
データ構造体と似ています。
注: | TPCALL ルーチンの呼出しは、TPACALL ルーチンを呼び出した直後にTPGETRPLY を呼び出すことと論理的には同じです。「非同期メッセージの送信」を参照してください。 |
リクエストは、指定されたサービス(SERVICE-NAME
)の優先度で送信されます。ただし、TPSPRIO
ルーチンの呼出しで明示的に異なる優先度が設定されている場合は除きます。詳細は、「メッセージの優先度の設定および取得」を参照してください。
TPCALL
は整数を返します。失敗した場合、発生したエラー条件を示す値がTP-STATUS
に設定されます。有効なエラー・コードの詳細は、『Oracle Tuxedo ATMI COBOL関数リファレンス』の「TPCALL(3cbl)」を参照してください。
注: | 通信呼出しは様々な原因で失敗しますが、そのほとんどは、アプリケーション・レベルで修正できます。失敗の原因としては、アプリケーション定義のエラー(TPESVCFAIL )、戻り値の引数の処理エラー(TPESVCERR )、型付きレコードのエラー(TPEITYPE 、TPEOTYPE )、タイムアウト・エラー(TPETIME )、プロトコル・エラー(TPEPROTO )などがあります。エラーの詳細は、『C言語を使用したOracle Tuxedo ATMIアプリケーションのプログラミング』の「エラーの管理」を参照してください。発生する可能性があるエラーのリストの詳細は、『Oracle Tuxedo ATMI COBOL関数リファレンス』の「TPCALL(3cbl)」を参照してください。 |
Oracle Tuxedoシステムでは、割り当てられているレコードより大きなメッセージを受信した場合、メッセージ受信用レコードのサイズが自動的に変更されます。そのため、応答レコードのサイズが変更されたかどうかを確認する必要があります。
レコードの新しいサイズにアクセスするには、*LEN IN OTPTYPE-REC
に返されたアドレスを使用します。応答レコードのサイズが変更されたかどうかを確認するには、TPCALL
を呼び出す前の応答レコードのサイズと、返された応答レコードのLEN IN OTPTYPE-REC
の値とを比較します。LEN IN OTPTYPE-REC
が元の値より大きい場合、レコードのサイズは大きくなっています。それ以外の場合、レコードのサイズは変更されていません。
以下のサンプル・コードは、クライアント・プログラムで、リクエスト・メッセージと応答メッセージに同じレコードを使用して、同期呼出しを行う方法を示しています。この例では、AUDV-REC
メッセージ・レコードはリクエスト情報と応答情報の両方を格納するように設定されているので、同じレコードを使用することができます。このコードでは、次の処理が行われます。
B_ID
フィールドに対して問合せを実行します。ただし、このフィールドを上書きしません。 BALANCE
フィールドをゼロに初期化して、サービスから返される値を受け取る準備をします。 SERVICE-NAME
はリクエストされたサービス名を示します。この例では、口座残高
と窓口残高
が示されます。WORKING-STORAGE SECTION.
*****************************************************
* Tuxedo definitions
*****************************************************
01 TPTYPE-REC.
COPY TPTYPE.
*
01 TPSTATUS-REC.
COPY TPSTATUS.
*
01 TPSVCDEF-REC.
COPY TPSVCDEF.
*****************************************************
* Log messages definitions
*****************************************************
01 LOGMSG.
05 FILLER PIC X(6) VALUE "FIG =>".
05 LOGMSG-TEXT PIC X(50).
01 LOGMSG-LEN PIC S9(9) COMP-5.
*
01 USER-DATA-REC PIC X(75).
*****************************************************
* This VIEW record (audv) will be sent to the server
*****************************************************
01 AUDV-REC.
COPY AUDV.
*
******************************************************
PROCEDURE DIVISION.
START-FIG.
MOVE LENGTH OF LOGMSG TO LOGMSG-LEN.
*****************************************************
* Prepare the audv record
*****************************************************
MOVE "BRANCH" TO B-ID IN AUDV-REC.
MOVE 0 TO BALANCE IN AUDV-REC.
MOVE LENGTH OF AUDV-REC TO LEN.
MOVE "VIEW" TO REC-TYPE.
MOVE "audv" TO SUB-TYPE.
MOVE "SOMESERVICE" TO SERVICE-NAME.
SET TPBLOCK TO TRUE.
SET TPNOTRAN TO TRUE.
SET TPNOTIME TO TRUE.
SET TPSIGRSTRT TO TRUE.
SET TPNOCHANGE TO TRUE.
CALL "TPCALL" USING TPSVCDEF-REC
TPTYPE-REC
AUDV-REC
TPTYPE-REC
AUDV-REC
TPSTATUS-REC.
IF NOT TPOK
MOVE "Service Failed" TO LOGMSG-TEXT
PERFORM DO-USERLOG
PERFORM EXIT-PROGRAM.
DISPLAY BRANCH and BALANCE
. . .
応答がODATA-REC
より大きい場合、ODATA-REC
にはこのレコードに入るだけのメッセージが格納されます。残りのメッセージは破棄され、TPCALL
はTP-STATUS IN TPSTATUS-REC
にTPTRUNCATE
を設定します。
以下のサンプル・コードは、bankapp
のXFER
サーバー・プロセスの一部であるTRANSFER
サービスに基づいています。 (bankapp
は、Oracle Tuxedoシステムに提供されている銀行業務のサンプルATMIアプリケーションです。)この例では、あるサービスがクライアントとしてWITHDRAWAL
およびDEPOSIT
サービスを呼び出します。アプリケーションはこの2つのサービスを呼び出すときに通信フラグをTPSIGRSTRT
に設定して、トランザクションをコミットしやすいようにします。TPSIGRSTRT
フラグは、シグナルの割込みがあった場合に行う処理を指定します。通信フラグの詳細については、『Oracle Tuxedo ATMI COBOL関数リファレンス』の「TPCALL (3cbl)」を参照してください。
WORKING-STORAGE SECTION.
*****************************************************
* Tuxedo definitions
*****************************************************
01 TPTYPE-REC.
COPY TPTYPE.
*
01 TPSTATUS-REC.
COPY TPSTATUS.
*
01 TPSVCDEF-REC.
COPY TPSVCDEF.
*****************************************************
* This VIEW record (audv) will be sent to the server
*****************************************************
01 AUDV-REC.
COPY AUDV.
*
******************************************************
PROCEDURE DIVISION.
START-FIG.
*****************************************************
* Prepare the audv record for withdrawal
*****************************************************
. . .
MOVE "WITHDRAWAL" TO SERVICE-NAME.
SET TPSIGRSTRT TO TRUE.
PERFORM DO-TPCALL.
IF NOT TPOK
MOVE "Cannot withdraw from debit account" TO LOGMSG-TEXT
PERFORM DO-USERLOG
PERFORM EXIT-PROGRAM.
MOVE "DEPOSIT" TO SERVICE-NAME.
SET TPSIGRSTRT TO TRUE.
PERFORM DO-TPCALL.
IF NOT TPOK
MOVE "Cannot deposit into credit account" TO LOGMSG-TEXT
PERFORM DO-USERLOG
PERFORM EXIT-PROGRAM.
. . .
*****************************************************
* Perform a TPCALL
*****************************************************
DO-TPCALL.
MOVE LENGTH OF AUDV-REC TO LEN.
MOVE "VIEW" TO REC-TYPE.
MOVE "audv" TO SUB-TYPE.
SET TPBLOCK TO TRUE.
SET TPNOTRAN TO TRUE.
SET TPNOTIME TO TRUE.
SET TPNOCHANGE TO TRUE.
CALL "TPCALL" USING TPSVCDEF-REC
TPTYPE-REC
AUDV-REC
TPTYPE-REC
AUDV-REC
TPSTATUS-REC.
. . .
以下のサンプル・コードは、トランザクション・モードではない通信呼出しを示しています。この呼出しは、リソース・マネージャに関連していないサービスに対して実行され、サービスがトランザクションに参加するとエラーになります。アプリケーションは、データベースACCOUNTS
から取得した情報に基づいて生成された売掛金勘定レポートACCRV
を出力します。
サービス・ルーチンREPORT
は指定されたパラメータを解釈し、完了したレポートのバイト・ストリームを応答として送信します。クライアントは、TPCALL
を使用してPRINTER
サービスにバイト・ストリームを送信します。PRINTERは、クライアントに近いプリンタにバイト・ストリームを送信します。そして、応答が印刷されます。最後に、PRINTER
サービスはハードコピーの印刷が終了したことをクライアントに通知します。
注: | 「TPNOTRANまたはTPNOREPLYを設定した非同期メッセージの送信」では、同じ例を使用して非同期メッセージの呼出しを行っています。 |
WORKING-STORAGE SECTION.
*****************************************************
* Tuxedo definitions
*****************************************************
01 ITPTYPE-REC.
COPY TPTYPE.
01 OTPTYPE-REC.
COPY TPTYPE.
*
01 TPSTATUS-REC.
COPY TPSTATUS.
*
01 TPSVCDEF-REC.
COPY TPSVCDEF.
*****************************************************
01 REPORT-REQUEST PIC X(100) VALUE SPACES.
01 REPORT-OUTPUT PIC X(50000) VALUE SPACES.
******************************************************
PROCEDURE DIVISION.
START-FIG.
. . .
join application
start transaction
. . .
********************************************************
* Send report request to REPORT service
* Receive results into REPORT-OUTPUT
********************************************************
MOVE "REPORT=accrcv DBNAME=accounts" TO REPORT-REQUEST.
MOVE "STRING" TO REC-TYPE IN ITYPE-REC.
MOVE 29 TO LEN IN ITYPE-REC.
MOVE "STRING" TO REC-TYPE IN OITYPE-REC.
MOVE 50000 TO LEN IN OTYPE-REC.
MOVE "REPORT" TO SERVICE-NAME.
SET TPTRAN TO TRUE.
SET TPBLOCK TO TRUE.
SET TPNOTIME TO TRUE.
SET TPSIGRSTRT TO TRUE.
SET TPNOCHANGE TO TRUE.
CALL "TPCALL" USING TPSVCDEF-REC
ITPTYPE-REC
REPORT-REQUEST
OTPTYPE-REC
REPORT-OUTPUT
TPSTATUS-REC.
IF NOT TPOK
error processing
IF TPETRUNCATE
The report was truncated
error processing
********************************************************
* Send REPORT-OUTPUT to PRINTER service
********************************************************
MOVE "PRINTER" TO SERVICE-NAME.
SET TPNOTRAN TO TRUE.
MOVE "STRING" TO REC-TYPE IN ITTYPE-REC.
MOVE LEN IN OTYPE-REC TO LEN IN ITYPE-REC.
CALL "TPCALL" USING TPSVCDEF-REC
ITPTYPE-REC
REPORT-OUTPUT
OTPTYPE-REC
REPORT-OUTPUT
TPSTATUS-REC.
IF NOT TPOK
error processing
. . .
terminate transaction
leave application
注: | この例のerror routine は、エラー・メッセージの出力、トランザクションの中止、クライアントのアプリケーションからの分離、およびプログラムの終了が行われることを示しています。 |
また、この例では、最初に割り当てられたレコード・タイプと同じタイプで応答メッセージを返す必要があることを示して、TPNOCHANGE
通信フラグを使用して厳密なタイプ・チェックを行う方法を示しています。厳密なタイプ・チェックのフラグTPNOCHANGE
が設定されているので、STRING
型のレコードに応答が返されます。
厳密なタイプ・チェックを行うのは、REPORT
サービス・サブルーチンでエラーが発生して、不適切なタイプの応答レコードが使用されることを防ぐためです。もう1つの理由は、依存関係にあるすべてのエリアで一貫していない変更が行わることを防ぐためです。たとえば、あるプログラマがREPORT
サービスを変更してすべての応答を別のSTRING
形式で標準化したが、それを反映するためにクライアント・プロセスを変更しなかった場合などがあります。
この項で説明する非同期の処理は、ファンアウト並列処理と呼ばれます。クライアントのリクエストが複数のサービスに同時に分散(ファンアウト)されて処理が行われるからです。
この他に、Oracle Tuxedoシステムでは、非同期処理としてパイプライン並列処理もサポートされており、この処理では、TPFORWAR
ルーチンを使用して1つのサービスから別のサービスに処理が渡されます(転送)。TPFORWAR
ルーチンの詳細は、『C言語を使用したOracle Tuxedo ATMIアプリケーションのプログラミング』の「サーバーのコーディング」を参照してください。
TPACALL(3cbl)ルーチンは、サービス・リクエストを送信し、直ちに制御を戻します。TPACALL
ルーチンの呼出しには、次のシグネチャを使用します。
01 TPSVCDEF-REC.
COPY TPSVCDEF.
01 TPTYPE-REC.
COPY TPTYPE.
01 DATA-REC.
COPY User Data.
01 TPSTATUS-REC.
COPY TPSTATUS.
CALL "TPACALL" USING TPSVCDEF-REC TPTYPE-REC DATA-REC TPSTATUS-REC.
TPSVCDEF
およびTPTYPE-REC
データ構造体の詳細は、『C言語を使用したOracle Tuxedo ATMIアプリケーションのプログラミング』の「サービスの定義」を参照してください。
TPACALL
ルーチンは、SERVICE-NAME
に指定されたサービスにリクエスト・メッセージを送信し、ただちに制御を戻します。呼出しが正常に終了すると、TPACALL
ルーチンは整数値を戻し、この値は、関連するリクエストに対する正しい応答にアクセスするための通信ハンドルとして使用されます。TPACALL
がトランザクション・モード(『C言語を使用したOracle Tuxedo ATMIアプリケーションのプログラミング』の「グローバル・トランザクションのコーディング」を参照)の場合、トランザクションのコミット時に未処理の応答が存在することはなく、あるトランザクションの範囲内では、リクエストごとにその応答が返されるため、最終的には対応する応答を必ず受信することになります。
TPNOREPLY
が設定されると、応答が必要ないことがパラメータでTPACALL
に通知されます。これが設定されている場合、TPACALL
の処理が正常に終了すると、応答記述子として0
の値が戻されます。以降の処理で、この値がTPGETRPLY
ルーチンに渡されると、この値は無効になります。プロセスがトランザクション・モードの場合にこの設定を正しく使用するためのガイドラインについては、『C言語を使用したOracle Tuxedo ATMIアプリケーションのプログラミング』の「グローバル・トランザクションのコーディング」を参照してください。
エラーが発生した場合、TPACALL
は発生したエラーの内容を示す値をTP-STATUS
に設定します。TPACALL
が戻すエラー・コードの多くは、TPCALL
が戻すエラー・コードと同じです。これらの関数のエラー・コードは、一方が同期呼出し、もう一方が非同期呼出しに基づいているという点が異なります。これらのエラーの詳細は、『C言語を使用したOracle Tuxedo ATMIアプリケーションのプログラミング』の「エラーの管理」を参照してください。
次のサンプル・コードは、TPACALL
でTPNOTRAN
とTPNOREPLY
設定を使用する方法を示しています。このコードは、「例: TPNOTRANフラグを設定した同期メッセージの送信」のコードと同じです。ただし、この場合は、PRINTER
サービスからの応答は要求されていません。TPNOTRAN
とTPNOREPLY
の両方を設定することで、クライアントが応答を要求していないこと、およびPRINTER
サービスが現在のトランザクションに参加しないことを示します。詳細は、『C言語を使用したOracle Tuxedo ATMIアプリケーションのプログラミング』の「エラーの管理」を参照してください。
WORKING-STORAGE SECTION.
*****************************************************
* Tuxedo definitions
*****************************************************
01 ITPTYPE-REC.
COPY TPTYPE.
01 OTPTYPE-REC.
COPY TPTYPE.
*
01 TPSTATUS-REC.
COPY TPSTATUS.
*
01 TPSVCDEF-REC.
COPY TPSVCDEF.
*****************************************************
01 REPORT-REQUEST PIC X(100) VALUE SPACES.
01 REPORT-OUTPUT PIC X(50000) VALUE SPACES.
******************************************************
PROCEDURE DIVISION.
START-FIG.
. . .
join application
start transaction
. . .
********************************************************
* Send report request to REPORT service
* Receive results into REPORT-OUTPUT
********************************************************
MOVE "REPORT=accrcv DBNAME=accounts" TO REPORT-REQUEST.
MOVE "STRING" TO REC-TYPE IN ITPTYPE-REC.
MOVE 29 TO LEN IN ITPTYPE-REC.
MOVE "STRING" TO REC-TYPE IN OITYPE-REC.
MOVE 50000 TO LEN IN OTPTYPE-REC.
MOVE "REPORT" TO SERVICE-NAME.
SET TPTRAN TO TRUE.
SET TPBLOCK TO TRUE.
SET TPNOTIME TO TRUE.
SET TPSIGRSTRT TO TRUE.
SET TPREPLY TO TRUE.
SET TPNOCHANGE TO TRUE.
CALL "TPCALL" USING TPSVCDEF-REC
ITPTYPE-REC
REPORT-REQUEST
OTPTYPE-REC
REPORT-OUTPUT
TPSTATUS-REC.
IF NOT TPOK
error processing
IF TPETRUNCATE
The report was truncated
error processing
********************************************************
* Send REPORT-OUTPUT to PRINTER service
********************************************************
MOVE "PRINTER" TO SERVICE-NAME.
SET TPNOTRAN TO TRUE.
SET TPNOREPLY TO TRUE.
MOVE "STRING" TO REC-TYPE IN ITPTYPE-REC.
MOVE LEN IN OTPTYPE-REC TO LEN IN ITPTYPE-REC.
CALL "TPACALL" USING TPSVCDEF-REC
ITPTYPE-REC
REPORT-OUTPUT
TPSTATUS-REC.
IF NOT TPOK
error processing
. . .
commit transaction
leave application
サービス呼出しに対する応答は、TPGETRPLY(3cbl)ルーチンを呼び出すと非同期的に受信できます。TPGETRPLY
ルーチンは、TPACALL
が以前に送信したリクエストに対する応答をキューから取り出します。
TPGETRPLY
ルーチンの呼出しには、次のシグネチャを使用します。
01 TPSVCDEF-REC.
COPY TPSVCDEF.
01 TPTYPE-REC.
COPY TPTYPE.
01 DATA-REC.
COPY User Data.
01 TPSTATUS-REC.
COPY TPSTATUS.
CALL "TPGETRPLY" USING TPSVCDEF-REC TPTYPE-REC DATA-REC TPSTATUS-REC.
TPSVCDEF
およびTPTYPE-REC
データ構造体の詳細は、『C言語を使用したOracle Tuxedo ATMIアプリケーションのプログラミング』の「サービスの定義」を参照してください。
デフォルトでは、この関数は通信ハンドルが参照する値に対応した応答を待ちます。応答を待っている間に、ブロッキング・タイムアウトが発生する場合があります。タイムアウトが発生するのは、TPGETRPLY
が失敗し、TP-STATUS
にTPETIME
が設定された場合です。ただし、TPNOTIME
が設定されている場合は除きます。
2つのATMI呼び出し、TPSPRIO (3cbl)およびTPGPRIO (3cbl)を使用して、メッセージ要求の優先度を決定したり設定したりできます。この優先度に従って、サーバーがキューからリクエストを取り出します。つまり、最も優先度の高いリクエストが最初に取り出されます。
TPSPRIO(3cbl)ルーチンを使用すると、メッセージ・リクエストの優先度を設定できます。
TPSPRIO
ルーチンで優先度を設定できるのは、1つのリクエストだけです。つまり、TPCALL
またはTPACALL
によって次に送信されるリクエスト、またはサービス・サブルーチンによって次に転送されるリクエストだけです。
TPSPRIO
ルーチンの呼出しには、次のシグネチャを使用します。
01 TPPRIDEF-REC.
COPY TPPRIDEF.
01 TPSTATUS-REC.
COPY TPSTATUS.
CALL "TPSPRIO" USING TPPRIDEF-REC TPSTATUS-REC.
TPPRIDEF-REC
データ構造体の呼出しには、次のシグネチャを使用します。
05 PRIORITY PIC S9(9) COMP-5.
05 PRIO-FLAG PIC S9(9) COMP-5.
88 TPABSOLUTE VALUE 0.
88 TPRELATIVE VALUE 1.
表6-1は、TPSPRIO
ルーチンの引数を示しています。
以下のサンプル・コードは、TRANSFER
サービスから引用したものです。このコードでは、TRANSFER
サービスはクライアントとして動作し、TPCALL
を使用してWITHDRAWAL
サービスに同期要求を送信しています。TRANSFER
はTPSPRIO
を呼び出してWITHDRAWAL
に対するリクエスト・メッセージの優先度を上げます。また、TRANSFER
のキューを待機した後で、WITHDRAWAL
サービス(その後DEPOSIT
サービス)に対するリクエストがキューに格納されないようにします。
WORKING-STORAGE SECTION.
*****************************************************
* Tuxedo definitions
*****************************************************
01 TPTYPE-REC.
COPY TPTYPE.
*
01 TPSTATUS-REC.
COPY TPSTATUS.
*
01 TPSVCDEF-REC.
COPY TPSVCDEF.
*
01 TPPRIDEF-REC.
COPY TPPRIDEF.
*****************************************************
01 DATA-REC PIC X(100) VALUE SPACES.
******************************************************
PROCEDURE DIVISION.
START-FIG.
. . .
join application
. . .
MOVE 30 TO PRIORITY.
SET TPRELATIVE TO TRUE.
CALL "TPSPRIO" USING TPPRIDEF-REC TPSTATUS-REC
IF NOT TPOK
error processing
MOVE "CARRAY" TO REC-TYPE.
MOVE 100 TO LEN.
MOVE "WITHDRAWAL" TO SERVICE-NAME.
SET TPTRAN TO TRUE .
SET TPBLOCK TO TRUE .
SET TPNOTIME TO TRUE .
SET TPSIGRSTRT TO TRUE .
SET TPREPLY TO TRUE .
CALL "TPACALL" USING TPSVCDEF-REC
TPTYPE-REC
DATA-REC
TPSTATUS-REC.
IF NOT TPOK
error processing
. . .
leave application
TPGPRIO(3cbl)ルーチンを使用すると、メッセージ・リクエストの優先度を取得できます。
TPGPRIO
ルーチンの呼出しには、次のシグネチャを使用します。
01 TPPRIDEF-REC.
COPY TPPRIDEF.
01 TPSTATUS-REC.
COPY TPSTATUS.
CALL "TPGPRIO" USING TPPRIDEF-REC TPSTATUS-REC.
リクエスタは、TPCALL
またはTPACALL
ルーチンを呼び出した後にTPGPRIO
ルーチンを呼び出して、リクエスト・メッセージの優先度を取得できます。リクエスタが関数を呼び出したがリクエストが送信されていない場合、ルーチンは失敗し、TP-STATUS
にTPENOENT
が設定されます。TPGPRIO
の処理が成功すると、TP-STATUS
にTPOK
が設定され、1 - 100の範囲内の整数値が返されます。100が最も高い優先度です。
TPSPRIO
ルーチンを使用して優先度が明示的に設定されていない場合、要求を処理するサービス・ルーチンの優先度がメッセージの優先度として設定されます。アプリケーション内では、リクエストを処理するサービスの優先度にデフォルト値の50が設定されます。ただし、システム管理者が別の値を指定している場合は除きます。
次のサンプル・コードは、非同期呼出しによって送信されたメッセージの優先度を確認する方法を示しています。
WORKING-STORAGE SECTION.
*****************************************************
* Tuxedo definitions
*****************************************************
01 TPTYPE-REC-1.
COPY TPTYPE.
01 TPTYPE-REC-2.
COPY TPTYPE.
*
01 TPSTATUS-REC.
COPY TPSTATUS.
*
01 TPSVCDEF-REC-1.
COPY TPSVCDEF.
01 TPSVCDEF-REC-2.
COPY TPSVCDEF.
*
01 TPPRIDEF-REC-1.
COPY TPPRIDEF.
01 TPPRIDEF-REC-2.
COPY TPPRIDEF.
*****************************************************
01 DATA-REC-1 PIC X(100) VALUE SPACES.
01 DATA-REC-2 PIC X(100) VALUE SPACES.
******************************************************
PROCEDURE DIVISION.
START-FIG.
. . .
join application
populate DATA-REC1 and DATA-REC2 with send request
. . .
MOVE "CARRAY" TO REC-TYPE IN TYPE-REC-1.
MOVE 100 TO LEN IN TYPE-REC-1.
MOVE "SERVICE1" TO SERVICE-NAME IN TPSVCDEV-REC-1.
SET TPTRAN TO TRUE IN TPSVCDEV-REC-1.
SET TPBLOCK TO TRUE IN TPSVCDEV-REC-1.
SET TPNOTIME TO TRUE IN TPSVCDEV-REC-1.
SET TPSIGRSTRT TO TRUE IN TPSVCDEV-REC-1.
SET TPREPLY TO TRUE IN TPSVCDEV-REC-1.
CALL "TPACALL" USING TPSVCDEF-REC-1
TPTYPE-REC-1
DATA-REC-1
TPSTATUS-REC.
IF NOT TPOK
error processing
CALL "TPGPRIO" USING TPPRIDEF-REC-1 TPSTATUS-REC
IF NOT TPOK
error processing
MOVE "CARRAY" TO REC-TYPE IN TYPE-REC-2.
MOVE 100 TO LEN IN TYPE-REC-2.
MOVE "SERVICE2" TO SERVICE-NAME IN TPSVCDEV-REC-2.
SET TPTRAN TO TRUE IN TPSVCDEV-REC-2.
SET TPBLOCK TO TRUE IN TPSVCDEV-REC-2.
SET TPNOTIME TO TRUE IN TPSVCDEV-REC-2.
SET TPSIGRSTRT TO TRUE IN TPSVCDEV-REC-2.
SET TPREPLY TO TRUE IN TPSVCDEV-REC-2.
CALL "TPACALL" USING TPSVCDEF-REC-2
TPTYPE-REC-2
DATA-REC-2
TPSTATUS-REC.
IF NOT TPOK
error processing
CALL "TPGPRIO" USING TPPRIDEF-REC-2 TPSTATUS-REC
IF NOT TPOK
error processing
IF PRIORITY IN TPSVCDEF-REC-1 >= PRIORITY IN TPSVCDEF-REC-2
PERFORM DO-GETREPLY1
PERFORM DO-GETREPLY2
ELSE
PERFORM DO-GETREPLY2
PERFORM DO-GETREPLY1
END-IF.
. . .
leave application
DO-GETRPLY1.
SET TPGETHANDLE TO TRUE IN TPSVCDEV-REC-1.
SET TPCHANGE TO TRUE IN TPSVCDEV-REC-1.
SET TPBLOCK TO TRUE IN TPSVCDEV-REC-1.
SET TPNOTIME TO TRUE IN TPSVCDEV-REC-1.
SET TPSIGRSTRT TO TRUE IN TPSVCDEV-REC-1.
CALL "TPGETRPLY" USING TPSVCDEF-REC-1
TPTYPE-REC-1
DATA-REC-1
TPSTATUS-REC.
IF NOT TPOK
error processing
DO-GETRPLY2
SET TPGETHANDLE TO TRUE IN TPSVCDEV-REC-2.
SET TPCHANGE TO TRUE IN TPSVCDEV-REC-2.
SET TPBLOCK TO TRUE IN TPSVCDEV-REC-2.
SET TPNOTIME TO TRUE IN TPSVCDEV-REC-2.
SET TPSIGRSTRT TO TRUE IN TPSVCDEV-REC-2.
CALL "TPGETRPLY" USING TPSVCDEF-REC-2
TPTYPE-REC-2
DATA-REC-2
TPSTATUS-REC.
IF NOT TPOK
error processing