MessageQueueDirector説明書
目次 索引 前ページ次ページ

付録B プログラム記述例

B.1 メッセージ監視プログラムの記述例 (COBOL言語の場合)

 付図B.1に、Interstage(コンポーネントトランザクションサービス)のサーバアプリケーションを呼び出すメッセージ監視プログラムの記述例を示します。

 なお、Interstageのサーバアプリケーションの呼出し方法の詳細については、“アプリケーション作成ガイド(CORBAサービス編)”を参照してください。

[付図B.1 メッセージ監視プログラムの記述例 (COBOL言語)]

      * -----------------------------------------------------------------------
      *   メッセージ監視プログラム (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.

目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005