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

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

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

なお,TSCWatchTimeを利用するサーバアプリケーションの例外処理は,同期型呼び出しの場合と同様です。「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.

      LINKAGE SECTION.
      01 in_data USAGE POINTER.
      01 out_data USAGE POINTER.

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

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

     * 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
              RETURNING ERR-CODE.
     * 例外チェック
      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
        RETURNING ERR-CODE.
     * 例外チェック
      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.
      01 MY-WATCH-TIME-PTR        USAGE POINTER.
      01 MY-WATCH-TIME            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).
      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.

     * 戻り値の初期化
          SET SKELETON-POINTER TO NULL.

     * 時間監視60秒の時間監視オブジェクト生成
          MOVE 60 TO MY-WATCH-TIME.
          CALL 'TSCWatchTime-NEW' USING
                  BY VALUE MY-WATCH-TIME
                  BY REFERENCE CORBA-ENVIRONMENT
              RETURNING MY-WATCH-TIME-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
              GO TO PROG-END
          END-IF.

     * 時間監視の開始
          CALL 'TSCWatchTime-start' USING
                  BY VALUE MY-WATCH-TIME-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
              GO TO PROG-END
          END-IF.

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

     * 時間監視の中断
          CALL 'TSCWatchTime-stop' USING
                  BY VALUE MY-WATCH-TIME-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
              GO TO PROG-END
          END-IF.

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

      PROG-END.

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