bea ホーム | 製品 | dev2dev | support | askBEA
BEA Logo Tuxedo
 ドキュメントのダウンロード   サイトマップ   用語集 
検索
0

COBOL を使用した Tuxedo アプリケーションのプログラミング

 Previous Next Contents View as PDF  

クライアントおよびサーバへの要求/応答のコーディング

ここでは、次の内容について説明します。

 


要求/応答通信の概要

要求/応答通信モードでは、あるソフトウェア・モジュールが別のソフトウェア・モジュールに要求を送り、応答を待ちます。最初のソフトウェア・モジュールがクライアント、2 番目のソフトウェア・モジュールがサーバとして動作するので、このモードはクライアント/サーバ相互作用とも呼ばれます。オンラインの銀行業務の多くは、要求/応答モードでプログラミングされます。たとえば、残高照会の要求は、次のように行われます。

  1. 顧客 (クライアント) は、口座レコード管理システム (サーバ) に、残高照会の要求を送信します。

  2. 口座レコード管理システム (サーバ) は、指定された口座の残高を応答として顧客 (クライアント) に送ります。

    図 6-1 オンライン銀行業務での応答/要求通信


     

クライアント・プロセスはアプリケーションに参加すると、要求メッセージをサブルーチンに送信して処理を行い、応答メッセージを受信できるようになります。

 


同期メッセージの送信

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 言語を使用した BEA Tuxedo アプリケーションのプログラミング』を参照してください。IDATA-REC および ITPTYPE-REC 構造体は、要求レコードを定義します。ODATA-REC および OTPTYPE-REC 構造体は、応答レコードを定義します。ITPTYPE-REC および OTPTYPE-REC データ構造体は、TPTYPE-REC データ構造体と似ています。

TPCALL は、応答を待ちます。

注記 TPCALL ルーチンの呼び出しは、TPACALL ルーチンを呼び出した直後に TPGETRPLY を呼び出すことと論理的には同じです。非同期メッセージの送信を参照してください。

要求は、指定されたサービス (SERVICE-NAME) の優先順位で送信されます。ただし、TPSPRIO ルーチンの呼び出しで明示的に異なる優先順位が設定されている場合は除きます。詳細については、メッセージの優先順位の設定および取得を参照してください。

TPCALL は整数を返します。失敗した場合、発生したエラー条件を示す値が TP-STATUS に設定されます。有効なエラー・コードの詳細については、『BEA Tuxedo COBOL リファレンス』の TPCALL(3cbl) を参照してください。

注記 通信呼び出しはいろいろな原因で失敗します。そのほとんどは、アプリケーション・レベルで修正することができます。失敗の原因としては、アプリケーション定義のエラー (TPESVCFAIL)、戻り値の処理エラー (TPESVCERR)、型付きレコードのエラー (TPEITYPETPEOTYPE)、タイムアウト・エラー (TPETIME)、プロトコル・エラー (TPEPROTO) などがあります。エラーの詳細については、11-1 ページの「エラーの管理」を参照してください。発生する可能性があるエラーについては、『BEA Tuxedo COBOL リファレンス』の TPCALL(3cbl) を参照してください。

BEA Tuxedo システムでは、割り当てられているレコードより大きなメッセージを受信した場合、メッセージ受信用レコードのサイズが自動的に変更されます。そのため、応答レコードのサイズが変更されたかどうかを確認する必要があります。

レコードの新しいサイズにアクセスするには、*LEN IN OTPTYPE-REC に返されたアドレスを使用します。応答レコードのサイズが変更されたかどうかを確認するには、TPCALL を呼び出す前の応答レコードのサイズと、返された応答レコードの LEN IN OTPTYPE-REC の値とを比較します。LEN IN OTPTYPE-REC が元の値より大きい場合、レコードのサイズは大きくなっています。それ以外の場合、レコードのサイズは変更されていません。

例: 要求メッセージと応答メッセージに同じレコードを使用する

以下のコード例は、クライアント・プログラムで、要求メッセージと応答メッセージに同じレコードを使用して、同期呼び出しを行う方法を示しています。この例では、AUDV-REC メッセージ・レコードは要求情報と応答情報の両方を格納するように設定されているので、同じレコードを使用することができます。このコードでは、次の処理が行われます。

  1. サービスは B_ID フィールドを照会します。ただし、このフィールドを上書きしません。

  2. アプリケーションは、BALANCE フィールドをゼロに初期化して、サービスから返される値を受け取る準備をします。

  3. SERVICE-NAME は要求されたサービス名を示します。この例では、口座残高と窓口残高が示されます。

コード リスト 6-1 要求メッセージと応答メッセージに同じレコードを使用する

