トランザクショナル分散オブジェクト基盤 TPBroker Object Transaction Monitor プログラマーズガイド

[目次][索引][前へ][次へ]

6.5.1 TSCContextを利用するクライアントアプリケーションの例(COBOL)

TSCContextを利用するクライアントアプリケーションの処理の流れとコードの例を示します。太字で示しているコードは,同期型呼び出しのコードと異なる部分です。

なお,TSCContextを利用するクライアントアプリケーションの例外処理は,同期型呼び出しの場合と同様です。「6.2.3 例外処理のコードの例(COBOL)」を参照してください。

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

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

  1. COBOL adapter for TPBrokerの初期化処理
  2. TPBroker OTMの初期化処理
  3. TSCデーモンへの接続
  4. TSCユーザプロキシの生成および各種設定
  5. TSCコンテキストへのユーザデータの設定
  6. TSCユーザプロキシのメソッド呼び出し(サーバ側のオブジェクトの呼び出し)
  7. TSCユーザプロキシの削除
  8. TSCデーモンへの接続解放
  9. 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 CONTEXT-PTR           USAGE POINTER.
       01 CONTEXT-DATA-PTR      USAGE POINTER.
       01 CONTEXT-DATA-LEN      PIC S9(9) COMP.
       01 CONTEXT-DATA          PIC X(32).
 
       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コンテキストへのユーザデータの設定
       CALL 'TSCProxyObject-TSCContextGet' USING
               BY VALUE PROXY-PTR
               BY REFERENCE CORBA-ENVIRONMENT
           RETURNING CONTEXT-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.
       MOVE 'UserID:1111' TO CONTEXT-DATA.
       MOVE 32 TO CONTEXT-DATA-LEN.
       CALL 'CORBA_string_set' USING
               BY REFERENCE CONTEXT-DATA-PTR
               BY REFERENCE CONTEXT-DATA-LEN
               BY REFERENCE CONTEXT-DATA.
       CALL 'TSCContext_setUserData' USING
               BY VALUE CONTEXT-PTR
               BY VALUE CONTEXT-DATA-PTR
               BY VALUE CONTEXT-DATA-LEN
               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.
 
      * 6. 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.
 
      * 7. 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.
 
      * 8. 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.
 
      * 9. 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.