メッセージ監視プログラムの記述例 (COBOL言語)に、Interstage(コンポーネントトランザクションサービス)のサーバアプリケーションを呼び出すメッセージ監視プログラムの記述例を示します。
なお、Interstageのサーバアプリケーションの呼出し方法の詳細については、“アプリケーション作成ガイド(CORBAサービス編)”を参照してください。
* ----------------------------------------------------------------------- * メッセージ監視プログラム (Interstageのクライアントアプリケーション) * ----------------------------------------------------------------------- IDENTIFICATION DIVISION. PROGRAM-ID. MSGWAIT-PROG. AUTHOR. MQDUSER3. * ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. ARGUMENT-NUMBER IS ARG-C ARGUMENT-VALUE IS ARG-V SYMBOLIC CONSTANT COPY SYMBOL-CONST IN CORBA. . * DATA DIVISION. WORKING-STORAGE SECTION. * * ---------------------------------------------------------------- * 作業領域の定義 * ---------------------------------------------------------------- 01 SYSNAME PIC X(9) SYNC VALUE SPACE. 01 QUENAME PIC X(64) VALUE SPACE. * 01 MQDSYS USAGE POINTER. 01 MQDQUE USAGE POINTER. 01 WAITMODE PIC 9(5) COMP-5 VALUE 2. 01 CURSOR PIC 9(5) COMP-5 VALUE 2. 01 MQD-STS PIC 9(5) COMP-5 VALUE 0. 01 FLG-END PIC 9(5) COMP-5 VALUE 0. * * < 復帰情報 > 01 RETENV. 02 LEVEL PIC 9(5) COMP-5 VALUE 0. 02 RCODE PIC 9(5) COMP-5 VALUE 0. 01 RETVALUE PIC S9(5) COMP-5 VALUE 0. * * < メッセージヘッダ > COPY "HEADER.cbl". * * < メッセージ本体 > 01 MSGBODY. 02 MSGPTR USAGE POINTER. 01 MSGBODYDATA PIC X(200) VALUE SPACE. 01 BODYLENGTH PIC 9(9) COMP-5 VALUE 200. * * < Interstageのサーバアプリケーション呼出し用のデータ記述 > * → この記述は“アプリケーション作成ガイド(CORBAサービス編)” * を参照してください。 * * ---------------------------------------------------------------- * 処理手続き * ---------------------------------------------------------------- PROCEDURE DIVISION. * *-----------------------------------------------* * Interstageのサーバアプリケーション呼出しの * * ための前処理 * *-----------------------------------------------* * → この処理は“アプリケーション作成ガイド(CORBAサービス編)” * を参照してください。 * DISPLAY "メッセージ受信を開始". MOVE 0 TO MQD-STS. MOVE 0 TO FLG-END. * *-----------------------------------------------* * MQDへの接続 * *-----------------------------------------------* MOVE "MQD001" TO SYSNAME. CALL "MQDCONNECT" USING SYSNAME RETENV MQDSYS. DISPLAY "MQDCONNECT" " " RCODE. IF PROGRAM-STATUS < 0 THEN MOVE 1 TO MQD-STS GO TO EXT-PRO END-IF. * *-----------------------------------------------* * メッセージキューへの接続 * *-----------------------------------------------* MOVE "Q002" TO QUENAME CALL "MQDCONNECTQ" USING MQDSYS QUENAME RETENV MQDQUE. DISPLAY "MQDCONNECTQ" " " RCODE. IF PROGRAM-STATUS < 0 THEN MOVE 2 TO MQD-STS GO TO EXT-DCM END-IF. * PERFORM UNTIL FLG-END = 1 *-----------------------------------------------* * メッセージの参照(到着待ち) * *-----------------------------------------------* MOVE FUNCTION ADDR( MSGBODYDATA ) TO MSGPTR. CALL "MQDPEEKMSG" USING MQDQUE WAITMODE MSGHEAD MSGBODY BODYLENGTH CURSOR RETENV RETVALUE. DISPLAY "MQDPEEKMSG" " " RCODE. IF PROGRAM-STATUS < 0 THEN MOVE 3 TO MQD-STS GO TO EXT-DCQ END-IF. IF MSGBODYDATA(1:3) = "END" MOVE 1 TO FLG-END. * *-----------------------------------------------* * Interstageのサーバアプリケーションの呼出し * *-----------------------------------------------* * < トランザクション開始 > CALL "COSTRANSACTIONS-CURRENT-BEGIN" USING …. * < アプリケーション呼出し > CALL "IS-SVR-APPL" USING …. IF PROGRAM-STATUS < 0 THEN MOVE 4 TO MQD-STS * < トランザクション異常終了 > CALL "COSTRANSACTIONS-CURRENT-ROLLBACK" USING … GO TO EXT-DCQ END-IF. * < トランザクション正常終了 > CALL "COSTRANSACTIONS-CURRENT-COMMIT" USING …. END-PERFORM. * EXT-DCQ. *-----------------------------------------------* * メッセージキューからの切断 * *-----------------------------------------------* CALL "MQDDISCONNECTQ" USING MQDQUE RETENV RETVALUE. DISPLAY "MQDDISCONNECTQ" " " RCODE. IF PROGRAM-STATUS < 0 THEN MOVE 5 TO MQD-STS GO TO EXT-PRO END-IF. * EXT-DCM. *-----------------------------------------------* * MQDからの切断 * *-----------------------------------------------* CALL "MQDDISCONNECT" USING MQDSYS RETENV RETVALUE. DISPLAY "MQDDISCONNECT" " " RCODE. IF PROGRAM-STATUS < 0 MOVE 6 TO MQD-STS. * EXT-PRO. *-----------------------------------------------* * Interstageのサーバアプリケーション呼出しの * * ための後処理 * *-----------------------------------------------* * → この処理は“アプリケーション作成ガイド(CORBAサービス編)” * を参照してください。 * MOVE MQD-STS TO PROGRAM-STATUS. EXIT PROGRAM. END PROGRAM MSGWAIT-PROG.