BEA Logo BEA Tuxedo Release 8.0

  BEA ホーム  |  イベント  |  ソリューション  |  パートナ  |  製品  |  サービス  |  ダウンロード  |  ディベロッパ・センタ  |  WebSUPPORT

 

   Tuxedo ホーム   |   COBOL を使用した BEA Tuxedo アプリケーションのプログラミング   |   先頭へ   |   前へ   |   次へ   |   目次

 


非同期メッセージの送信

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

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

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

非同期要求の送信

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

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

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

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

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

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

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

 

先頭へ戻る 前のトピックへ 次のトピックへ