6.2.1 同期型呼び出しをするクライアントアプリケーションの例(COBOL)

同期型呼び出しをするクライアントアプリケーションの処理の流れとコードの例を示します。

<この項の構成>
(1) サービス利用処理の流れ
(2) サービス利用処理のコード

(1) サービス利用処理の流れ

  1. COBOL adapter for TPBrokerの初期化処理
  2. TPBroker OTMの初期化処理
  3. TSCデーモンへの接続
  4. TSCユーザプロキシの生成および各種設定
  5. TSCユーザプロキシのメソッド呼び出し(サーバ側のオブジェクトの呼び出し)
  6. TSCユーザプロキシの削除
  7. TSCデーモンへの接続解放
  8. TPBroker OTMの終了処理

(2) サービス利用処理のコード

      IDENTIFICATION DIVISION.
      PROGRAM-ID. CLIENT.
      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.

      DATA DIVISION.
      WORKING-STORAGE SECTION.

      01 ORB-PTR               USAGE POINTER.
      01 DOMAIN-PTR            USAGE POINTER.
      01 CLIENT-PTR            USAGE POINTER.
      01 CLIENT-WAY            PIC S9(9) COMP.
      01 MY-DOMAIN-NAME        PIC X(10).
      01 MY-DOMAIN-NAME-PTR    USAGE POINTER.
      01 MY-DOMAIN-NAME-LEN    PIC S9(9) COMP.
      01 MY-TSCID              PIC X(10).
      01 MY-TSCID-PTR          USAGE POINTER.
      01 MY-TSCID-LEN          PIC S9(9) COMP.
      01 MY-DOMAIN-FLAG        PIC S9(9) COMP VALUE 1.
      01 ACCEPTOR-NAME         PIC X(20).
      01 ACCEPTOR-NAME-PTR     USAGE POINTER VALUE NULL.
      01 ACCEPTOR-NAME-LEN     PIC S9(9) COMP.
      01 PROXY-PTR             USAGE POINTER.

      01 INIT-CLIENT-FLAG      PIC S9(9) COMP.
      01 DOMAIN-CREATE-FLAG    PIC S9(9) COMP.
      01 GET-CLIENT-FLAG       PIC S9(9) COMP.
      01 TSCPRXY-CREATE-FLAG   PIC S9(9) COMP.

      01 CORBA-ENVIRONMENT.
       02 MAJOR                PIC 9(9) COMP.
        88 CORBA-NO-EXCEPTION     VALUE 0.
        88 CORBA-USER-EXCEPTION   VALUE 1.
        88 CORBA-SYSTEM-EXCEPTION VALUE 2.
       02 EXCEP                USAGE POINTER.
       02 FUNC-NAME            PIC X(256).

      01 ERR-CODE              PIC S9(9) COMP.

     * Sequence
      01 TYPE-CODE-PTR         USAGE POINTER.
      01 ELEMENT-NUMBER        PIC 9(9) COMP.
      01 SETOCTETVAL           PIC X.
      01 in_data               USAGE POINTER.
      01 out_data              USAGE POINTER.

      LINKAGE SECTION.
      01 ARGC                  PIC 9(9) COMP.
      01 ARGV                  USAGE POINTER.

      PROCEDURE DIVISION USING
              BY VALUE ARGC
              BY VALUE ARGV.

      MOVE 0 TO RETURN-CODE.
      MOVE 0 TO INIT-CLIENT-FLAG.
      MOVE 0 TO DOMAIN-CREATE-FLAG.
      MOVE 0 TO GET-CLIENT-FLAG.
      MOVE 0 TO TSCPRXY-CREATE-FLAG.

     * ORBの初期化処理
      CALL 'CORBA-STUB-INIT-ABCfile'.

     * 1. COBOL adapter for TPBrokerの初期化処理
      CALL 'CORBA_orb_init' USING
              BY REFERENCE ARGC
              BY REFERENCE ARGV
              BY REFERENCE CORBA-ENVIRONMENT
          RETURNING ORB-PTR.
     * 例外チェック
      IF NOT CORBA-NO-EXCEPTION THEN
          CALL 'EXCEPTION-HANDLER' USING
                  BY REFERENCE MAJOR
                  BY REFERENCE CORBA-ENVIRONMENT
          CALL 'CORBA_FreeException' USING
                  EXCEP OF CORBA-ENVIRONMENT
          MOVE 1 TO RETURN-CODE
          GO TO PROG-END
      END-IF.
      DISPLAY 'Success CORBA_orb_init'.

     * 2. TPBroker OTMの初期化処理
      CALL 'TSCAdm-initClient' USING
              BY REFERENCE ARGC
              BY REFERENCE ARGV
              BY VALUE     ORB-PTR
              BY REFERENCE CORBA-ENVIRONMENT.
     * 例外チェック
      IF NOT CORBA-NO-EXCEPTION THEN
          CALL 'OTM-EXCEPTION-HANDLER' USING
                  BY REFERENCE MAJOR
                  BY REFERENCE CORBA-ENVIRONMENT
          CALL 'TSCSysExcept-DELETE' USING
                  BY VALUE EXCEP OF CORBA-ENVIRONMENT
          MOVE 1 TO RETURN-CODE
          GO TO PROG-END
      END-IF.
      DISPLAY 'Success TSCAdm-initClient'.
      MOVE 1 TO INIT-CLIENT-FLAG.

     * 3. TSCデーモンへの接続
     * (1) TSCDomainの生成
      SET MY-DOMAIN-NAME-PTR TO NULL.
      SET MY-TSCID-PTR TO NULL.
      MOVE 1 TO MY-DOMAIN-FLAG.
      CALL 'TSCDomain-NEW' USING
              BY VALUE     MY-DOMAIN-NAME-PTR
              BY VALUE     MY-TSCID-PTR
              BY VALUE     MY-DOMAIN-FLAG
              BY REFERENCE CORBA-ENVIRONMENT
          RETURNING DOMAIN-PTR.
     * 例外チェック
      IF NOT CORBA-NO-EXCEPTION THEN
          CALL 'OTM-EXCEPTION-HANDLER' USING
                  BY REFERENCE MAJOR
                  BY REFERENCE CORBA-ENVIRONMENT
          CALL 'TSCSysExcept-DELETE' USING
                  BY VALUE EXCEP OF CORBA-ENVIRONMENT
          MOVE 1 TO RETURN-CODE
          GO TO PROG-END
      END-IF.
      DISPLAY 'Success TSCDomain-NEW:DomainName = '
                                          MY-DOMAIN-NAME.
      MOVE 1 TO DOMAIN-CREATE-FLAG.

     * (2) TSCClientの取得
      MOVE 1 TO CLIENT-WAY.
      CALL 'TSCAdm-getTSCClient' USING
              BY VALUE     DOMAIN-PTR
              BY VALUE     CLIENT-WAY
              BY REFERENCE CORBA-ENVIRONMENT
          RETURNING CLIENT-PTR.
     * 例外チェック
      IF NOT CORBA-NO-EXCEPTION THEN
          CALL 'OTM-EXCEPTION-HANDLER' USING
                  BY REFERENCE MAJOR
                  BY REFERENCE CORBA-ENVIRONMENT
          CALL 'TSCSysExcept-DELETE' USING
                  BY VALUE EXCEP OF CORBA-ENVIRONMENT
          MOVE 1 TO RETURN-CODE
          GO TO PROG-END
      END-IF.
      DISPLAY 'Success TSCAdm-getTSCClient'.
      MOVE 1 TO GET-CLIENT-FLAG.

     * 4. TSCユーザプロキシの生成および各種設定
     *    IDLインタフェース"CBLClass"用のTSCProxy生成
      SET ACCEPTOR-NAME-PTR TO NULL.
      CALL 'CBLClass_TSCprxy-NEW' USING
              BY VALUE     CLIENT-PTR
              BY VALUE     ACCEPTOR-NAME-PTR
              BY REFERENCE CORBA-ENVIRONMENT
          RETURNING PROXY-PTR.
     * 例外チェック
      IF NOT CORBA-NO-EXCEPTION THEN
          CALL 'OTM-EXCEPTION-HANDLER' USING
                  BY REFERENCE MAJOR
                  BY REFERENCE CORBA-ENVIRONMENT
          CALL 'TSCSysExcept-DELETE' USING
                  BY VALUE EXCEP OF CORBA-ENVIRONMENT
          MOVE 1 TO RETURN-CODE
          GO TO PROG-END
      END-IF.
      DISPLAY 'Success CBLClass_TSCprxy-NEW'.
      MOVE 1 TO TSCPRXY-CREATE-FLAG.

     * 5. TSCユーザプロキシのメソッド呼び出し
     *    (サーバ側のオブジェクトの呼び出し)
     *    in属性ユーザデータの確保と設定
     *    Octet TypeCodeオブジェクトの生成
      CALL 'Create_CORBA_TypeCode' USING
              BY VALUE     10
              BY VALUE     1
              BY REFERENCE CORBA-ENVIRONMENT
          RETURNING TYPE-CODE-PTR.
     * 例外チェック
      IF NOT CORBA-NO-EXCEPTION THEN
          CALL 'EXCEPTION-HANDLER' USING
                  BY REFERENCE MAJOR
                  BY REFERENCE CORBA-ENVIRONMENT
          MOVE 1 TO RETURN-CODE
          GO TO PROG-END
      END-IF.

     * Octet型Sequenceオブジェクトの生成
      MOVE 999999999 TO ELEMENT-NUMBER.
      CALL 'CORBA-SeqAlloc' USING
              BY REFERENCE ELEMENT-NUMBER
              BY REFERENCE TYPE-CODE-PTR
              BY REFERENCE in_data
              BY REFERENCE CORBA-ENVIRONMENT.
     * 例外チェック
      IF NOT CORBA-NO-EXCEPTION THEN
          CALL 'EXCEPTION-HANDLER' USING
                  BY REFERENCE MAJOR
                  BY REFERENCE CORBA-ENVIRONMENT
          CALL 'CORBA_FreeException' USING
                  EXCEP OF CORBA-ENVIRONMENT
          MOVE 1 TO RETURN-CODE
          GO TO PROG-END
      END-IF.

      MOVE 1 TO ELEMENT-NUMBER.
      MOVE 'A' TO SETOCTETVAL.
      CALL 'CORBA-SeqSet' USING
              BY REFERENCE in_data
              BY REFERENCE ELEMENT-NUMBER
              BY REFERENCE SETOCTETVAL
              BY REFERENCE CORBA-ENVIRONMENT.
     * 例外チェック
      IF NOT CORBA-NO-EXCEPTION THEN
          CALL 'EXCEPTION-HANDLER' USING
                  BY REFERENCE MAJOR
                  BY REFERENCE CORBA-ENVIRONMENT
          CALL 'CORBA_FreeException' USING
                  EXCEP OF CORBA-ENVIRONMENT
          MOVE 1 TO RETURN-CODE
          GO TO PROG-END
      END-IF.

     * TypeCodeオブジェクトの解放
      CALL 'CORBA_TypeCode__release' USING
              BY VALUE TYPE-CODE-PTR
              BY REFERENCE CORBA-ENVIRONMENT.
     * 例外チェック
      IF NOT CORBA-NO-EXCEPTION THEN
          CALL 'EXCEPTION-HANDLER' USING
                  BY REFERENCE MAJOR
                  BY REFERENCE CORBA-ENVIRONMENT
          CALL 'CORBA_FreeException' USING
                  EXCEP OF CORBA-ENVIRONMENT
          MOVE 1 TO RETURN-CODE
          GO TO PROG-END
      END-IF.

     ****************************************************
     * サーバメソッドの呼び出し
     ****************************************************
      DISPLAY 'Start CBLClass-call'.
      CALL 'CBLClass-call' USING
              BY VALUE     PROXY-PTR
              BY VALUE     in_data
              BY REFERENCE out_data
              BY REFERENCE CORBA-ENVIRONMENT.
     * 例外チェック
      IF NOT CORBA-NO-EXCEPTION THEN
          CALL 'OTM-EXCEPTION-HANDLER' USING
                  BY REFERENCE MAJOR
                  BY REFERENCE CORBA-ENVIRONMENT
          CALL 'TSCSysExcept-DELETE' USING
                  BY VALUE EXCEP OF CORBA-ENVIRONMENT
          MOVE 1 TO RETURN-CODE
          GO TO PROG-END
      END-IF.
      DISPLAY 'Success CBLClass-call'.

      PROG-END.

     * 6. TSCユーザプロキシの削除
     *    領域の解放
          IF TSCPRXY-CREATE-FLAG = 1 THEN
              CALL 'CBLClass_TSCprxy-DEL' USING
                      BY VALUE PROXY-PTR
                      BY REFERENCE CORBA-ENVIRONMENT
     * 例外チェック
              IF NOT CORBA-NO-EXCEPTION THEN
                  CALL 'OTM-EXCEPTION-HANDLER' USING
                          BY REFERENCE MAJOR
                          BY REFERENCE CORBA-ENVIRONMENT
                  CALL 'TSCSysExcept-DELETE' USING
                          BY VALUE EXCEP OF CORBA-ENVIRONMENT
                  MOVE 1 TO RETURN-CODE
              END-IF
          END-IF.

     * 7. TSCデーモンへの接続解放
          IF GET-CLIENT-FLAG = 1 THEN
              CALL 'TSCAdm-releaseTSCClient' USING
                      BY VALUE CLIENT-PTR
                      BY REFERENCE CORBA-ENVIRONMENT
     * 例外チェック
              IF NOT CORBA-NO-EXCEPTION THEN
                  CALL 'OTM-EXCEPTION-HANDLER' USING
                          BY REFERENCE MAJOR
                          BY REFERENCE CORBA-ENVIRONMENT
                  CALL 'TSCSysExcept-DELETE' USING
                          BY VALUE EXCEP OF CORBA-ENVIRONMENT
                  MOVE 1 TO RETURN-CODE
              ELSE
                  DISPLAY 'Success TSCAdm-releaseTSCClient'
              END-IF
          END-IF.

          IF DOMAIN-CREATE-FLAG = 1 THEN
              CALL 'TSCDomain-DELETE' USING
                      BY VALUE DOMAIN-PTR
                      BY REFERENCE CORBA-ENVIRONMENT
     * 例外チェック
              IF NOT CORBA-NO-EXCEPTION THEN
                  CALL 'OTM-EXCEPTION-HANDLER' USING
                          BY REFERENCE MAJOR
                          BY REFERENCE CORBA-ENVIRONMENT
                  CALL 'TSCSysExcept-DELETE' USING
                          BY VALUE EXCEP OF CORBA-ENVIRONMENT
                  MOVE 1 TO RETURN-CODE
              END-IF
          END-IF.

     * 8. TPBroker OTMの終了処理
          IF INIT-CLIENT-FLAG = 1 THEN
              CALL 'TSCAdm-endClient' USING
                      BY REFERENCE CORBA-ENVIRONMENT
     * 例外チェック
              IF NOT CORBA-NO-EXCEPTION THEN
                  CALL 'OTM-EXCEPTION-HANDLER' USING
                          BY REFERENCE MAJOR
                          BY REFERENCE CORBA-ENVIRONMENT
                  CALL 'TSCSysExcept-DELETE' USING
                          BY VALUE EXCEP OF CORBA-ENVIRONMENT
                  MOVE 1 TO RETURN-CODE
              ELSE
                  DISPLAY 'Success TSCAdm-endClient'
              END-IF
          END-IF.

      END PROGRAM CLIENT.