WORKING-STORAGE SECTION.
*****************************************************
* Tuxedo の定義
*****************************************************
01 TPTYPE-REC.
COPY TPTYPE.
*
01 TPSTATUS-REC.
COPY TPSTATUS.
*
01 TPSVCDEF-REC.
COPY TPSVCDEF.
*****************************************************
* ログ・メッセージの定義
*****************************************************
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).
*****************************************************
* この VIEW レコード (audv) はサーバに送られます。
*****************************************************
01 AUDV-REC.
COPY AUDV.
*
******************************************************
PROCEDURE DIVISION.
START-FIG.
MOVE LENGTH OF LOGMSG TO LOGMSG-LEN.
*****************************************************
* audv レコードを準備します。
*****************************************************
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 にはこのレコードに入るだけのメッセージが格納されます。残りのメッセージは破棄され、TPCALLTP-STATUS IN TPSTATUS-RECTPTRUNCATE を設定します。

例: TPSIGRSTRT フラグを設定した同期メッセージの送信

以下のコード例は、bankappXFER サーバ・プロセスの一部である TRANSFER サービスに基づいています。bankapp は、BEA Tuxedo システムに提供されている銀行業務のサンプル・アプリケーションです。この例では、あるサービスがクライアントとして WITHDRAWAL および DEPOSIT サービスを呼び出します。アプリケーションはこの 2 つのサービスを呼び出すときに通信フラグを TPSIGRSTRT に設定して、トランザクションをコミットしやすいようにします。TPSIGRSTRT フラグは、シグナルの割り込みがあった場合に行う処理を指定します。通信フラグの詳細については、『BEA Tuxedo COBOL リファレンス』の TPCALL(3cbl) を参照してください。

コード リスト 6-2 TPSIGRSTRT フラグを設定した同期メッセージの送信

   WORKING-STORAGE SECTION.
*****************************************************
* Tuxedo の定義
*****************************************************
01 TPTYPE-REC.
COPY TPTYPE.
*
01 TPSTATUS-REC.
COPY TPSTATUS.
*
01 TPSVCDEF-REC.
COPY TPSVCDEF.
*****************************************************
* この VIEW レコード (audv) はサーバに送られます。
*****************************************************
01 AUDV-REC.
COPY AUDV.
*
******************************************************
PROCEDURE DIVISION.
START-FIG.
*****************************************************
* 引き出し用に audv レコードを準備します。
*****************************************************
. . .
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.
. . .
*****************************************************
* 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.
. . .

例: TPNOTRAN フラグを設定した同期メッセージの送信

以下のコード例は、トランザクション・モードではない通信呼び出しを示しています。この呼び出しは、リソース・マネージャに関連していないサービスに対して行われます。サービスがトランザクションに参加するとエラーになります。アプリケーションは、データベース ACCOUNTS から取得した情報に基づいて生成された売掛金勘定レポート ACCRV を出力します。

サービス・ルーチン REPORT は指定されたパラメータを解釈し、完了したレポートのバイト・ストリームを応答として送信します。クライアントは、TPCALL を使用して PRINTER サービスにバイト・ストリームを送信します。PRINTER は、クライアントに近いプリンタにバイト・ストリームを送信します。そして、応答が印刷されます。最後に、PRINTER サービスはハードコピーの印刷が終了したことをクライアントに通知します。

注記 TPNOTRAN または TPNOREPLY を設定した非同期メッセージの送信では、同じ例を使用して非同期メッセージの呼び出しを行っています。

コード リスト 6-3 TPNOTRAN フラグを設定した同期メッセージの送信

    WORKING-STORAGE SECTION.
*****************************************************
* Tuxedo の定義
*****************************************************
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
.. .
********************************************************
* REPORT サービスにレポート要求を送ります。
* 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
********************************************************
* PRINTER サービスに REPORT-OUTPUT を送ります。
********************************************************
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 形式で標準化したが、それを反映するためにクライアント・プロセスを変更しなかった場合などがあります。

 


非同期メッセージの送信

この節では、次の操作を行う方法について説明します。

ここで説明する非同期の処理は、ファンアウト並列処理と呼ばれます。クライアントの要求が複数のサービスに同時に分散 (つまり「ファンアウト」) されて処理が行われるからです。

このほかに、BEA Tuxedo システムでは、非同期処理としてパイプライン並列処理もサポートされています。この処理では、TPFORWAR ルーチンを使用して 1 つのサービスから別のサービスに処理が渡されます (転送されます)。TPFORWAR ルーチンについては、5-1 ページの「サーバのコーディング」を参照してください。

非同期要求の送信

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 データ構造体の詳細については、5-12 ページの「サービスの定義」を参照してください。

TPACALL ルーチンは、SERVICE-NAME に指定されたサービスに要求メッセージを送信し、直ちに制御を戻します。呼び出しが正常に終了すると、TPACALL ルーチンは整数値を返します。この値は、関連する要求に対する正しい応答にアクセスするための記述子として使用されます。TPACALL がトランザクション・モードで実行されている場合 (9-1 ページの「グローバル・トランザクションのコーディング」を参照)、トランザクションのコミット時に未処理の応答が存在することはありません。つまり、あるトランザクションの範囲内では、要求ごとにその応答が返されるので、最終的には対応する応答を必ず受信することになります。

