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)」を参照してください。
****************************************************
* 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'.
同期型呼び出しの場合と同様です。「6.2.2(2) サービス登録処理の流れ」,「6.2.2(3) サービス登録処理のコード」を参照してください。