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

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

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) サービス登録処理のコード」を参照してください。