同期型呼び出しをするクライアントアプリケーションの処理の流れとコードの例を示します。
IDENTIFICATION DIVISION.
PROGRAM-ID. CLIENT.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 ORB-PTR USAGE POINTER.
01 DOMAIN-PTR USAGE POINTER.
01 CLIENT-PTR USAGE POINTER.
01 CLIENT-WAY PIC S9(9) COMP.
01 MY-DOMAIN-NAME PIC X(10).
01 MY-DOMAIN-NAME-PTR USAGE POINTER.
01 MY-DOMAIN-NAME-LEN PIC S9(9) COMP.
01 MY-TSCID PIC X(10).
01 MY-TSCID-PTR USAGE POINTER.
01 MY-TSCID-LEN PIC S9(9) COMP.
01 MY-DOMAIN-FLAG PIC S9(9) COMP VALUE 1.
01 ACCEPTOR-NAME PIC X(20).
01 ACCEPTOR-NAME-PTR USAGE POINTER VALUE NULL.
01 ACCEPTOR-NAME-LEN PIC S9(9) COMP.
01 PROXY-PTR USAGE POINTER.
01 INIT-CLIENT-FLAG PIC S9(9) COMP.
01 DOMAIN-CREATE-FLAG PIC S9(9) COMP.
01 GET-CLIENT-FLAG PIC S9(9) COMP.
01 TSCPRXY-CREATE-FLAG 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).
01 ERR-CODE PIC S9(9) COMP.
* Sequence
01 TYPE-CODE-PTR USAGE POINTER.
01 ELEMENT-NUMBER PIC 9(9) COMP.
01 SETOCTETVAL PIC X.
01 in_data USAGE POINTER.
01 out_data USAGE POINTER.
LINKAGE SECTION.
01 ARGC PIC 9(9) COMP.
01 ARGV USAGE POINTER.
PROCEDURE DIVISION USING
BY VALUE ARGC
BY VALUE ARGV.
MOVE 0 TO RETURN-CODE.
MOVE 0 TO INIT-CLIENT-FLAG.
MOVE 0 TO DOMAIN-CREATE-FLAG.
MOVE 0 TO GET-CLIENT-FLAG.
MOVE 0 TO TSCPRXY-CREATE-FLAG.
* ORBの初期化処理
CALL 'CORBA-STUB-INIT-ABCfile'.
* 1. COBOL adapter for TPBrokerの初期化処理
CALL 'CORBA_orb_init' USING
BY REFERENCE ARGC
BY REFERENCE ARGV
BY REFERENCE CORBA-ENVIRONMENT
RETURNING ORB-PTR.
* 例外チェック
IF NOT CORBA-NO-EXCEPTION THEN
CALL 'EXCEPTION-HANDLER' USING
BY REFERENCE MAJOR
BY REFERENCE CORBA-ENVIRONMENT
CALL 'CORBA_FreeException' USING
EXCEP OF CORBA-ENVIRONMENT
MOVE 1 TO RETURN-CODE
GO TO PROG-END
END-IF.
DISPLAY 'Success CORBA_orb_init'.
* 2. TPBroker OTMの初期化処理
CALL 'TSCAdm-initClient' USING
BY REFERENCE ARGC
BY REFERENCE ARGV
BY VALUE ORB-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
MOVE 1 TO RETURN-CODE
GO TO PROG-END
END-IF.
DISPLAY 'Success TSCAdm-initClient'.
MOVE 1 TO INIT-CLIENT-FLAG.
* 3. TSCデーモンへの接続
* (1) TSCDomainの生成
SET MY-DOMAIN-NAME-PTR TO NULL.
SET MY-TSCID-PTR TO NULL.
MOVE 1 TO MY-DOMAIN-FLAG.
CALL 'TSCDomain-NEW' USING
BY VALUE MY-DOMAIN-NAME-PTR
BY VALUE MY-TSCID-PTR
BY VALUE MY-DOMAIN-FLAG
BY REFERENCE CORBA-ENVIRONMENT
RETURNING DOMAIN-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
MOVE 1 TO RETURN-CODE
GO TO PROG-END
END-IF.
DISPLAY 'Success TSCDomain-NEW:DomainName = '
MY-DOMAIN-NAME.
MOVE 1 TO DOMAIN-CREATE-FLAG.
* (2) TSCClientの取得
MOVE 1 TO CLIENT-WAY.
CALL 'TSCAdm-getTSCClient' USING
BY VALUE DOMAIN-PTR
BY VALUE CLIENT-WAY
BY REFERENCE CORBA-ENVIRONMENT
RETURNING CLIENT-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
MOVE 1 TO RETURN-CODE
GO TO PROG-END
END-IF.
DISPLAY 'Success TSCAdm-getTSCClient'.
MOVE 1 TO GET-CLIENT-FLAG.
* 4. TSCユーザプロキシの生成および各種設定
* IDLインタフェース"CBLClass"用のTSCProxy生成
SET ACCEPTOR-NAME-PTR TO NULL.
CALL 'CBLClass_TSCprxy-NEW' USING
BY VALUE CLIENT-PTR
BY VALUE ACCEPTOR-NAME-PTR
BY REFERENCE CORBA-ENVIRONMENT
RETURNING PROXY-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
MOVE 1 TO RETURN-CODE
GO TO PROG-END
END-IF.
DISPLAY 'Success CBLClass_TSCprxy-NEW'.
MOVE 1 TO TSCPRXY-CREATE-FLAG.
* 5. TSCユーザプロキシのメソッド呼び出し
* (サーバ側のオブジェクトの呼び出し)
* in属性ユーザデータの確保と設定
* 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
BY REFERENCE CORBA-ENVIRONMENT
MOVE 1 TO RETURN-CODE
GO TO PROG-END
END-IF.
* Octet型Sequenceオブジェクトの生成
MOVE 999999999 TO ELEMENT-NUMBER.
CALL 'CORBA-SeqAlloc' USING
BY REFERENCE ELEMENT-NUMBER
BY REFERENCE TYPE-CODE-PTR
BY REFERENCE in_data
BY REFERENCE CORBA-ENVIRONMENT.
* 例外チェック
IF NOT CORBA-NO-EXCEPTION THEN
CALL 'EXCEPTION-HANDLER' USING
BY REFERENCE MAJOR
BY REFERENCE CORBA-ENVIRONMENT
CALL 'CORBA_FreeException' USING
EXCEP OF CORBA-ENVIRONMENT
MOVE 1 TO RETURN-CODE
GO TO PROG-END
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
BY REFERENCE CORBA-ENVIRONMENT
CALL 'CORBA_FreeException' USING
EXCEP OF CORBA-ENVIRONMENT
MOVE 1 TO RETURN-CODE
GO TO PROG-END
END-IF.
* TypeCodeオブジェクトの解放
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
BY REFERENCE CORBA-ENVIRONMENT
CALL 'CORBA_FreeException' USING
EXCEP OF CORBA-ENVIRONMENT
MOVE 1 TO RETURN-CODE
GO TO PROG-END
END-IF.
****************************************************
* サーバメソッドの呼び出し
****************************************************
DISPLAY 'Start CBLClass-call'.
CALL 'CBLClass-call' USING
BY VALUE PROXY-PTR
BY VALUE in_data
BY REFERENCE out_data
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
MOVE 1 TO RETURN-CODE
GO TO PROG-END
END-IF.
DISPLAY 'Success CBLClass-call'.
PROG-END.
* 6. TSCユーザプロキシの削除
* 領域の解放
IF TSCPRXY-CREATE-FLAG = 1 THEN
CALL 'CBLClass_TSCprxy-DEL' USING
BY VALUE PROXY-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
MOVE 1 TO RETURN-CODE
END-IF
END-IF.
* 7. TSCデーモンへの接続解放
IF GET-CLIENT-FLAG = 1 THEN
CALL 'TSCAdm-releaseTSCClient' USING
BY VALUE CLIENT-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
MOVE 1 TO RETURN-CODE
ELSE
DISPLAY 'Success TSCAdm-releaseTSCClient'
END-IF
END-IF.
IF DOMAIN-CREATE-FLAG = 1 THEN
CALL 'TSCDomain-DELETE' USING
BY VALUE DOMAIN-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
MOVE 1 TO RETURN-CODE
END-IF
END-IF.
* 8. TPBroker OTMの終了処理
IF INIT-CLIENT-FLAG = 1 THEN
CALL 'TSCAdm-endClient' USING
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
MOVE 1 TO RETURN-CODE
ELSE
DISPLAY 'Success TSCAdm-endClient'
END-IF
END-IF.
END PROGRAM CLIENT.