TSCWatchTimeを利用するサーバアプリケーションの処理の流れとコードの例を示します。斜体で示しているコードは,雛形クラスとして自動生成される部分です。太字で示しているコードは,同期型呼び出しのコードと異なる部分です。
サーバアプリケーションの作成時には,ユーザは,自動生成された雛形クラスCBLClass_TSCimplにコードを記述します。また,雛形クラスCBLClass_TSCfactにTSCユーザオブジェクトファクトリのコードを記述します。
なお,TSCWatchTimeを利用するサーバアプリケーションの例外処理は,同期型呼び出しの場合と同様です。「6.2.3 例外処理のコードの例(COBOL)」を参照してください。
*****************************************************
* 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'.
同期型呼び出しの場合と同様です。「6.2.2(2) サービス登録処理の流れ」,「6.2.2(3) サービス登録処理のコード」を参照してください。