TPNOREPLY が設定されると、応答が必要ないことが TPACALL に通知されます。このフラグが設定されている場合、TPACALL の処理が正常に終了すると、応答記述子として 0 が返されます。以降の処理で、この値が TPGETRPLY ルーチンに渡されると、この値は無効になります。プロセスがトランザクション・モードのときにこの設定を正しく使用するためのガイドラインについては、9-1 ページの「グローバル・トランザクションのコーディング」を参照してください。

エラーが発生した場合、TPACALL は発生したエラーの内容を示す値を TP-STATUS に設定します。TPACALL が返すエラー・コードの多くは、TPCALL が返すエラー・コードと同じです。この 2 つの関数のエラー・コードは、一方が同期呼び出し、もう一方が非同期呼び出しに基づいているという点が異なります。これらのエラーについては、11-1 ページの「エラーの管理」を参照してください。

以下のコード例は、TPACALLTPNOTRANTPNOREPLY 設定を使用する方法を示しています。このコードは、例: TPNOTRAN フラグを設定した同期メッセージの送信のコードと同じです。ただし、ここで示すコードでは、PRINTER サービスからの応答は要求されていません。TPNOREPLY はクライアントが応答を要求していないこと、TPNOTRANPRINTER サービスが現在のトランザクションに参加しないことを示します。詳細については、11-1 ページの「エラーの管理」を参照してください。

コード リスト 6-4 TPNOTRAN または TPNOREPLY を設定した非同期メッセージの送信

   WORKING-STORAGE SECTION.
*****************************************************
* Tuxedo の定義
*****************************************************
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
.. .
********************************************************
* REPORT サービスにレポート要求を送ります。
* 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
********************************************************
* PRINTER サービスに REPORT-OUTPUT を送ります。
********************************************************
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 データ構造体の詳細については、5-12 ページの「サービスの定義」を参照してください。

デフォルトでは、この関数は通信ハンドルが参照する値に対応した応答を待ちます。応答を待っている間に、ブロッキング・タイムアウトが発生する場合があります。タイムアウトが発生するのは、TPGETRPLY が失敗し、TP-STATUSTPETIME が設定された場合です。ただし、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.

次の表は、TPSPRIO ルーチンのフィールドを示しています。

表 6-1 TPSPRIO ルーチンのフィールド

フィールド

説明

PRIORITY

新しい優先順位を示す整数値。この引数の持つ意味は、PRIO-FLAG によって異なります。PRIO-FLAG にゼロが設定されている場合、PRIORITY は相対値を示し、値の符号は現在の優先順位を上げることまたは下げることを示します。ほかの値が設定されている場合、指定された値は絶対値を示し、PRIORITY には 0 〜 100 の範囲の値を設定する必要があります。この範囲外の値を設定すると、50 に設定されます。

PRIO-FLAG

PRIORITY の値を相対値 (0) または絶対値 (TPABSOLUTE) のどちらの値として処理するのかを示す値。デフォルトは相対値です。

以下のコード例は、TRANSFER サービスから引用したものです。このコードでは、TRANSFER サービスはクライアントとして動作し、TPCALL を使用して WITHDRAWAL サービスに同期要求を送信しています。TRANSFERTPSPRIO を呼び出して WITHDRAWAL に対する要求メッセージの優先順位を上げます。また、TRANSFER のキューを待機した後で、WITHDRAWAL サービス (その後 DEPOSIT サービス) に対する要求がキューに格納されないようにします。

コード リスト 6-5 要求メッセージの優先順位の設定

    WORKING-STORAGE SECTION.
*****************************************************
* Tuxedo の定義
*****************************************************
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-STATUSTPENOENT が設定されます。TPGPRIO の処理が成功すると、TP-STATUSTPOK が設定され、1 〜 100 の範囲内の整数値が返されます。100 が最も高い優先順位です。

TPSPRIO ルーチンを使用して優先順位が明示的に設定されていない場合、要求を処理するサービス・ルーチンの優先順位がメッセージの優先順位として設定されます。アプリケーション内では、要求を処理するサービスの優先順位にデフォルト値の 50 が設定されます。ただし、システム管理者が別の値を指定している場合は除きます。

次のコード例は、非同期呼び出しによって送信されたメッセージの優先順位を確認する方法を示しています。

コード リスト 6-6 送信後の要求の優先順位の確認

   WORKING-STORAGE SECTION.
*****************************************************
* Tuxedo の定義
*****************************************************
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

 

Back to Top Previous Next
Contact e-docsContact BEAwebmasterprivacy