6.5.2 TSCContextを利用するサーバアプリケーションの例(COBOL)

TSCContextを利用するサーバアプリケーションの処理の流れとコードの例を示します。斜体で示しているコードは,雛形クラスとして自動生成される部分です。太字で示しているコードは,同期型呼び出しのコードと異なる部分です。

サーバアプリケーションの作成時には,ユーザは,自動生成された雛形クラスCBLClass_TSCimplにTSCユーザオブジェクトのコードを記述します。また,雛形クラスCBLClass_TSCfactにTSCユーザオブジェクトファクトリのコードを記述します。

また,TSCContextを使用する場合は,ユーザメソッドの第1引数にTSCユーザオブジェクトのポインタを受け取る形式2の雛形ソースが必要です。形式2の雛形ソースを出力するには,tscidl2cblコマンドの-formatオプションに"2"を指定してください。形式1および形式2は,TSCユーザオブジェクトに対してユーザが実装する副プログラムの形式です。詳細は,7章の「ABC_TSCfactimpl(COBOL)」を参照してください。

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

<この項の構成>
(1) TSCユーザオブジェクト(CBLClass_TSCimpl)とTSCユーザオブジェクトファクトリ(CBLClass_TSCfact)のコード
(2) サービス登録処理の流れ・コード

(1) TSCユーザオブジェクト(CBLClass_TSCimpl)とTSCユーザオブジェクトファクトリ(CBLClass_TSCfact)のコード

     ****************************************************
     * Operation 'call'
     ****************************************************
      IDENTIFICATION DIVISION.
      PROGRAM-ID. 'call'.
      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      REPOSITORY.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      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 TSC-SEQMAXLEN PIC 9(9) USAGE COMP.
      01 TSC-TC-1 USAGE POINTER.
      01 TSC-SEQENV.
        02 MAJOR PIC 9(9) USAGE COMP.
        02 EXCEP USAGE POINTER.
        02 FUNC-NAME PIC X(256).
      01 TSC-TC-2 USAGE POINTER.

     * 必要に応じてデータ宣言を追加できます。
      01 ERR-CODE                 PIC S9(9) COMP.
      01 TYPE-CODE-PTR            USAGE POINTER.
      01 MY-OUT-DATA-LEN          PIC S9(9) COMP.
      01 ELEMENT-NUMBER           PIC S9(9) COMP.
      01 SETOCTETVAL              PIC X.

      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).

      LINKAGE SECTION.
      01 TSC-OBJECT-PTR USAGE POINTER.
      01 in_data USAGE POINTER.
      01 out_data USAGE POINTER.

     * Do not change signature of this sub-program.
      PROCEDURE DIVISION
          USING
              BY VALUE TSC-OBJECT-PTR
              BY VALUE in_data
              BY REFERENCE out_data.

     * Write user own code.
     * ユーザメソッドのコードを記述します。
      DISPLAY 'call method in CBLClass'.

      CALL 'TSCObject-TSCContextGet' USING
              BY VALUE TSC-OBJECT-PTR
              BY REFERENCE CORBA-ENVIRONMENT
          RETURNING CONTEXT-PTR.
      IF NOT CORBA-NO-EXCEPTION THEN
          CALL 'OTM-EXCEPTION-HANDLER' USING
                  BY REFERENCE MAJOR OF CORBA-ENVIRONMENT
                  BY REFERENCE CORBA-ENVIRONMENT
          CALL 'TSCSysExcept-DELETE' USING
                  BY VALUE EXCEP OF CORBA-ENVIRONMENT
          EXIT PROGRAM
      END-IF.
      CALL 'TSCContext-getUserData' USING
              BY VALUE CONTEXT-PTR
              BY REFERENCE CORBA-ENVIRONMENT
          RETURNING CONTEXT-DATA-PTR.
      IF NOT CORBA-NO-EXCEPTION THEN
          CALL 'OTM-EXCEPTION-HANDLER' USING
                  BY REFERENCE MAJOR OF CORBA-ENVIRONMENT
                  BY REFERENCE CORBA-ENVIRONMENT
          CALL 'TSCSysExcept-DELETE' USING
                  BY VALUE EXCEP OF CORBA-ENVIRONMENT
          EXIT PROGRAM
      END-IF.
      CALL 'TSCContext-getUserDataLength' USING
              BY VALUE CONTEXT-PTR
              BY REFERENCE CORBA-ENVIRONMENT
          RETURNING CONTEXT-DATA-LEN.
      IF NOT CORBA-NO-EXCEPTION THEN
          CALL 'OTM-EXCEPTION-HANDLER' USING
                  BY REFERENCE MAJOR OF CORBA-ENVIRONMENT
                  BY REFERENCE CORBA-ENVIRONMENT
          CALL 'TSCSysExcept-DELETE' USING
                  BY VALUE EXCEP OF CORBA-ENVIRONMENT
          EXIT PROGRAM
      END-IF.
      IF (CONTEXT-DATA-LEN IS > 32) THEN
          MOVE 32 TO CONTEXT-DATA-LEN
      END-IF.
      CALL 'CORBA_string_get' USING
              BY REFERENCE CONTEXT-DATA-PTR
              BY REFERENCE CONTEXT-DATA-LEN
              BY REFERENCE CONTEXT-DATA.
      DISPLAY 'Context-data = ' CONTEXT-DATA.

     * OUT属性引数の作成
     * 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 OF CORBA-ENVIRONMENT
                  BY REFERENCE CORBA-ENVIRONMENT
          EXIT PROGRAM
      END-IF.

     * Octet型Sequenceオブジェクトの生成
      MOVE 999999999 TO MY-OUT-DATA-LEN.
      CALL 'CORBA-SeqAlloc' USING
              BY REFERENCE MY-OUT-DATA-LEN
              BY REFERENCE TYPE-CODE-PTR
              BY REFERENCE out_data
              BY REFERENCE CORBA-ENVIRONMENT.
     * 例外チェック
      IF NOT CORBA-NO-EXCEPTION THEN
          CALL 'EXCEPTION-HANDLER' USING
                  BY REFERENCE MAJOR OF CORBA-ENVIRONMENT
                  BY REFERENCE CORBA-ENVIRONMENT
          EXIT PROGRAM
      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 OF CORBA-ENVIRONMENT
                  BY REFERENCE CORBA-ENVIRONMENT
          EXIT PROGRAM
      END-IF.

      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 OF CORBA-ENVIRONMENT
                  BY REFERENCE CORBA-ENVIRONMENT
          EXIT PROGRAM
      END-IF.

      END PROGRAM 'call'.


     ****************************************************
     * Constructor of 'CBLClass_TSCimpl'
     ****************************************************
     * Constructor of OTM Object
     * Implement.
      IDENTIFICATION DIVISION.
      PROGRAM-ID. 'CBLClass_TSCimpl-NEW'.
      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      REPOSITORY.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      LINKAGE SECTION.
      01 SKELETON-POINTER USAGE POINTER.
     * You can change signature of this sub-program.
      PROCEDURE DIVISION
          RETURNING SKELETON-POINTER.

     * Write user own code, if necessary.
     * 必要に応じてユーザ独自のコードを追加できます。
     * コンストラクタの引数の数および型を変更することもできます。

     * This sub-program must return a pointer
     * that 'CBLClass_TSCsk-NEW' sub-program returns.
          CALL 'CBLClass_TSCsk-NEW'
              RETURNING SKELETON-POINTER.
      END PROGRAM 'CBLClass_TSCimpl-NEW'.

     ****************************************************
     * Destructor of 'CBLClass_TSCimpl'
     ****************************************************
      IDENTIFICATION DIVISION.
      PROGRAM-ID. 'CBLClass_TSCimpl-DEL'.
      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      REPOSITORY.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      LINKAGE SECTION.
      01 SKELETON-POINTER USAGE POINTER.
     * You can change signature of this sub-program.
      PROCEDURE DIVISION USING
              BY VALUE SKELETON-POINTER.

     * Write user own code, if necessary.
     * 必要に応じてユーザ独自のコードを追加できます。

     * This sub-program must call
     * 'CBLClass_TSCsk-DEL' sub-program.
          CALL 'CBLClass_TSCsk-DEL' USING
              BY VALUE SKELETON-POINTER.
      END PROGRAM 'CBLClass_TSCimpl-DEL'.

     ****************************************************
     * Constructor of CBLClass_TSCfact
     ****************************************************
      IDENTIFICATION DIVISION.
      PROGRAM-ID. 'CBLClass_TSCfact-NEW'.
      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      REPOSITORY.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      LINKAGE SECTION.
      01 FACTORY-POINTER USAGE POINTER.
     * You can change signature of this sub-program.
      PROCEDURE DIVISION
          RETURNING FACTORY-POINTER.

     * Write user own code, if necessary.
     * 必要に応じてユーザ独自のコードを追加できます。
     * 引数の数および型を変更することもできます。

     * This sub-program must return a pointer that
     * 'CBLClass_TSCfact-get' sub-program returns.
          CALL 'CBLClass_TSCfact-get'
              RETURNING FACTORY-POINTER.
      END PROGRAM 'CBLClass_TSCfact-NEW'.


     ****************************************************
     * Destructor of CBLClass_TSCfact
     ****************************************************
      IDENTIFICATION DIVISION.
      PROGRAM-ID. 'CBLClass_TSCfact-DEL'.
      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      REPOSITORY.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      LINKAGE SECTION.
      01 FACTORY-POINTER USAGE POINTER.
      PROCEDURE DIVISION USING
              BY VALUE FACTORY-POINTER.

     * Write user own code, if necessary.
     * 必要に応じてユーザ独自のコードを追加できます。

     * This sub-program must call
     * 'CBLClass_TSCfact-rls'.sub-program.
          CALL 'CBLClass_TSCfact-rls' USING
              BY VALUE FACTORY-POINTER.
      END PROGRAM 'CBLClass_TSCfact-DEL'.


     ****************************************************
     * 'create' method of CBLClass_TSCfact
     ****************************************************
      IDENTIFICATION DIVISION.
      PROGRAM-ID. 'CBLClass_TSCfact-crt'.
      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      REPOSITORY.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      LINKAGE SECTION.
      01 FACTORY-POINTER USAGE POINTER.
      01 OBJECT-POINTER USAGE POINTER.
     * Do not change signature of this sub-program.
      PROCEDURE DIVISION USING
              BY VALUE FACTORY-POINTER
          RETURNING OBJECT-POINTER.

     * Write user own code, if necessary.
     * サーバオブジェクトを生成するコードを記述します。
     * 必要に応じて変更してください。

     * This sub-program must return pointer that
     * 'CBLClass_TSCimpl-NEW' returns.
          CALL 'CBLClass_TSCimpl-NEW'
              RETURNING OBJECT-POINTER.
      END PROGRAM 'CBLClass_TSCfact-crt'.


     ****************************************************
     * 'destroy' method of CBLClass_TSCfact
     ****************************************************
      IDENTIFICATION DIVISION.
      PROGRAM-ID. 'CBLClass_TSCfact-dst'.
      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      REPOSITORY.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      LINKAGE SECTION.
      01 FACTORY-POINTER USAGE POINTER.
      01 OBJECT-POINTER USAGE POINTER.
     * Do not change signature of this sub-program.
      PROCEDURE DIVISION USING
              BY VALUE FACTORY-POINTER
              BY VALUE OBJECT-POINTER.

     * Write user own code, if necessary.
     * サーバオブジェクトを削除するコードを記述します。
     * 必要に応じて変更してください。

     * This sub-program must return pointer that
     * 'CBLClass_TSCimpl-DEL' returns.
          CALL 'CBLClass_TSCimpl-DEL' USING
              BY VALUE OBJECT-POINTER.
      END PROGRAM 'CBLClass_TSCfact-dst'.


     ****************************************************
     * TSCCBLThread-beginThread of
     *     TSCCBLThread
     ****************************************************
      IDENTIFICATION DIVISION.
      PROGRAM-ID. 'TSCCBLThread-beginThread'.
      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      REPOSITORY.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 BEGIN-THREAD-PTR USAGE POINTER.
      01 END-THREAD-PTR USAGE POINTER.
     * Do not change signature of this sub-program.
      LINKAGE SECTION.
      01 THREAD-FACTORY-ID PIC S9(9) COMP.
      PROCEDURE DIVISION USING
              BY VALUE THREAD-FACTORY-ID.

     * Write user own code.
     * スレッド開始処理を記述します。
     * 必要に応じて変更してください。

     END PROGRAM 'TSCCBLThread-beginThread'.


     ****************************************************
     * TSCCBLThread-endThread of
     *     TSCCBLThreadFactory
     ****************************************************
      IDENTIFICATION DIVISION.
      PROGRAM-ID. 'TSCCBLThread-endThread'.
      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      REPOSITORY.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
     * Do not change signature of this sub-program.
      LINKAGE SECTION.
      01 THREAD-FACTORY-ID PIC S9(9) COMP.
      PROCEDURE DIVISION USING
              BY VALUE THREAD-FACTORY-ID.

     * Write user own code.
     * スレッド終了処理を記述します。
     * 必要に応じて変更してください。

      END PROGRAM 'TSCCBLThread-endThread'.

(2) サービス登録処理の流れ・コード

同期型呼び出しの場合と同様です。「6.2.2(2) サービス登録処理の流れ」,「6.2.2(3) サービス登録処理のコード」を参照してください。