| Interstage Studio プログラマーズガイド |
目次
索引
![]()
|
| 第3部 COBOL/CORBA編 | > 第8章 CORBAクライアントアプリケーションを開発する | > 8.2 開発の流れ |

一般的なクライアントプログラムの記述内容を、以下に示します。
クライアントプログラムの処理順

ここでは、コンソールから入力したパラメタ2個をサーバプログラムに渡し、その結果をコンソールに表示するプログラムの例を示しながら、説明します。
サーバ側のアプリケーションを以下に示します。
パラメタを2個受け取り、その加算結果を復帰値として返却するサーバアプリケーションです。ネーミングサービス名は、「Sample::POAintf」で登録されているものとします。
// モジュール宣言
module SAMPLE {
// ユーザインタフェース宣言
interface CALCULATE_ADD {
long CALCULATE(in long param1,in long param2);
};
};
静的起動インタフェースを使用した場合のオブジェクト指向COBOLプログラム作成上のポイントを、プログラム記述例を使用して説明します。
以下のようにCONFIGURATION SECTIONを記述します。
ORBの初期化で使用する変数をWORKING-STORAGE SECTIONで定義します。
以下のような変数を宣言します。
以下の処理を記述します。これらの処理は、テンプレートより入力できます。
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
* ObjectDirectorの標準登録集(リポジトリ宣言用)
COPY CORBA--REP.
* ネーミングサービスの標準登録集(リポジトリ宣言用)
COPY CosNaming--REP.
* IDLコンパイラが出力した登録集(リポジトリ宣言用)
COPY USCALCULATE_ADD--REP.
* Interstage Studioが提供しているCORBAクライアント開発用クラス
CLASS CDCORBA.
SPECIAL-NAMES.
ARGUMENT-NUMBER IS 引数番号
ARGUMENT-VALUE IS 引数内容
SYMBOLIC CONSTANT
* ObjectDirectorの標準登録集(定数宣言用)
COPY CORBA--CONST.
* ネーミングサービスの標準登録集(定数宣言用)
COPY COSNAMING--CONST.
* IDLコンパイラが出力した登録集(定数宣言用)
COPY USCALCULATE_ADD--CONST.
.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 L-APL-NAME PIC X(50) VALUE "CALCULATE_ADD_CLIENT".
01 W-OBJECT OBJECT REFERENCE CORBA-OBJECT.
01 W-TARGET OBJECT REFERENCE SAMPLE-CALCULATE_ADD.
01 W-PARAM1 PIC S9(9) COMP-5.
01 W-PARAM2 PIC S9(9) COMP-5.
01 W-RETURN PIC S9(9) COMP-5.
01 L-RETURN PIC S9(9) COMP-5.
01 L-NAME PIC X(128) VALUE "SAMPLE::CALCULATE_ADD".
PROCEDURE DIVISION.
* ORB初期化
INVOKE CDCORBA "GET-ORB" USING L-APL-NAME RETURNING L-RETURN.
IF L-RETURN NOT = 0
THEN
DISPLAY "ERROR OCCURRED AT GET-ORB"
END-IF
* ネーミングサービス初期化
INVOKE CDCORBA "GET-COSNAMING" RETURNING L-RETURN.
IF L-RETURN NOT = 0
THEN
DISPLAY "ERROR OCCURRED AT GET-COSNAMING"
END-IF
INVOKE CDCORBA "GET-NAMEOBJ" USING L-NAME RETURNING L-RETURN.
IF L-RETURN NOT = 0
THEN
DISPLAY "ERROR OCCURRED AT GET-NAMEOBJ"
END-IF
* サーバオブジェクトの取得
SET W-OBJECT TO NULL.
INVOKE CDCORBA "GET-NAMEOBJR" RETURNING W-OBJECT.
IF W-OBJECT = NULL
THEN
DISPLAY "ERROR OCCURRED AT GET-NAMEOBJR"
END-IF
* ターゲットオブジェクト取得
SET W-TARGET TO NULL.
INVOKE SAMPLE-CALCULATE_ADD "NARROW" USING W-OBJECT RETURNING W-TARGET.
IF W-TARGET = NULL
THEN
DISPLAY "ERROR OCCURRED AT NARROW"
END-IF
* サーバアプリケーションのメソッドの呼出し
DISPLAY "第一引数を入力してください:" WITH NO ADVANCING.
ACCEPT W-PARAM1.
DISPLAY "第二引数を入力してください:" WITH NO ADVANCING.
ACCEPT W-PARAM2.
INVOKE W-TARGET "CALCULATE" USING W-PARAM1 W-PARAM2 RETURNING W-RETURN.
DISPLAY "加算結果:" W-RETURN.
* 実行を終了します。
EXIT PROGRAM.
END PROGRAM MAIN.
静的起動インタフェースを使用した場合のCOBOLプログラムの記述例を示します。個々の処理記述は異なりますが、処理の流れなどはOOCOBOLの場合と同じです。環境部(ENVIRONMENT DIVISION)、データ部(DATA DIVISION)、個々の処理の詳細については、"Interstage Application Serverアプリケーション作成ガイド(CORBAサービス編)"を参照してください。
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
ARGUMENT-NUMBER IS ARG-C
ARGUMENT-VALUE IS ARG-V
SYMBOLIC CONSTANT
COPY SYMBOL-CONST IN CORBA.
.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CONST IN CORBA.
* ORB SETTING PARAMETER
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY CURRENT-ARG-C.
01 CURRENT-ARG-V.
02 FILLER OCCURS 6.
03 CURRENT-ARG-V-VALUE USAGE POINTER.
01 APLI-NAME PIC X(30) VALUE "CALCULATE_ADD_CLIENT".
01 TMP-STRING-BUF PIC X(20).
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY ARG-COUNT.
* 文字列長
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY STRING-LENGTH.
* 作業ポインタ
01 TEMP-BUF POINTER.
* CORBA-ENVIRONMENT
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.
* CORBA-ORB
01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB.
* CORBA-BOA
01 COPY BOA IN CORBA REPLACING CORBA-BOA BY BOA.
* CORBA-OBJECT(各作業用)
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ.
* 例外発生時の例外ID
01 MESS PIC X(30).
* Naming Serviceリポジトリ
01 COPY COSNAMING-NAMINGCONTEXT IN CORBA REPLACING
COSNAMING-NAMINGCONTEXT BY COS-NAMING.
* ネーミングサービス名
01 STR-BUF PIC X(30).
* そのほかネーミングコンテキスト操作用
01 COPY COSNAMING-NAME IN CORBA REPLACING COSNAMING-NAME BY NAME.
01 NAME-A USAGE POINTER.
01 COPY COSNAMING-NAMECOMPONENT IN CORBA REPLACING
COSNAMING-NAMECOMPONENT BY NAME-COMPONENT.
01 NAME-COMPONENT-A USAGE POINTER.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY NUM.
* メソッドの復帰値
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY RET.
* メソッドのパラメタ
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARAM1.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARAM2.
PROCEDURE DIVISION.
* サーバアプリ起動パラメタの設定
* 起動パラメタの最初には、クライアントアプリケーション名を設定
ACCEPT CURRENT-ARG-C FROM ARG-C.
COMPUTE CURRENT-ARG-C = CURRENT-ARG-C + 1.
PERFORM VARYING ARG-COUNT FROM 1 BY 1 UNTIL ARG-COUNT > CURRENT-ARG-C
IF ARG-COUNT = 1
MOVE APLI-NAME TO TMP-STRING-BUF
ELSE
ACCEPT TMP-STRING-BUF FROM ARG-V
END-IF
MOVE FUNCTION LENG (TMP-STRING-BUF) TO STRING-LENGTH
CALL "CORBA-STRING-SET" USING
CURRENT-ARG-V-VALUE (ARG-COUNT)
STRING-LENGTH
TMP-STRING-BUF
END-PERFORM.
SET CURRENT-ARG-V-VALUE (ARG-COUNT) TO NULL.
*
* ORBの初期化
* (CORBA-ORB-INIT,CORBA-ORB-BOA-INIT)
*
MOVE 12 TO STRING-LENGTH.
CALL "CORBA-STRING-SET" USING
TEMP-BUF
STRING-LENGTH
FJ-OM-ORB-ID.
CALL "CORBA-ORB-INIT" USING
CURRENT-ARG-C
CURRENT-ARG-V
TEMP-BUF
ENV
ORB.
CALL "CORBA-FREE" USING TEMP-BUF.
PERFORM ENV-CHECK.
MOVE 15 TO STRING-LENGTH.
CALL "CORBA-STRING-SET" USING
TEMP-BUF
STRING-LENGTH
CORBA-BOA-OA-ID.
CALL "CORBA-ORB-BOA-INIT" USING
ORB
CURRENT-ARG-C
CURRENT-ARG-V
TEMP-BUF
ENV
BOA.
CALL "CORBA-FREE" USING TEMP-BUF.
PERFORM ENV-CHECK.
*
* Naming Serviceのリポジトリの獲得
*
MOVE FUNCTION LENG ( CORBA-ORB-OBJECTID-NAMESERVICE ) TO STRING-LENGTH.
CALL "CORBA-STRING-SET" USING
TEMP-BUF
STRING-LENGTH
CORBA-ORB-OBJECTID-NAMESERVICE.
CALL "CORBA-ORB-RESOLVE-INITIAL-REFERENCES" USING
ORB
TEMP-BUF
ENV
COS-NAMING.
CALL "CORBA-FREE" USING TEMP-BUF.
PERFORM ENV-CHECK.
*
* サーバアプリケーションを検索
*
MOVE FUNCTION LENG (STR-BUF) TO STRING-LENGTH.
MOVE "SAMPLE::CALCULATE_ADD" TO STR-BUF.
CALL "CORBA-STRING-SET" USING
IDL-ID OF NAME-COMPONENT
STRING-LENGTH
STR-BUF.
MOVE " " TO STR-BUF.
CALL "CORBA-STRING-SET" USING
KIND OF NAME-COMPONENT
STRING-LENGTH
STR-BUF.
MOVE 1 TO SEQ-LENGTH OF NAME.
MOVE 1 TO SEQ-MAXIMUM OF NAME.
MOVE 1 TO NUM.
CALL "CORBA-SEQUENCE-COSNAMING-NAMECOMPONENT-ALLOCBUF" USING
SEQ-MAXIMUM OF NAME
SEQ-BUFFER OF NAME.
MOVE FUNCTION ADDR ( NAME ) TO NAME-A.
MOVE FUNCTION ADDR ( NAME-COMPONENT ) TO NAME-COMPONENT-A.
CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
NAME-A
NUM
NAME-COMPONENT-A.
CALL "COSNAMING-NAMINGCONTEXT-RESOLVE" USING
COS-NAMING
NAME
ENV
OBJ.
MOVE "COSNAMING-NAMINGCONTEXT-RESOLVE" TO MESS.
PERFORM ENV-CHECK.
*
* サーバオブジェクトの呼出し
* サンプル名-インタフェース名-オペレータ名
*
* 加算
DISPLAY "第一引数を入力してください:" WITH NO ADVANCING.
ACCEPT PARAM1.
DISPLAY "第二引数を入力してください:" WITH NO ADVANCING.
ACCEPT PARAM2.
CALL "SAMPLE-CALCULATE-ADD-CALCULATE" USING
OBJ
PARAM1
PARAM2
ENV
RET.
PERFORM ENV-CHECK.
DISPLAY "加算結果:" RET.
*
* 後処理
*
CALL "CORBA-OBJECT-RELEASE" USING OBJ ENV.
CALL "CORBA-OBJECT-RELEASE" USING COS-NAMING ENV.
PERFORM ENV-CHECK.
CALL "CORBA-FREE" USING SEQ-BUFFER OF NAME.
*
* CORBA-ENVIRONMENTの情報を参照して例外が発生しているかどうか
* チェック
*
ENV-CHECK SECTION.
EVALUATE TRUE
WHEN CORBA-NO-EXCEPTION OF MAJOR OF ENV
CONTINUE
WHEN CORBA-USER-EXCEPTION OF MAJOR OF ENV
DISPLAY "USER-EXCEPTION : "
MOVE FUNCTION LENG (MESS) TO STRING-LENGTH
CALL "CORBA-STRING-GET" USING
IDL-ID OF ENV
STRING-LENGTH
MESS
DISPLAY "ID : " MESS
EXIT PROGRAM
WHEN CORBA-SYSTEM-EXCEPTION OF MAJOR OF ENV
DISPLAY "SYSTEM-EXCEPTION : "
MOVE FUNCTION LENG (MESS) TO STRING-LENGTH
CALL "CORBA-STRING-GET" USING
IDL-ID OF ENV
STRING-LENGTH
MESS
DISPLAY "ID : " MESS
EXIT PROGRAM
END-EVALUATE.
ENV-CHECK-END.
EXIT.
END PROGRAM MAIN.
目次
索引
![]()
|