CORBAのデータ型を扱うために、OOCOBOLでは以下の登録集を提供します。
リポジトリ宣言用 CORBA--REP.cbl
定数宣言用 CORBA--CONST.cbl
データ型 CORBA--COPY.cbl
以下にデータ型のOOCOBOLでの定義を示します。
CORBAデータ型 | OOCOBOLでの定義 | 備考 | |||
|---|---|---|---|---|---|
基本データ型 | 整数型 | long | CORBA-LONG | PIC S9(9) COMP-5. |
|
short | CORBA-SHORT | PIC S9(4) COMP-5. |
| ||
unsigned long | CORBA-UNSIGNED-LONG | PIC 9(9) COMP-5. |
| ||
unsigned short | CORBA-UNSIGNED-SHORT | PIC 9(4) COMP-5. |
| ||
long long | CORBA-LONG-LONG | PIC S9(18) COMP-5. |
| ||
浮動小数点型 | float | CORBA-FLOAT | COMP-1. |
| |
double | CORBA-DOUBLE | COMP-2. |
| ||
文字型 | char | CORBA-CHAR | PIC X(1). |
| |
wchar | CORBA-WCHAR | PIC N(1). |
| ||
オクテッド | octet | CORBA-OCTET | PIC X(1) |
| |
ブーリアン | boolean | CORBA-BOOLEAN | PIC 1(1) |
| |
文字列型 | string |
| PIC X(n). | “G.3.8.1 文字列型”参照 | |
ワイド文字列型 | wstring |
| PIC N(n). | “G.3.8.2 ワイド文字列型”参照 | |
列挙型 | enum | CORBA-ENUM | PIC 9(9) COMP-5. |
| |
シーケンス型 | sequence |
| クラス | “G.3.8.3 シーケンス型”参照 | |
構造体 | struct |
| 集団項目(固定長) | “G.3.8.4 構造体”参照 | |
共用体 | union |
| クラス | “G.3.8.5 共用体”参照 | |
固定小数点型 | fixed |
| PIC xx(n) PACKD-DECIMAL. | “G.3.8.6 固定小数点型”参照 | |
オブジェクトリファレンス | Object | CORBA-OBJECT | OBJECT REFERENCE |
| |
タイプコード | TypeCode | CORBA-TYPECODE | OBJECT REFERENCE |
| |
(1)IDLマッピング
IDL言語で文字列型stringを指定した場合、以下のデータ型で宣言します。
サイズ指定あり: PIC X(n) サイズ指定なし: CORBA-STRINGクラス
以降では、以下のIDL定義例をもとに説明します。
module ODsample{
interface stringtest{
string op1(in string str1, out string str2, inout string str3);
};
}; IDENTIFICATION DIVISION.
PROGRAM-ID. "ODSAMPLE-STRINGTEST-OP1".
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
COPY COSNAMING--COPY.
COPY SIMPLE--COPY.
.
01 OBJ USAGE OBJECT REFERENCE CORBA-OBJECT.
*inパラメタ
01 STR1 PIC X(50).
*outパラメタ
01 STR2 USAGE OBJECT REFERENCE CORBA-STRING.
*inoutパラメタ
01 STR3 USAGE OBJECT REFERENCE CORBA-STRING.
*復帰値
01 STR-RET USAGE OBJECT REFERENCE CORBA-STRING.
*
PROCEDURE DIVISION.
INVOKE OBJ "ODSAMPLE-STRINGTEST-OP1"
USING STR1
STR2
STR3
RETURNING STR-RET.(2)クライアントアプリケーション例
クライアントアプリケーションでは、文字列型のパラメタとして以下のデータ項目を使用します。
inパラメタ : PIC X(n) (サイズ指定あり) outパラメタ : CORBA-STRING(クラス) inoutパラメタ : CORBA-STRING(クラス) 復帰値 : CORBA-STRING(クラス)
以下にクライアントアプリケーション例を以下に示します。
IDENTIFICATION DIVISION.
PROGRAM-ID. "SIMPLE_C".
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
COPY CORBA--REP.
COPY SIMPLE--REP.
.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY CORBA--CONST.
COPY SIMPLE--CONST.
.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
COPY COSNAMING--COPY.
COPY SIMPLE--COPY.
*inパラメタ
01 STR1 PIC X(50).
*outパラメタ
01 STR2 USAGE OBJECT REFERENCE CORBA-STRING.
*inoutパラメタ
01 STR3 USAGE OBJECT REFERENCE CORBA-STRING.
*復帰値
01 STR-RET USAGE OBJECT REFERENCE CORBA-STRING.
*
01 OBJ USAGE OBJECT REFERENCE CORBA-OBJECT.
01 TARGET-OBJ USAGE OBJECT REFERENCE ODDEMO-STRINGTEST.
01 STR-WORK PIC X(50).
*
PROCEDURE DIVISION.
*inパラメタの設定
MOVE "IN" TO STR1.
* inoutパラメタの設定
INVOKE CORBA-STRING "NEW" RETURNING STR3.
INVOKE STR3 "SET-VALUE" USING "INOUT".
*
INVOKE ODSAMPLE-STRINGTEST "NARROW"
USING OBJ
RETURNING TARGET-OBJ.
*
INVOKE TARGET-OBJ "OP1"
USING STR1
STR2
STR3
RETURNING STR-RET.
*復帰値の参照
INVOKE STR-RET "GET-VALUE" RETURNING STR-WORK.
DISPLAY "RETURN : " STR-WORK.
*outパラメタの参照
INVOKE STR2 "GET-VALUE" RETURNING STR-WORK.
DISPLAY "OUT : " STR-WORK.
*inoutパラメタの参照
INVOKE STR3 "GET-VALUE" RETURNING STR-WORK.
DISPLAY "INOUT : " STR-WORK.
END PROGRAM "SIMPLE_C".(3)サーバアプリケーション例
サーバアプリケーションでは、文字列型のパラメタとして以下のデータ項目を使用します。
inパラメタ : PIC X ANY LENGTH outパラメタ : CORBA-STRING(クラス) inoutパラメタ : CORBA-STRING(クラス) 復帰値 : CORBA-STRING(クラス)
以下にサーバアプリケーション例を以下に示します。
CLASS-ID. ODSAMPLE-STRINGTEST-IMPL.
INHERITS ODSAMPLE-STRINGTEST
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
COPY CORBA--REP.
COPY SIMPLE--REP.
.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY CORBA--CONST.
COPY SIMPLE--CONST.
.
*
OBJECT.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
COPY SIMPLE--COPY.
*
PROCEDURE DIVISION.
METHOD-ID OP1 OVERRIDE.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01 OP-NAME PIC X(50).
01 STR-WORK1 PIC X(50).
01 STR-WORK2 PIC X(50).
*
LINKAGE SECTION.
01 STR1 PIC X ANY LENGTH.
01 STR2 USAGE OBJECT REFERENCE CORBA-STRING.
01 STR3 USAGE OBJECT REFERENCE CORBA-STRING.
01 RESULT USAGE OBJECT REFERENCE CORBA-STRING.
*
PROCEDURE DIVISION.
USING STR1
STR2
STR3
RETURNING RESULT.
*outパラメタの設定
INVOKE CORBA-STRING "NEW" RETURNING STR2.
INVOKE STR2 "SET-VALUE" USING "OP1:OUT".
*inoutパラメタの参照/設定
MOVE "OP1:" TO OP-NAME.
INVOKE STR3 "GET-VALUE" RETURNING STR-WORK1.
STRING OP-NAME DELIMITED BY SIZE
STR-WORK1 DELIMITED BY SIZE
INTO STR-WORK2.
INVOKE STR3 "SET-VALUE" USING STR-WORK2.
*復帰値の設定
INVOKE CORBA-STRING "NEW" RETURNING RESULT.
INVOKE RESULT "SET-VALUE" USING "OP1:RESULT OK".
*
END METHOD OP1.
END OBJECT.
END CLASS ODSAMPLE-STRINGTEST-IMPL.(1)IDLマッピング
IDL言語でワイド文字列型wstringを指定した場合、以下のデータ型で宣言します。
サイズ指定あり: PIC N(n) サイズ指定なし: CORBA-WSTRINGクラス
以降では、以下のIDL定義例をもとに説明します。
module ODsample{
interface wstringtest{
wstring op1(in wstring str1, out wstring str2, inout wstring str3);
};
}; IDENTIFICATION DIVISION.
PROGRAM-ID. "ODSAMPLE-WSTRINGTEST-OP1".
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
COPY COSNAMING--COPY.
COPY SIMPLE--COPY.
.
01 OBJ USAGE OBJECT REFERENCE CORBA-OBJECT.
*inパラメタ
01 STR1 PIC N(50).
*outパラメタ
01 STR2 USAGE OBJECT REFERENCE CORBA-WSTRING.
*inoutパラメタ
01 STR3 USAGE OBJECT REFERENCE CORBA-WSTRING.
*復帰値
01 STR-RET USAGE OBJECT REFERENCE CORBA-WSTRING.
*
PROCEDURE DIVISION.
INVOKE OBJ "ODSAMPLE-WSTRINGTEST-OP1"
USING STR1
STR2
STR3
RETURNING STR-RET.(2)クライアントアプリケーション例
クライアントアプリケーションでは、ワイド文字列型のパラメタとして以下のデータ項目を使用します。
inパラメタ : PIC N(n) (サイズ指定あり) outパラメタ : CORBA-WSTRING(クラス) inoutパラメタ : CORBA-WSTRING(クラス) 復帰値 : CORBA-WSTRING(クラス)
以下にクライアントアプリケーション例を以下に示します。
IDENTIFICATION DIVISION.
PROGRAM-ID. "SIMPLE_C".
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
COPY CORBA--REP.
COPY SIMPLE--REP.
.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY CORBA--CONST.
COPY SIMPLE--CONST.
.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
COPY SIMPLE--COPY.
*inパラメタ
01 STR1 PIC N(50).
*outパラメタ
01 STR2 USAGE OBJECT REFERENCE CORBA-WSTRING.
*inoutパラメタ
01 STR3 USAGE OBJECT REFERENCE CORBA-WSTRING.
*復帰値
01 STR-RET USAGE OBJECT REFERENCE CORBA-WSTRING.
*
01 OBJ USAGE OBJECT REFERENCE CORBA-OBJECT.
01 TARGET-OBJ USAGE OBJECT REFERENCE ODDEMO-WSTRINGTEST.
01 STR-WORK PIC N(50).
*
PROCEDURE DIVISION.
*inパラメタの設定
MOVE N"イン" TO STR1.
* inoutパラメタの設定
INVOKE CORBA-WSTRING "NEW" RETURNING STR3.
INVOKE STR3 "SET-VALUE" USING N"インアウト".
*
INVOKE ODSAMPLE-WSTRINGTEST "NARROW"
USING OBJ
RETURNING TARGET-OBJ.
*
INVOKE TARGET-OBJ "OP1"
USING STR1
STR2
STR3
RETURNING STR-RET.
*復帰値の参照
INVOKE STR-RET "GET-VALUE" RETURNING STR-WORK.
DISPLAY "RETURN : " STR-WORK.
*outパラメタの参照
INVOKE STR2 "GET-VALUE" RETURNING STR-WORK.
DISPLAY "OUT : " STR-WORK.
*inoutパラメタの参照
INVOKE STR3 "GET-VALUE" RETURNING STR-WORK.
DISPLAY "INOUT : " STR-WORK.
END PROGRAM "SIMPLE_C".(3)サーバアプリケーション例
サーバアントアプリケーションでは、ワイド文字列型のパラメタとして以下のデータ項目を使用します。
inパラメタ : PIC N ANY LENGTH outパラメタ : CORBA-WSTRING(クラス) inoutパラメタ : CORBA-WSTRING(クラス) 復帰値 : CORBA-WSTRING(クラス)
以下にサーバアプリケーション例を以下に示します。
CLASS-ID. ODSAMPLE-WSTRINGTEST-IMPL.
INHERITS ODSAMPLE-WSTRINGTEST
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
COPY CORBA--REP.
COPY SIMPLE--REP.
.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY CORBA--CONST.
COPY SIMBOL--CONST.
.
*
OBJECT.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
*
PROCEDURE DIVISION.
METHOD-ID OP1 OVERRIDE.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01 OP-NAME PIC N(50).
01 STR-WORK1 PIC N(50).
01 STR-WORK2 PIC N(50).
*
LINKAGE SECTION.
01 STR1 PIC N ANY LENGTH.
01 STR2 USAGE OBJECT REFERENCE CORBA-WSTRING.
01 STR3 USAGE OBJECT REFERENCE CORBA-WSTRING.
01 RESULT USAGE OBJECT REFERENCE CORBA-WSTRING.
*
PROCEDURE DIVISION.
USING STR1
STR2
STR3
RETURNING RESULT.
*outパラメタの設定
INVOKE CORBA-WSTRING "NEW" RETURNING STR2.
INVOKE STR2 "SET-VALUE" USING "OP1:OUT".
*inoutパラメタの参照/設定
MOVE N"メソッドOP1:" TO OP-NAME.
INVOKE STR3 "GET-VALUE" RETURNING STR-WORK1.
STRING OP-NAME DELIMITED BY SIZE
STR-WORK1 DELIMITED BY SIZE
INTO STR-WORK2.
INVOKE STR3 "SET-VALUE" USING STR-WORK2.
*復帰値の設定
INVOKE CORBA-WSTRING "NEW" RETURNING RESULT.
INVOKE RESULT "SET-VALUE" USING N"メソッドOP1:RESULT".
*
END METHOD OP1.
END OBJECT.
END CLASS ODSAMPLE-WSTRINGTEST-IMPL.(1) IDLマッピング
IDL言語でシーケンス型sequenceを指定した場合、クラス(シーケンスクラス)でデータ宣言します。
以降では、以下のIDL定義例をもとに説明します。
[ファイル名: simple.idl]
module ODsample{
interface seqtest{
typedef sequence<long> sampleseq;
sampleseq op1(in sampleseq seq1, out sampleseq seq2, inout sampleseq seq3 );
typedef sequence<string> sampleseq2;
sampleseq2 op2(in sampleseq2 seq1, out sampleseq2 seq2, inout sampleseq2 seq3 );
};
};[ファイル名: simple--copy.cbl]
* データ型宣言(typedef) 01 ODSAMPLE-SEQTEST-SAMPLESEQ TYPEDEF OBJECT REFERENCE SEQUENCE-LONG.
[ファイル名: sequence-long.cob]
* シーケンスクラス(sequence<long>)
CLASS-ID. sequence-long AS "sequence-long" INHERITS SEQUENCEBASE.
*
FACTORY.
PROCEDURE DIVISION.
*
* NEW-WITH-LENGTH METHOD
METHOD-ID. NEW-WITH-LENGTH AS "NEW-WITH-LENGTH".
DATA DIVISION.
LINKAGE SECTION.
COPY CORBA--COPY.
01 0--SEQ-LENGTH TYPE CORBA-UNSIGNED-LONG.
01 0--SEQ-OBJ OBJECT REFERENCE SELF.
PROCEDURE DIVISION
USING 0--SEQ-LENGTH RETURNING 0--SEQ-OBJ
RAISING CORBA-SYSTEMEXCEPTION.
END METHOD NEW-WITH-LENGTH.
END FACTORY.
*
OBJECT.
PROCEDURE DIVISION.
*
* SEQ-MAXIMUM PROPERTY : GET
METHOD-ID. GET PROPERTY SEQ-MAXIMUM.
DATA DIVISION.
LINKAGE SECTION.
01 0--SEQ-MAXIMUM TYPE CORBA-UNSIGNED-LONG.
PROCEDURE DIVISION RETURNING 0--SEQ-MAXIMUM.
MOVE 0--MAXIMUM TO 0--SEQ-MAXIMUM.
END METHOD.
*
* SEQ-LENGTH PROPERTY : GET
METHOD-ID. GET PROPERTY SEQ-LENGTH.
DATA DIVISION.
LINKAGE SECTION.
01 0--LENGTH-RESULT TYPE CORBA-UNSIGNED-LONG.
PROCEDURE DIVISION RETURNING 0--LENGTH-RESULT.
MOVE 0--LENGTH TO 0--LENGTH-RESULT.
END METHOD.
*
* SEQ-LENGTH PROPERTY : SET
METHOD-ID. SET PROPERTY SEQ-LENGTH.
DATA DIVISION.
LINKAGE SECTION.
01 0--LENGTH-PARAM TYPE CORBA-UNSIGNED-LONG.
PROCEDURE DIVISION USING 0--LENGTH-PARAM
RAISING CORBA-SYSTEMEXCEPTION.
END METHOD.
*
* GET-VALUE METHOD
METHOD-ID. GET-VALUE AS "GET-VALUE".
DATA DIVISION.
LINKAGE SECTION.
01 0--ELEMS TYPE CORBA-UNSIGNED-LONG.
01 0--VALUE TYPE CORBA-LONG.
PROCEDURE DIVISION USING 0--ELEMS RETURNING 0--VALUE.
END METHOD GET-VALUE.
*
* SET-VALUE METHOD
METHOD-ID. SET-VALUE AS "SET-VALUE".
DATA DIVISION.
LINKAGE SECTION.
01 0--ELEMS TYPE CORBA-UNSIGNED-LONG.
01 0--VALUE TYPE CORBA-LONG.
PROCEDURE DIVISION USING 0--ELEMS 0--VALUE.
END METHOD SET-VALUE.
*
* CLONE METHOD
METHOD-ID. CLONE AS "CLONE".
DATA DIVISION.
LINKAGE SECTION.
01 0--CLONE-OBJ OBJECT REFERENCE sequence-long.
PROCEDURE DIVISION RETURNING 0--CLONE-OBJ
RAISING CORBA-SYSTEMEXCEPTION.
END METHOD CLONE.
*
END OBJECT.
END CLASS sequence-long.
* シーケンスクラス(sequence<string>)
CLASS-ID. sequence-string AS "sequence-string" INHERITS SEQUENCEBASE.
*
FACTORY.
PROCEDURE DIVISION.
*
* NEW-WITH-LENGTH METHOD
METHOD-ID. NEW-WITH-LENGTH AS "NEW-WITH-LENGTH".
DATA DIVISION.
LINKAGE SECTION.
COPY CORBA--COPY.
01 0--SEQ-LENGTH TYPE CORBA-UNSIGNED-LONG.
01 0--SEQ-OBJ OBJECT REFERENCE SELF.
PROCEDURE DIVISION
USING 0--SEQ-LENGTH RETURNING 0--SEQ-OBJ
RAISING CORBA-SYSTEMEXCEPTION.
END METHOD NEW-WITH-LENGTH.
END FACTORY.
*
OBJECT.
PROCEDURE DIVISION.
*
* SEQ-MAXIMUM PROPERTY : GET
METHOD-ID. GET PROPERTY SEQ-MAXIMUM.
DATA DIVISION.
LINKAGE SECTION.
01 0--SEQ-MAXIMUM TYPE CORBA-UNSIGNED-LONG.
PROCEDURE DIVISION RETURNING 0--SEQ-MAXIMUM.
MOVE 0--MAXIMUM TO 0--SEQ-MAXIMUM.
END METHOD.
*
* SEQ-LENGTH PROPERTY : GET
METHOD-ID. GET PROPERTY SEQ-LENGTH.
DATA DIVISION.
LINKAGE SECTION.
01 0--LENGTH-RESULT TYPE CORBA-UNSIGNED-LONG.
PROCEDURE DIVISION RETURNING 0--LENGTH-RESULT.
MOVE 0--LENGTH TO 0--LENGTH-RESULT.
END METHOD.
*
* SEQ-LENGTH PROPERTY : SET
METHOD-ID. SET PROPERTY SEQ-LENGTH.
DATA DIVISION.
LINKAGE SECTION.
01 0--LENGTH-PARAM TYPE CORBA-UNSIGNED-LONG.
PROCEDURE DIVISION USING 0--LENGTH-PARAM
RAISING CORBA-SYSTEMEXCEPTION.
END METHOD.
*
* GET-VALUE METHOD
METHOD-ID. GET-VALUE AS "GET-VALUE".
DATA DIVISION.
LINKAGE SECTION.
01 0--ELEMS TYPE CORBA-UNSIGNED-LONG.
01 0--VALUE USAGE OBJECT REFERENCE CORBA-STRING.
PROCEDURE DIVISION USING 0--ELEMS RETURNING 0--VALUE.
END METHOD GET-VALUE.
*
* SET-VALUE METHOD
METHOD-ID. SET-VALUE AS "SET-VALUE".
DATA DIVISION.
LINKAGE SECTION.
01 0--ELEMS TYPE CORBA-UNSIGNED-LONG.
01 0--VALUE USAGE OBJECT REFERENCE CORBA-STRING.
PROCEDURE DIVISION USING 0--ELEMS 0--VALUE.
END METHOD SET-VALUE.
*
* CLONE METHOD
METHOD-ID. CLONE AS "CLONE".
DATA DIVISION.
LINKAGE SECTION.
01 0--CLONE-OBJ OBJECT REFERENCE sequence-string.
PROCEDURE DIVISION RETURNING 0--CLONE-OBJ
RAISING CORBA-SYSTEMEXCEPTION.
END METHOD CLONE.
*
END OBJECT.
END CLASS sequence-string. (2)シーケンスクラスのメソッド/プロパティ
シーケンスクラスで定義されているメソッド/プロパティを以下に示します。
メソッド/プロパティ | 機能 |
|---|---|
NEW-WITH-LENGTHメソッド | (ファクトリメソッド)指定の長さでシーケンスクラスを作成します。 |
GET-VALUEメソッド | (オブジェクトメソッド)指定番号の要素の値を取得します。 |
SET-VALUEメソッド | (オブジェクトメソッド)指定番号の要素に値を設定します。 |
CLONEメソッド | (オブジェクトメソッド)シーケンスクラスを複製します。 |
SEQ-MAXIMUMプロパティ | シーケンス最大長の値を取得します。 |
SEQ-LENGTHプロパティ | シーケンス長の値の取得/設定を行います。 |
メソッド/プロパティの使用例を以下に示します。
* NEW-WITH-LENGTHメソッド
* シーケンスクラスをSEQとして作成
01 SEQ USAGE OBJECT REFERENCE SEQUENCE-LONG.
01 SEQ-LEN USAGE OBJECT REFERENCE CORBA-UNSIGNED-LONG.
INVOKE SEQUENCE-LONG "NEW-WITH-LENGTH"
USING SEQ-LEN RETURNING SEQ.* GET-VALUEメソッド * 1番目の要素の値をSEQ-GVALに取得 01 SEQ USAGE OBJECT REFERENCE SEQUENCE-LONG. 01 SEQ-GVAL TYPE CORBA-LONG. INVOKE SEQ "GET-VALUE" USING 1 RETURNING SEQ-GVAL.
* SET-VALUEメソッド * 1番目の要素にSEQ-SVALを設定 01 SEQ USAGE OBJECT REFERENCE SEQUENCE-LONG. 01 SEQ-SVAL TYPE CORBA-LONG. INVOKE SEQ "SET-VALUE" USING 1 SEQ-SVAL.
* CLONEメソッド * シーケンスクラスをSEQ-CLONEとして複製 01 SEQ USAGE OBJECT REFERENCE SEQUENCE-LONG. 01 SEQ-CLON USAGE OBJECT REFERENCE SEQUENCE-LONG. INVOKE SEQ "CLONE" RETURNING SEQ-CLON.
* SEQ-MAXIMUMプロパティ * シーケンス最大長の値をSEQ-MAXに取得 01 SEQ USAGE OBJECT REFERENCE SEQUENCE-LONG. 01 SEQ-MAX TYPE CORBA-UNSIGNED-LONG. MOVE SEQ-MAXIMUM OF SEQ TO SEQ-MAX.
* SEQ-LENGTHプロパティ * シーケンス長の値をSEQ-LENに取得 01 SEQ USAGE OBJECT REFERENCE SEQUENCE-LONG. 01 SEQ-LEN TYPE CORBA-UNSIGNED-LONG. MOVE SEQ-LENGTH OF SEQ TO SEQ-LEN. * シーケンス長にSEQ-LENを設定 01 SEQ USAGE OBJECT REFERENCE SEQUENCE-LONG. 01 SEQ-LEN TYPE CORBA-UNSIGNED-LONG. MOVE SEQ-LEN TO SEQ-LENGTH OF SEQ.
(3)クライアントアプリケーション例
クライアントアプリケーション例を以下に示します。
IDENTIFICATION DIVISION.
PROGRAM-ID. "CLIENT-MAIN".
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
COPY CORBA--REP.
COPY COSNAMING--REP.
COPY SIMPLE--REP.
.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY CORBA--CONST.
COPY COSNAMING--CONST.
COPY SIMPLE--CONST.
.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
COPY COSNAMING--COPY.
COPY SIMPLE--COPY.
*
01 ORB USAGE OBJECT REFERENCE CORBA-ORB.
01 OBJ USAGE OBJECT REFERENCE CORBA-OBJECT.
01 NAMING-CONTEXT USAGE OBJECT REFERENCE COSNAMING-NAMINGCONTEXT.
01 NAME TYPE COSNAMING-NAME.
01 NAME-COMPONENT USAGE OBJECT REFERENCE COSNAMING-NAMECOMPONENT.
01 NAME-ID USAGE OBJECT REFERENCE CORBA-STRING.
01 NAME-KIND USAGE OBJECT REFERENCE CORBA-STRING.
*
01 EXCEPTION-ID USAGE OBJECT REFERENCE CORBA-STRING.
01 EXCEPTION-ID-VALUE PIC X(50).
01 API-NAME PIC X(50).
*
01 TARGET-OBJ USAGE OBJECT REFERENCE ODSAMPLE-SEQTEST.
01 RESULT TYPE ODSAMPLE-SEQTEST-SAMPLESEQ.
01 SEQ1 TYPE ODSAMPLE-SEQTEST-SAMPLESEQ.
01 SEQ2 TYPE ODSAMPLE-SEQTEST-SAMPLESEQ.
01 SEQ3 TYPE ODSAMPLE-SEQTEST-SAMPLESEQ.
01 SEQ-VALUE TYPE CORBA-LONG.
01 OP2-RESULT TYPE ODSAMPLE-SEQTEST-SAMPLESEQ2.
01 OP2-SEQ1 TYPE ODSAMPLE-SEQTEST-SAMPLESEQ2.
01 OP2-SEQ2 TYPE ODSAMPLE-SEQTEST-SAMPLESEQ2.
01 OP2-SEQ3 TYPE ODSAMPLE-SEQTEST-SAMPLESEQ2.
01 OP2-SEQ-VALUE USAGE OBJECT REFERENCE CORBA-STRING.
01 I TYPE CORBA-UNSIGNED-LONG.
*
PROCEDURE DIVISION.
*
DECLARATIVES.
*
OTHER-ERROR SECTION.
USE EXCEPTION CORBA-EXCEPTION.
DISPLAY "CORBA::Exception: " API-NAME.
SET EXCEPTION-ID TO IDL-ID OF EXCEPTION-OBJECT AS CORBA-EXCEPTION.
INVOKE EXCEPTION-ID "GET-VALUE" RETURNING EXCEPTION-ID-VALUE.
DISPLAY " Exception-id: " EXCEPTION-ID-VALUE.
EXIT PROGRAM.
END-OTHER-ERR.
*
END DECLARATIVES.
*
MAIN SECTION.
*
MOVE "CORBA::ORB_init" TO API-NAME.
INVOKE CORBA "ORB_INIT"
USING "simple_c"
FJ-OM_ORBID
RETURNING ORB.
*
MOVE "CORBA::ORB::resolve_initial_references" TO API-NAME.
INVOKE ORB "RESOLVE_INITIAL_REFERENCES"
USING CORBA-ORB-OBJECTID_NAMESERVICE
RETURNING OBJ.
*
INVOKE COSNAMING-NAMINGCONTEXT "NARROW"
USING OBJ
RETURNING NAMING-CONTEXT.
*
INVOKE CORBA-STRING "NEW-WITH-VALUE"
USING "ODsample::seqtest"
RETURNING NAME-ID.
*
INVOKE CORBA-STRING "NEW-WITH-VALUE"
USING " "
RETURNING NAME-KIND.
*
INVOKE COSNAMING-NAMECOMPONENT "NEW"
RETURNING NAME-COMPONENT.
*
SET IDL-ID OF NAME-COMPONENT TO NAME-ID.
SET KIND OF NAME-COMPONENT TO NAME-KIND.
*
INVOKE SEQUENCE-NAMECOMPONENT-001 "NEW-WITH-LENGTH"
USING 1
RETURNING NAME.
*
INVOKE NAME "SET-VALUE"
USING 1
NAME-COMPONENT.
*
MOVE "CosNaming::NamingContext::resolve" TO API-NAME.
INVOKE NAMING-CONTEXT "RESOLVE"
USING NAME
RETURNING OBJ.
*
INVOKE ODSAMPLE-SEQTEST "NARROW"
USING OBJ
RETURNING TARGET-OBJ.
*
* sequence<long>
*
* SET IN PARAMETER
INVOKE SEQUENCE-LONG "NEW" RETURNING SEQ1.
MOVE 2 TO SEQ-LENGTH OF SEQ1.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 2
MOVE I TO SEQ-VALUE
INVOKE SEQ1 "SET-VALUE" USING I SEQ-VALUE
END-PERFORM.
*
* SET INOUT PARAMETER
INVOKE SEQUENCE-LONG "NEW" RETURNING SEQ3.
MOVE 3 TO SEQ-LENGTH OF SEQ3.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3
COMPUTE SEQ-VALUE = I * 10
INVOKE SEQ3 "SET-VALUE" USING I SEQ-VALUE
END-PERFORM.
*
MOVE "ODdemo::seqtest::op1" TO API-NAME.
INVOKE TARGET-OBJ "OP1"
USING SEQ1
SEQ2
SEQ3
RETURNING RESULT.
*
* sequence<string>
*
* SET IN PARAMETER
INVOKE SEQUENCE-CORBA-STRING "NEW" RETURNING OP2-SEQ1.
MOVE 2 TO SEQ-LENGTH OF OP2-SEQ1.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 2
INVOKE CORBA-STRING "NEW-WITH-VALUE" USING "TEST"
RETURNING OP2-SEQ-VALUE
INVOKE OP2-SEQ1 "SET-VALUE" USING I OP2-SEQ-VALUE
END-PERFORM.
*
* SET INOUT PARAMETER
INVOKE SEQUENCE-CORBA-STRING "NEW" RETURNING OP2-SEQ3.
MOVE 3 TO SEQ-LENGTH OF OP2-SEQ3.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3
INVOKE CORBA-STRING "NEW-WITH-VALUE" USING "TEST"
RETURNING OP2-SEQ-VALUE
INVOKE OP2-SEQ3 "SET-VALUE" USING I OP2-SEQ-VALUE
END-PERFORM.
*
MOVE "ODdemo::seqtest::op2" TO API-NAME.
INVOKE TARGET-OBJ "OP2"
USING OP2-SEQ1
OP2-SEQ2
OP2-SEQ3
RETURNING OP2-RESULT.
*
STOP RUN.
*
END-MAIN.
*
END PROGRAM "CLIENT-MAIN".(4)サーバアプリケーション例
以下にサーバアプリケーション例を以下に示します。
CLASS-ID. ODSAMPLE-SEQTEST-IMPL
INHERITS ODSAMPLE-SEQTEST.
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
COPY CORBA--REP.
COPY SIMPLE--REP.
.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY CORBA--CONST.
COPY SIMPLE--CONST.
.
*
OBJECT.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
COPY SIMPLE--COPY.
*
PROCEDURE DIVISION.
*
METHOD-ID. OP1 OVERRIDE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SEQ-VALUE TYPE CORBA-LONG.
01 I TYPE CORBA-UNSIGNED-LONG.
LINKAGE SECTION.
01 SEQ1 TYPE ODSAMPLE-SEQTEST-SAMPLESEQ.
01 SEQ2 TYPE ODSAMPLE-SEQTEST-SAMPLESEQ.
01 SEQ3 TYPE ODSAMPLE-SEQTEST-SAMPLESEQ.
01 RESULT TYPE ODSAMPLE-SEQTEST-SAMPLESEQ.
*
PROCEDURE DIVISION
USING SEQ1
SEQ2
SEQ3
RETURNING RESULT
RAISING CORBA-SYSTEMEXCEPTION.
*
* SET OUT PARAMETER
INVOKE SEQUENCE-LONG "NEW" RETURNING SEQ2.
MOVE 4 TO SEQ-LENGTH OF SEQ1.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 4
COMPUTE SEQ-VALUE = I * 100
INVOKE SEQ2 "SET-VALUE" USING I SEQ-VALUE
END-PERFORM.
*
* SET INOUT PARAMETER
INVOKE SEQUENCE-LONG "NEW" RETURNING SEQ3.
MOVE 5 TO SEQ-LENGTH OF SEQ3.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 5
COMPUTE SEQ-VALUE = I * 1000
INVOKE SEQ3 "SET-VALUE" USING I SEQ-VALUE
END-PERFORM.
*
* SET RESULT
INVOKE SEQUENCE-LONG "NEW" RETURNING RESULT.
MOVE 6 TO SEQ-LENGTH OF SEQ3.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 6
COMPUTE SEQ-VALUE = I * 10000
INVOKE RESULT "SET-VALUE" USING I SEQ-VALUE
END-PERFORM.
*
END METHOD OP1.
*
*
*
METHOD-ID. OP2 OVERRIDE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SEQ-VALUE USAGE OBJECT REFERENCE CORBA-STRING.
01 I TYPE CORBA-UNSIGNED-LONG.
LINKAGE SECTION.
01 SEQ1 TYPE ODSAMPLE-SEQTEST-SAMPLESEQ2.
01 SEQ2 TYPE ODSAMPLE-SEQTEST-SAMPLESEQ2.
01 SEQ3 TYPE ODSAMPLE-SEQTEST-SAMPLESEQ2.
01 RESULT TYPE ODSAMPLE-SEQTEST-SAMPLESEQ2.
*
PROCEDURE DIVISION
USING SEQ1
SEQ2
SEQ3
RETURNING RESULT
RAISING CORBA-SYSTEMEXCEPTION.
*
* SET OUT PARAMETER
INVOKE SEQUENCE-CORBA-STRING "NEW" RETURNING SEQ2.
MOVE 4 TO SEQ-LENGTH OF SEQ2.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 4
INVOKE CORBA-STRING "NEW-WITH-VALUE" USING "TEST"
RETURNING SEQ-VALUE
INVOKE SEQ2 "SET-VALUE" USING I SEQ-VALUE
END-PERFORM.
*
* SET INOUT PARAMETER
INVOKE SEQUENCE-CORBA-STRING "NEW" RETURNING SEQ3.
MOVE 5 TO SEQ-LENGTH OF SEQ3.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 5
INVOKE CORBA-STRING "NEW-WITH-VALUE" USING "TEST"
RETURNING SEQ-VALUE
INVOKE SEQ3 "SET-VALUE" USING I SEQ-VALUE
END-PERFORM.
*
* SET RESULT
INVOKE SEQUENCE-CORBA-STRING "NEW" RETURNING RESULT.
MOVE 6 TO SEQ-LENGTH OF RESULT.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 6
INVOKE CORBA-STRING "NEW-WITH-VALUE" USING "TEST"
RETURNING SEQ-VALUE
INVOKE RESULT "SET-VALUE" USING I SEQ-VALUE
END-PERFORM.
*
END METHOD OP2.
*
END OBJECT.
*
END CLASS ODSAMPLE-SEQTEST-IMPL.(1)IDLマッピング
IDL言語で構造体structを指定した場合、以下のデータ型で宣言します。
構造体(固定長): 集団項目 構造体(可変長): クラス(構造体クラス)
以降では、以下のIDL定義例をもとに説明します。
[ファイル名: simple.idl]
module ODsample{
struct samplefix { // 構造体(固定長)
long para1;
long para2;
};
struct samplevar { // 構造体(可変長)
long para1;
string para2;
};
interface structtest{
samplefix op2(
in samplefix str1,
out samplefix str2,
inout samplefix str3
);
samplevar op1(
in samplevar str1,
out samplevar str2,
inout samplevar str3
);
};
};[ファイル名: simple--copy.cbl]
* 集団項目(構造体(固定長))
01 ODSAMPLE-SAMPLEFIX TYPEDEF.
02 PARA1 TYPE CORBA-LONG.
02 PARA2 TYPE CORBA-LONG.[ファイル名: ODSAMPLE-SAMPLEVAR.COB]
* 構造体クラス(構造体(可変長))
CLASS-ID. ODSAMPLE-SAMPLEVAR AS "ODSAMPLE-SAMPLEVAR"
INHERITS STRUCTBASE.
*
OBJECT.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
*
* PROPERTY
01 PARA1 TYPE CORBA-LONG PROPERTY.
01 PARA2 OBJECT REFERENCE CORBA-STRING PROPERTY.
*
PROCEDURE DIVISION.
*
* CLONE METHOD
METHOD-ID. CLONE AS "CLONE".
DATA DIVISION.
LINKAGE SECTION.
01 0--CLONE-OBJ OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
PROCEDURE DIVISION RETURNING 0--CLONE-OBJ.
END METHOD CLONE.
END OBJECT.
END CLASS ODSAMPLE-SAMPLEVAR.(2)構造体クラスのメソッド/プロパティ
構造体クラスで定義されているメソッド/プロパティを以下に示します。
メソッド/プロパティ | 機能 |
|---|---|
CLONEメソッド | (オブジェクトメソッド)構造体クラスを複製します。 |
メンバプロパティ | メンバの値の取得/設定を行います。 |
メソッド/プロパティの使用例を以下に示します。
* CLONEメソッド * 構造体クラスをSTV-CLONとして複製 01 STV USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR. 01 STV-CLON USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR. INVOKE STV "CLONE" RETURNING STV-CLON.
* メンバプロパティ(クラス以外のデータ型) * メンバPARA1の値をSTV-MEMTに取得 01 STV USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR. 01 STV-MEMT TYPE CORBA-LONG. MOVE PARA1 OF STV TO STV-MEMT. * メンバPARA1にSTV-MEMTを設定 01 STV USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR. 01 STV-MEMT TYPE CORBA-LONG. MOVE STV-MEMT TO PARA1 OF STV.
* メンバプロパティ(クラス) * メンバPARA2の値をSTV-MEMCに取得 01 STV USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR. 01 STV-MEMC USAGE OBJECT REFERENCE CORBA-STRING. SET STV-MEMC TO PARA2 OF STV. * メンバPARA2にSTV-MEMCを設定 01 STV USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR. 01 STV-MEMC USAGE OBJECT REFERENCE CORBA-STRING. SET PARA2 OF STV TO STV-MEMC.
(3)クライアントアプリケーション例
クライアントアプリケーション例を以下に示します。
IDENTIFICATION DIVISION.
PROGRAM-ID. "CLIENT-MAIN".
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
COPY CORBA--REP.
COPY COSNAMING--REP.
COPY SIMPLE--REP.
.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY CORBA--CONST.
COPY COSNAMING--CONST.
COPY SIMPLE--CONST.
.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
COPY COSNAMING--COPY.
COPY SIMPLE--COPY.
*
01 ORB USAGE OBJECT REFERENCE CORBA-ORB.
01 OBJ USAGE OBJECT REFERENCE CORBA-OBJECT.
01 NAMING-CONTEXT USAGE OBJECT REFERENCE COSNAMING-NAMINGCONTEXT.
01 NAME TYPE COSNAMING-NAME.
01 NAME-COMPONENT USAGE OBJECT REFERENCE COSNAMING-NAMECOMPONENT.
01 NAME-ID USAGE OBJECT REFERENCE CORBA-STRING.
01 NAME-KIND USAGE OBJECT REFERENCE CORBA-STRING.
*
01 EXCEPTION-ID USAGE OBJECT REFERENCE CORBA-STRING.
01 EXCEPTION-ID-VALUE PIC X(50).
01 API-NAME PIC X(50).
*
01 TARGET-OBJ USAGE OBJECT REFERENCE ODSAMPLE-STRUCTTEST.
01 FIX0 TYPE ODSAMPLE-SAMPLEFIX.
01 FIX1 TYPE ODSAMPLE-SAMPLEFIX.
01 FIX2 TYPE ODSAMPLE-SAMPLEFIX.
01 FIX3 TYPE ODSAMPLE-SAMPLEFIX.
01 VAR0 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
01 VAR1 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
01 VAR2 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
01 VAR3 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
01 STR-WORK USAGE OBJECT REFERENCE CORBA-STRING.
*
PROCEDURE DIVISION.
*
DECLARATIVES.
*
OTHER-ERROR SECTION.
USE EXCEPTION CORBA-EXCEPTION.
DISPLAY "CORBA::Exception: " API-NAME.
SET EXCEPTION-ID TO IDL-ID OF EXCEPTION-OBJECT AS CORBA-EXCEPTION.
INVOKE EXCEPTION-ID "GET-VALUE" RETURNING EXCEPTION-ID-VALUE.
DISPLAY " Exception-id: " EXCEPTION-ID-VALUE.
EXIT PROGRAM.
END-OTHER-ERR.
*
END DECLARATIVES.
*
MAIN SECTION.
*
MOVE "CORBA::ORB_init" TO API-NAME.
INVOKE CORBA "ORB_INIT"
USING "simple_c"
FJ-OM_ORBID
RETURNING ORB.
*
MOVE "CORBA::ORB::resolve_initial_references" TO API-NAME.
INVOKE ORB "RESOLVE_INITIAL_REFERENCES"
USING CORBA-ORB-OBJECTID_NAMESERVICE
RETURNING OBJ.
*
INVOKE COSNAMING-NAMINGCONTEXT "NARROW"
USING OBJ
RETURNING NAMING-CONTEXT.
*
INVOKE CORBA-STRING "NEW-WITH-VALUE"
USING "ODsample::structtest"
RETURNING NAME-ID.
*
INVOKE CORBA-STRING "NEW-WITH-VALUE"
USING " "
RETURNING NAME-KIND.
*
INVOKE COSNAMING-NAMECOMPONENT "NEW"
RETURNING NAME-COMPONENT.
*
SET IDL-ID OF NAME-COMPONENT TO NAME-ID.
SET KIND OF NAME-COMPONENT TO NAME-KIND.
*
INVOKE SEQUENCE-NAMECOMPONENT-001 "NEW-WITH-LENGTH"
USING 1
RETURNING NAME.
*
INVOKE NAME "SET-VALUE"
USING 1
NAME-COMPONENT.
*
MOVE "CosNaming::NamingContext::resolve" TO API-NAME.
INVOKE NAMING-CONTEXT "RESOLVE"
USING NAME
RETURNING OBJ.
*
INVOKE ODSAMPLE-STRUCTTEST "NARROW"
USING OBJ
RETURNING TARGET-OBJ.
*
* ODsample::samplefix
*
* SET IN PARAMETER
MOVE 10 TO PARA1 OF FIX1.
MOVE 11 TO PARA2 OF FIX1.
*
* SET INOUT PARAMETER
MOVE 20 TO PARA1 OF FIX3.
MOVE 21 TO PARA1 OF FIX3.
*
MOVE "ODdemo::structtest::op2" TO API-NAME.
INVOKE TARGET-OBJ "OP2"
USING FIX1
FIX2
FIX3
RETURNING FIX0.
*
* ODsample::samplevar
*
* SET IN PARAMETER
INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING VAR1.
MOVE 5 TO PARA1 OF VAR1.
INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
INVOKE STR-WORK "SET-VALUE" USING "test".
SET PARA2 OF VAR1 TO STR-WORK.
*
* SET INOUT PARAMETER
INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING VAR3.
MOVE 4 TO PARA1 OF VAR1.
INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
INVOKE STR-WORK "SET-VALUE" USING "pro".
SET PARA2 OF VAR3 TO STR-WORK.
*
MOVE "ODdemo::structtest::op1" TO API-NAME.
INVOKE TARGET-OBJ "OP1"
USING VAR1
VAR2
VAR3
RETURNING VAR0.
*
STOP RUN.
*
END-MAIN.
*
END PROGRAM "CLIENT-MAIN".(4)サーバアプリケーション例
サーバアプリケーション例を以下に示します。
CLASS-ID. ODSAMPLE-STRUCTTEST-IMPL
INHERITS ODSAMPLE-STRUCTTEST.
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
COPY CORBA--REP.
COPY SIMPLE--REP.
.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY CORBA--CONST.
COPY SIMPLE--CONST.
.
*
OBJECT.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
COPY SIMPLE--COPY.
*
PROCEDURE DIVISION.
*
METHOD-ID. OP1 OVERRIDE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 STR-WORK USAGE OBJECT REFERENCE CORBA-STRING.
LINKAGE SECTION.
01 STR1 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
01 STR2 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
01 STR3 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
01 STR0 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
*
PROCEDURE DIVISION
USING STR1
STR2
STR3
RETURNING STR0
RAISING CORBA-SYSTEMEXCEPTION.
*
* SET OUT PARAMETER
INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING STR2.
MOVE 12 TO PARA1 OF STR2.
INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
INVOKE STR-WORK "SET-VALUE" USING "(*str2)->para2".
SET PARA2 OF STR2 TO STR-WORK.
*
* SET INOUT PARAMETER
INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING STR3.
MOVE 16 TO PARA1 OF STR3.
INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
INVOKE STR-WORK "SET-VALUE" USING "(*str3)->para2".
SET PARA2 OF STR3 TO STR-WORK.
*
* SET RESULT
INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING STR0.
MOVE 11 TO PARA1 OF STR0.
INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
INVOKE STR-WORK "SET-VALUE" USING "(*str0)->para2".
SET PARA2 OF STR0 TO STR-WORK.
*
END METHOD OP1.
*
*
METHOD-ID. OP2 OVERRIDE.
DATA DIVISION.
LINKAGE SECTION.
01 STR1 TYPE ODSAMPLE-SAMPLEFIX.
01 STR2 TYPE ODSAMPLE-SAMPLEFIX.
01 STR3 TYPE ODSAMPLE-SAMPLEFIX.
01 STR0 TYPE ODSAMPLE-SAMPLEFIX.
*
PROCEDURE DIVISION
USING STR1
STR2
STR3
RETURNING STR0
RAISING CORBA-SYSTEMEXCEPTION.
*
* SET OUT PARAMETER
*
MOVE 0 TO PARA1 OF STR3.
MOVE 1 TO PARA2 OF STR3.
* SET INOUT PARAMETER
MOVE 2 TO PARA1 OF STR2.
MOVE 3 TO PARA2 OF STR2.
*
* SET RESULT
MOVE 4 TO PARA1 OF STR0.
MOVE 5 TO PARA2 OF STR0.
*
END METHOD OP2.
*
END OBJECT.
*
END CLASS ODSAMPLE-STRUCTTEST-IMPL.(1) IDLマッピング
IDL言語で共用体unionを指定した場合、クラス(共用体クラス)でデータ宣言します。
以降では、以下のIDL定義例をもとに説明します。
[ファイル名: simple.idl]
module ODsample{
union samplefix switch(long){ // 共用体(固定長)
case 1: long para1;
case 2: long para2;
};
union samplevar switch(long){ // 共用体(可変長)
case 1: long para1;
case 2: string para2;
};
interface uniontest{
samplefix op2(
in samplefix uni1,
out samplefix uni2,
inout samplefix uni3
);
samplevar op1(
in samplevar uni1,
out samplevar uni2,
inout samplevar uni3
);
};
};[ファイル名: ODSAMPLE-SAMPLEFIX.COB]
* 共用体クラス(共用体(固定長))
CLASS-ID. ODSAMPLE-SAMPLEFIX AS "ODSAMPLE-SAMPLEFIX"
INHERITS UNIONBASE.
*
OBJECT.
PROCEDURE DIVISION.
*
* DISCRIMINATOR PROPERTY : GET
METHOD-ID. GET PROPERTY DISCRIMINATOR.
DATA DIVISION.
LINKAGE SECTION.
01 0--RET-DISCRIMINATOR TYPE CORBA-LONG.
PROCEDURE DIVISION RETURNING 0--RET-DISCRIMINATOR.
END METHOD.
*
* MEMBER PROPERTY : GET
METHOD-ID. GET PROPERTY PARA1.
DATA DIVISION.
LINKAGE SECTION.
01 0--VALUE TYPE CORBA-LONG.
PROCEDURE DIVISION RETURNING 0--VALUE
RAISING CORBA-BAD_PARAM.
END METHOD.
*
* MEMBER PROPERTY : SET
METHOD-ID. SET PROPERTY PARA1.
DATA DIVISION.
LINKAGE SECTION.
01 0--VALUE TYPE CORBA-LONG.
PROCEDURE DIVISION USING 0--VALUE.
END METHOD.
*
* MEMBER PROPERTY : GET
METHOD-ID. GET PROPERTY PARA2.
DATA DIVISION.
LINKAGE SECTION.
01 0--VALUE TYPE CORBA-LONG.
PROCEDURE DIVISION RETURNING 0--VALUE
RAISING CORBA-BAD_PARAM.
END METHOD.
*
* MEMBER PROPERTY : SET
METHOD-ID. SET PROPERTY PARA2.
DATA DIVISION.
LINKAGE SECTION.
01 0--VALUE TYPE CORBA-LONG.
PROCEDURE DIVISION USING 0--VALUE.
END METHOD.
*
* CLONE METHOD
METHOD-ID. CLONE AS "CLONE".
DATA DIVISION.
LINKAGE SECTION.
01 0--CLONE-OBJ OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
PROCEDURE DIVISION RETURNING 0--CLONE-OBJ.
END METHOD CLONE.
*
END OBJECT.
END CLASS ODSAMPLE-SAMPLEFIX.[ファイル名: ODSAMPLE-SAMPLEVAR.COB]
* 共用体クラス(共用体(可変長)
CLASS-ID. ODSAMPLE-SAMPLEVAR AS "ODSAMPLE-SAMPLEVAR"
INHERITS UNIONBASE.
*
OBJECT.
PROCEDURE DIVISION.
*
* DISCRIMINATOR PROPERTY : GET
METHOD-ID. GET PROPERTY DISCRIMINATOR.
DATA DIVISION.
LINKAGE SECTION.
01 0--RET-DISCRIMINATOR TYPE CORBA-LONG.
PROCEDURE DIVISION RETURNING 0--RET-DISCRIMINATOR.
END METHOD.
*
* MEMBER PROPERTY : GET
METHOD-ID. GET PROPERTY PARA1.
DATA DIVISION.
LINKAGE SECTION.
01 0--VALUE TYPE CORBA-LONG.
PROCEDURE DIVISION RETURNING 0--VALUE
RAISING CORBA-BAD_PARAM.
END METHOD.
*
* MEMBER PROPERTY : SET
METHOD-ID. SET PROPERTY PARA1.
DATA DIVISION.
LINKAGE SECTION.
01 0--VALUE TYPE CORBA-LONG.
PROCEDURE DIVISION USING 0--VALUE.
END METHOD.
*
* MEMBER PROPERTY : GET
METHOD-ID. GET PROPERTY PARA2.
DATA DIVISION.
LINKAGE SECTION.
01 0--VALUE OBJECT REFERENCE CORBA-STRING.
PROCEDURE DIVISION RETURNING 0--VALUE
RAISING CORBA-BAD_PARAM.
END METHOD.
*
* MEMBER PROPERTY : SET
METHOD-ID. SET PROPERTY PARA2.
DATA DIVISION.
LINKAGE SECTION.
01 0--VALUE OBJECT REFERENCE CORBA-STRING.
PROCEDURE DIVISION USING 0--VALUE.
END METHOD.
*
* CLONE METHOD
METHOD-ID. CLONE AS "CLONE".
DATA DIVISION.
LINKAGE SECTION.
01 0--CLONE-OBJ OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
PROCEDURE DIVISION RETURNING 0--CLONE-OBJ.
END METHOD CLONE.
*
END OBJECT.
END CLASS ODSAMPLE-SAMPLEVAR.(2)共用体クラスのメソッド/プロパティ
共用体クラスで定義されているメソッド/プロパティを以下に示します。
メソッド/プロパティ | 機能 |
|---|---|
CLONEメソッド | (オブジェクトメソッド)共用体クラスを複製します。 |
弁別子プロパティ | 弁別子情報を取得します。 |
メンバプロパティ | メンバの値の取得/設定を行います。 |
メソッド/プロパティの使用例を以下に示します。
* CLONEメソッド * 共用体クラスをUNI-CLONとして複製 01 UNI USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR. 01 UNI-CLON USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR. INVOKE UNI "CLONE" RETURNING UNI-CLON.
* 弁別子プロパティ * 弁別子(DISCRIMINATOR)の値をUNI-MEMTに取得 01 UNI USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR. 01 UNI-DISC TYPE CORBA-LONG. MOVE DISCRIMINATOR OF UNI TO UNI-DISC.
* メンバプロパティ(クラス以外のデータ型) * メンバPARA1の値をUNI-MEMTに取得 01 UNI USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR. 01 UNI-MEMT TYPE CORBA-LONG. MOVE PARA1 OF UNI TO UNI-MEMT. * メンバPARA1にUNI-MEMTを設定 01 UNI USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR. 01 UNI-MEMT TYPE CORBA-LONG. MOVE UNI-MEMT TO PARA1 OF UNI.
* メンバプロパティ(クラス) * メンバPARA2の値をUNI-MEMCに取得 01 UNI USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR. 01 UNI-MEMC USAGE OBJECT REFERENCE CORBA-STRING. SET UNI-MEMC TO PARA2 OF UNI. * メンバPARA2にUNI-MEMCを設定 01 UNI USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR. 01 UNI-MEMC USAGE OBJECT REFERENCE CORBA-STRING. SET PARA2 OF UNI TO UNI-MEMC.
(3)クライアントアプリケーション例
クライアントアプリケーション例を以下に示します。
IDENTIFICATION DIVISION.
PROGRAM-ID. "CLIENT-MAIN".
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
COPY CORBA--REP.
COPY COSNAMING--REP.
COPY SIMPLE--REP.
.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY CORBA--CONST.
COPY COSNAMING--CONST.
COPY SIMPLE--CONST.
.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
COPY COSNAMING--COPY.
COPY SIMPLE--COPY.
*
01 ORB USAGE OBJECT REFERENCE CORBA-ORB.
01 OBJ USAGE OBJECT REFERENCE CORBA-OBJECT.
01 NAMING-CONTEXT USAGE OBJECT REFERENCE COSNAMING-NAMINGCONTEXT.
01 NAME TYPE COSNAMING-NAME.
01 NAME-COMPONENT USAGE OBJECT REFERENCE COSNAMING-NAMECOMPONENT.
01 NAME-ID USAGE OBJECT REFERENCE CORBA-STRING.
01 NAME-KIND USAGE OBJECT REFERENCE CORBA-STRING.
*
01 EXCEPTION-ID USAGE OBJECT REFERENCE CORBA-STRING.
01 EXCEPTION-ID-VALUE PIC X(50).
01 API-NAME PIC X(50).
*
01 TARGET-OBJ USAGE OBJECT REFERENCE ODSAMPLE-UNIONTEST.
01 FIX0 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
01 FIX1 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
01 FIX2 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
01 FIX3 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
01 VAR0 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
01 VAR1 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
01 VAR2 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
01 VAR3 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
01 STR-WORK USAGE OBJECT REFERENCE CORBA-STRING.
*
PROCEDURE DIVISION.
*
DECLARATIVES.
*
OTHER-ERROR SECTION.
USE EXCEPTION CORBA-EXCEPTION.
DISPLAY "CORBA::Exception: " API-NAME.
SET EXCEPTION-ID TO IDL-ID OF EXCEPTION-OBJECT AS CORBA-EXCEPTION.
INVOKE EXCEPTION-ID "GET-VALUE" RETURNING EXCEPTION-ID-VALUE.
DISPLAY " Exception-id: " EXCEPTION-ID-VALUE.
EXIT PROGRAM.
END-OTHER-ERR.
*
END DECLARATIVES.
*
MAIN SECTION.
*
MOVE "CORBA::ORB_init" TO API-NAME.
INVOKE CORBA "ORB_INIT"
USING "simple_c"
FJ-OM_ORBID
RETURNING ORB.
*
MOVE "CORBA::ORB::resolve_initial_references" TO API-NAME.
INVOKE ORB "RESOLVE_INITIAL_REFERENCES"
USING CORBA-ORB-OBJECTID_NAMESERVICE
RETURNING OBJ.
*
INVOKE COSNAMING-NAMINGCONTEXT "NARROW"
USING OBJ
RETURNING NAMING-CONTEXT.
*
INVOKE CORBA-STRING "NEW-WITH-VALUE"
USING "ODsample::uniontest"
RETURNING NAME-ID.
*
INVOKE CORBA-STRING "NEW-WITH-VALUE"
USING " "
RETURNING NAME-KIND.
*
INVOKE COSNAMING-NAMECOMPONENT "NEW"
RETURNING NAME-COMPONENT.
*
SET IDL-ID OF NAME-COMPONENT TO NAME-ID.
SET KIND OF NAME-COMPONENT TO NAME-KIND.
*
INVOKE SEQUENCE-NAMECOMPONENT-001 "NEW-WITH-LENGTH"
USING 1
RETURNING NAME.
*
INVOKE NAME "SET-VALUE"
USING 1
NAME-COMPONENT.
*
MOVE "CosNaming::NamingContext::resolve" TO API-NAME.
INVOKE NAMING-CONTEXT "RESOLVE"
USING NAME
RETURNING OBJ.
*
INVOKE ODSAMPLE-UNIONTEST "NARROW"
USING OBJ
RETURNING TARGET-OBJ.
*
* ODsample::samplefix
*
* SET IN PARAMETER
INVOKE ODSAMPLE-SAMPLEFIX "NEW" RETURNING FIX1.
MOVE 10 TO PARA1 OF FIX1.
*
* SET INOUT PARAMETER
INVOKE ODSAMPLE-SAMPLEFIX "NEW" RETURNING FIX3.
MOVE 21 TO PARA2 OF FIX3.
*
MOVE "ODsample::uniontest::op2" TO API-NAME.
INVOKE TARGET-OBJ "OP2"
USING FIX1
FIX2
FIX3
RETURNING FIX0.
*
* ODsample::samplevar
*
* SET IN PARAMETER
INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING VAR1.
INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
INVOKE STR-WORK "SET-VALUE" USING "Z".
SET PARA2 OF VAR1 TO STR-WORK.
*
* SET INOUT PARAMETER
INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING VAR3.
INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
INVOKE STR-WORK "SET-VALUE" USING "y".
SET PARA2 OF VAR3 TO STR-WORK.
*
MOVE "ODsample::uniontest::op1" TO API-NAME.
INVOKE TARGET-OBJ "OP1"
USING VAR1
VAR2
VAR3
RETURNING VAR0.
*
STOP RUN.
*
END-MAIN.
*
END PROGRAM "CLIENT-MAIN".(4)サーバアプリケーション例
サーバアプリケーション例を以下に示します。
CLASS-ID. ODSAMPLE-UNIONTEST-IMPL
INHERITS ODSAMPLE-UNIONTEST.
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
COPY CORBA--REP.
COPY SIMPLE--REP.
.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY CORBA--CONST.
COPY SIMPLE--CONST.
.
*
OBJECT.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
COPY SIMPLE--COPY.
*
PROCEDURE DIVISION.
*
METHOD-ID. OP1 OVERRIDE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 STR-WORK USAGE OBJECT REFERENCE CORBA-STRING.
LINKAGE SECTION.
01 UNI1 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
01 UNI2 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
01 UNI3 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
01 UNI0 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
*
PROCEDURE DIVISION
USING UNI1
UNI2
UNI3
RETURNING UNI0
RAISING CORBA-SYSTEMEXCEPTION.
*
* SET OUT PARAMETER
INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING UNI2.
INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
INVOKE STR-WORK "SET-VALUE" USING "(*uni2)->para2".
SET PARA2 OF UNI2 TO STR-WORK.
*
* SET INOUT PARAMETER
INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING UNI3.
INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
INVOKE STR-WORK "SET-VALUE" USING "(*uni3)->para2".
SET PARA2 OF UNI3 TO STR-WORK.
*
* SET RESULT
INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING UNI0.
INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
INVOKE STR-WORK "SET-VALUE" USING "(*uni0)->para2".
SET PARA2 OF UNI0 TO STR-WORK.
*
END METHOD OP1.
*
*
METHOD-ID. OP2 OVERRIDE.
DATA DIVISION.
LINKAGE SECTION.
01 UNI1 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
01 UNI2 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
01 UNI3 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
01 UNI0 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
*
PROCEDURE DIVISION
USING UNI1
UNI2
UNI3
RETURNING UNI0
RAISING CORBA-SYSTEMEXCEPTION.
*
* SET OUT PARAMETER
*
INVOKE ODSAMPLE-SAMPLEFIX "NEW" RETURNING UNI2.
MOVE 0 TO PARA1 OF UNI2.
*
* SET INOUT PARAMETER
INVOKE ODSAMPLE-SAMPLEFIX "NEW" RETURNING UNI3.
MOVE 3 TO PARA2 OF UNI3.
*
* SET RESULT
INVOKE ODSAMPLE-SAMPLEFIX "NEW" RETURNING UNI0.
MOVE 4 TO PARA1 OF UNI0.
*
END METHOD OP2.
*
END OBJECT.
*
END CLASS ODSAMPLE-UNIONTEST-IMPL.(1)IDLマッピング
IDL言語で固定小数点型fixedを指定した場合、数字項目(PICTURE句)でデータ宣言します。
有効桁数と小数点位置による数字項目の定義形式を以下に示します。
// fixed<digits,scale> とした場合 (digits=有効桁数,scale=小数点位置) typedef fixed <10,2> fixed1; // digits > scale > 0 のとき typedef fixed <2,10> fixed2; // 0 < digits < scale のとき typedef fixed <10,10> fixed3; // digits = scale のとき typedef fixed <10,0> fixed4; // scale = 0 のとき typedef fixed <10,-2> fixed5; // scale < 0 のとき
01 FIXED1 PIC S9(8)V9(2) PACKED-DECIMAL. 01 FIXED2 PIC SVP(8)9(2) PACKED-DECIMAL. 01 FIXED3 PIC SV9(10) PACKED-DECIMAL. 01 FIXED4 PIC S9(10) PACKED-DECIMAL. 01 FIXED5 PIC S9(10)P(2) PACKED-DECIMAL.
以降では、以下のIDL定義例をもとに説明します。
module ODsample {
typedef fixed <10,3> fixed0;
interface fixedtest {
fixed0 op1(
in fixed <5,10> fixed1,
out fixed <10,-3> fixed2,
inout fixed <10,10> fixed3 );
};
}; * データ型宣言(固定小数点)
01 FIXED0 PIC S9(7)V9(3) PACKED-DECIMAL.(2)クライアントアプリケーション例
クライアントアプリケーション例を以下に示します。
IDENTIFICATION DIVISION.
PROGRAM-ID. "CLIENT-MAIN".
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
COPY CORBA--REP.
COPY COSNAMING--REP.
COPY SIMPLE--REP.
.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY CORBA--CONST.
COPY COSNAMING--CONST.
COPY SIMPLE--CONST.
.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
COPY COSNAMING--COPY.
COPY SIMPLE--COPY.
*
01 ORB USAGE OBJECT REFERENCE CORBA-ORB.
01 OBJ USAGE OBJECT REFERENCE CORBA-OBJECT.
01 NAMING-CONTEXT USAGE OBJECT REFERENCE COSNAMING-NAMINGCONTEXT.
01 NAME TYPE COSNAMING-NAME.
01 NAME-COMPONENT USAGE OBJECT REFERENCE COSNAMING-NAMECOMPONENT.
01 NAME-ID USAGE OBJECT REFERENCE CORBA-STRING.
01 NAME-KIND USAGE OBJECT REFERENCE CORBA-STRING.
*
01 EXCEPTION-ID USAGE OBJECT REFERENCE CORBA-STRING.
01 EXCEPTION-ID-VALUE PIC X(50).
01 API-NAME PIC X(50).
*
01 TARGET-OBJ USAGE OBJECT REFERENCE ODSAMPLE-FIXEDTEST.
01 FIXED0 TYPE ODSAMPLE-FIXED0.
01 FIXED1 PIC SVP(5)9(5) PACKED-DECIMAL.
01 FIXED2 PIC S9(10)P(3) PACKED-DECIMAL.
01 FIXED3 PIC SV9(10) PACKED-DECIMAL.
*
PROCEDURE DIVISION.
*
DECLARATIVES.
*
OTHER-ERROR SECTION.
USE EXCEPTION CORBA-EXCEPTION.
DISPLAY "CORBA::Exception: " API-NAME.
SET EXCEPTION-ID TO IDL-ID OF EXCEPTION-OBJECT AS CORBA-EXCEPTION.
INVOKE EXCEPTION-ID "GET-VALUE" RETURNING EXCEPTION-ID-VALUE.
DISPLAY " Exception-id: " EXCEPTION-ID-VALUE.
EXIT PROGRAM.
END-OTHER-ERR.
*
END DECLARATIVES.
*
MAIN SECTION.
*
MOVE "CORBA::ORB_init" TO API-NAME.
INVOKE CORBA "ORB_INIT"
USING "simple_c"
FJ-OM_ORBID
RETURNING ORB.
*
MOVE "CORBA::ORB::resolve_initial_references" TO API-NAME.
INVOKE ORB "RESOLVE_INITIAL_REFERENCES"
USING CORBA-ORB-OBJECTID_NAMESERVICE
RETURNING OBJ.
*
INVOKE COSNAMING-NAMINGCONTEXT "NARROW"
USING OBJ
RETURNING NAMING-CONTEXT.
*
INVOKE CORBA-STRING "NEW-WITH-VALUE"
USING "ODsample::fixedtest"
RETURNING NAME-ID.
*
INVOKE CORBA-STRING "NEW-WITH-VALUE"
USING " "
RETURNING NAME-KIND.
*
INVOKE COSNAMING-NAMECOMPONENT "NEW"
RETURNING NAME-COMPONENT.
*
SET IDL-ID OF NAME-COMPONENT TO NAME-ID.
SET KIND OF NAME-COMPONENT TO NAME-KIND.
*
INVOKE SEQUENCE-NAMECOMPONENT-001 "NEW-WITH-LENGTH"
USING 1
RETURNING NAME.
*
INVOKE NAME "SET-VALUE"
USING 1
NAME-COMPONENT.
*
MOVE "CosNaming::NamingContext::resolve" TO API-NAME.
INVOKE NAMING-CONTEXT "RESOLVE"
USING NAME
RETURNING OBJ.
*
INVOKE ODSAMPLE-FIXEDTEST "NARROW"
USING OBJ
RETURNING TARGET-OBJ.
*
* ODsample::samplefix
*
* SET IN PARAMETER
MOVE 0. 23 TO FIXED1.
*
* SET INOUT PARAMETER
MOVE 0. 33 TO FIXED3.
*
MOVE "ODdemo::fixedtest::op1" TO API-NAME.
INVOKE TARGET-OBJ "OP1"
USING FIXED1
FIXED2
FIXED3
RETURNING FIXED0.
*
STOP RUN.
*
END-MAIN.
*
END PROGRAM "CLIENT-MAIN".(3)サーバアプリケーション例
サーバアプリケーション例を以下に示します。
CLASS-ID. ODSAMPLE-FIXEDTEST-IMPL
INHERITS ODSAMPLE-FIXEDTEST.
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
COPY CORBA--REP.
COPY SIMPLE--REP.
.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY CORBA--CONST.
COPY SIMPLE--CONST.
.
*
OBJECT.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
COPY SIMPLE--COPY.
*
PROCEDURE DIVISION.
*
METHOD-ID. OP1 OVERRIDE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 STR-WORK USAGE OBJECT REFERENCE CORBA-STRING.
LINKAGE SECTION.
01 FIXED0 TYPE ODSAMPLE-FIXED0.
01 FIXED1 PIC SVP(5)9(5) PACKED-DECIMAL.
01 FIXED2 PIC S9(10)P(3) PACKED-DECIMAL.
01 FIXED3 PIC SV9(10) PACKED-DECIMAL.
*
PROCEDURE DIVISION
USING FIXED1
FIXED2
FIXED3
RETURNING FIXED0
RAISING CORBA-SYSTEMEXCEPTION.
*
* SET OUT PARAMETER
MOVE 0 TO FIXED2.
*
* SET INOUT PARAMETER
MOVE 0. TO FIXED3.
*
* SET RESULT
MOVE 200.33 TO FIXED0.
*
END METHOD OP1.
*
END OBJECT.
*END CLASS ODSAMPLE-FIXEDTEST-IMPL.
(1) IDLマッピング
IDL言語で属性宣言(attribute)を指定した場合、オブジェクトデータの取得/設定を行うプロパティ(プロパティ名はIDLで定義された変数名)が定義されます。
以降では、以下のIDL定義例をもとに説明します。
module ODsample{
interface attrtest{
attribute long para1;
attribute string para2;
readonly attribute long para3;
};
}; CLASS-ID. ODSAMPLE-ATTRTEST AS "ODSAMPLE-ATTRTEST"
INHERITS CORBA-OBJECT
.
*
FACTORY.
PROCEDURE DIVISION.
METHOD-ID. NARROW AS "NARROW" PROTOTYPE.
DATA DIVISION.
LINKAGE SECTION.
01 0--PARAM OBJECT REFERENCE CORBA-OBJECT.
01 0--RESULT OBJECT REFERENCE SELF.
PROCEDURE DIVISION
USING 0--PARAM
RETURNING 0--RESULT
RAISING CORBA-SYSTEMEXCEPTION.
END METHOD NARROW.
END FACTORY.
*
OBJECT.
PROCEDURE DIVISION.
*
METHOD-ID. GET PROPERTY PARA1.
DATA DIVISION.
LINKAGE SECTION.
01 0--RESULT TYPE CORBA-LONG.
PROCEDURE DIVISION
RETURNING 0--RESULT RAISING CORBA-SYSTEMEXCEPTION.
END METHOD.
*
METHOD-ID. SET PROPERTY PARA1.
DATA DIVISION.
LINKAGE SECTION.
01 0--PARAM TYPE CORBA-LONG.
PROCEDURE DIVISION
USING 0--PARAM RAISING CORBA-SYSTEMEXCEPTION.
END METHOD.
*
METHOD-ID. GET PROPERTY PARA2.
DATA DIVISION.
LINKAGE SECTION.
01 0--RESULT OBJECT REFERENCE CORBA-STRING.
PROCEDURE DIVISION
RETURNING 0--RESULT RAISING CORBA-SYSTEMEXCEPTION.
END METHOD.
*
METHOD-ID. SET PROPERTY PARA2.
DATA DIVISION.
LINKAGE SECTION.
01 0--PARAM OBJECT REFERENCE CORBA-STRING.
PROCEDURE DIVISION
USING 0--PARAM RAISING CORBA-SYSTEMEXCEPTION.
END METHOD.
*
METHOD-ID. GET PROPERTY PARA3.
DATA DIVISION.
LINKAGE SECTION.
01 0--RESULT TYPE CORBA-LONG.
PROCEDURE DIVISION
RETURNING 0--RESULT RAISING CORBA-SYSTEMEXCEPTION.
END METHOD.
*
END OBJECT.
END CLASS ODSAMPLE-ATTRTEST.(2)オブジェクトデータのプロパティ
属性宣言により定義されるオブジェクトデータのプロパティを以下に示します。
プロパティ | 機能 |
|---|---|
データプロパティ | オブジェクトデータの値の取得/設定を行います。 |
プロパティの使用例を以下に示します。
* データプロパティ(クラス以外のデータ型) * PARA1の値をATTR-LONGへ取得 01 ATTR USAGE OBJECT REFERENCE ODSAMPLE-ATTRTEST. 01 ATTR-LONG TYPE CORBA-LONG. MOVE PARA1 OF ATTR TO ATTR-LONG. * PARA1にATTR-LONGを設定 01 ATTR USAGE OBJECT REFERENCE ODSAMPLE-ATTRTEST. 01 ATTR-LONG TYPE CORBA-LONG. MOVE ATTR-LONG TO PARA1 OF ATTR.
* データプロパティ(クラス) * PARA2の値をATTR-STRへ取得 01 ATTR USAGE OBJECT REFERENCE ODSAMPLE-ATTRTEST. 01 ATTR-STR USAGE OBJECT REFERENCE CORBA-STRING. SET ATTR-STR TO PARA2 OF ATTR. * PARA2にATTR-STRを設定 01 ATTR USAGE OBJECT REFERENCE ODSAMPLE-ATTRTEST. 01 ATTR-STR USAGE OBJECT REFERENCE CORBA-STRING. SET PARA2 OF ATTR TO ATTR-STR.
* データプロパティ(readonly) * PARA3の値をATTR-LONGへ取得 01 ATTR USAGE OBJECT REFERENCE ODSAMPLE-ATTRTEST. 01 ATTR-LONG TYPE CORBA-LONG. MOVE PARA3 OF ATTR TO ATTR-LONG.
(3)クライアントアプリケーション例
クライアントアプリケーション例を以下に示します。
IDENTIFICATION DIVISION.
PROGRAM-ID. "CLIENT-MAIN".
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
COPY CORBA--REP.
COPY COSNAMING--REP.
COPY SIMPLE--REP.
.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY CORBA--CONST.
COPY COSNAMING--CONST.
COPY SIMPLE--CONST.
.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
COPY COSNAMING--COPY.
COPY SIMPLE--COPY.
*
01 ORB USAGE OBJECT REFERENCE CORBA-ORB.
01 OBJ USAGE OBJECT REFERENCE CORBA-OBJECT.
01 NAMING-CONTEXT USAGE OBJECT REFERENCE COSNAMING-NAMINGCONTEXT.
01 NAME TYPE COSNAMING-NAME.
01 NAME-COMPONENT USAGE OBJECT REFERENCE COSNAMING-NAMECOMPONENT.
01 NAME-ID USAGE OBJECT REFERENCE CORBA-STRING.
01 NAME-KIND USAGE OBJECT REFERENCE CORBA-STRING.
*
01 EXCEPTION-ID USAGE OBJECT REFERENCE CORBA-STRING.
01 EXCEPTION-ID-VALUE PIC X(50).
01 API-NAME PIC X(50).
*
01 TARGET-OBJ USAGE OBJECT REFERENCE ODSAMPLE-ATTRTEST.
01 NUM TYPE CORBA-LONG.
01 RET-NUM TYPE CORBA-LONG.
01 STR1 USAGE OBJECT REFERENCE CORBA-STRING.
01 RET-STR1 USAGE OBJECT REFERENCE CORBA-STRING.
01 RET-STR1-VALUE PIC X(30).
*
PROCEDURE DIVISION.
*
DECLARATIVES.
*
OTHER-ERROR SECTION.
USE EXCEPTION CORBA-EXCEPTION.
DISPLAY "CORBA::Exception: " API-NAME.
SET EXCEPTION-ID TO IDL-ID OF EXCEPTION-OBJECT AS CORBA-EXCEPTION.
INVOKE EXCEPTION-ID "GET-VALUE" RETURNING EXCEPTION-ID-VALUE.
DISPLAY " Exception-id: " EXCEPTION-ID-VALUE.
EXIT PROGRAM.
END-OTHER-ERR.
*
END DECLARATIVES.
*
MAIN SECTION.
*
MOVE "CORBA::ORB_init" TO API-NAME.
INVOKE CORBA "ORB_INIT"
USING "simple_c"
FJ-OM_ORBID
RETURNING ORB.
*
MOVE "CORBA::ORB::resolve_initial_references" TO API-NAME.
INVOKE ORB "RESOLVE_INITIAL_REFERENCES"
USING CORBA-ORB-OBJECTID_NAMESERVICE
RETURNING OBJ.
*
INVOKE COSNAMING-NAMINGCONTEXT "NARROW"
USING OBJ
RETURNING NAMING-CONTEXT.
*
INVOKE CORBA-STRING "NEW-WITH-VALUE"
USING "ODsample::attrtest"
RETURNING NAME-ID.
*
INVOKE CORBA-STRING "NEW-WITH-VALUE"
USING " "
RETURNING NAME-KIND.
*
INVOKE COSNAMING-NAMECOMPONENT "NEW"
RETURNING NAME-COMPONENT.
*
SET IDL-ID OF NAME-COMPONENT TO NAME-ID.
SET KIND OF NAME-COMPONENT TO NAME-KIND.
*
INVOKE SEQUENCE-NAMECOMPONENT-001 "NEW-WITH-LENGTH"
USING 1
RETURNING NAME.
*
INVOKE NAME "SET-VALUE"
USING 1
NAME-COMPONENT.
*
MOVE "CosNaming::NamingContext::resolve" TO API-NAME.
INVOKE NAMING-CONTEXT "RESOLVE"
USING NAME
RETURNING OBJ.
*
INVOKE ODSAMPLE-ATTRTEST "NARROW"
USING OBJ
RETURNING TARGET-OBJ.
*
* para1(SET)
MOVE 2 TO NUM.
MOVE "ODsample::attrtest::para1(set)" TO API-NAME.
MOVE NUM TO PARA1 OF TARGET-OBJ.
*
* para1(GET)
MOVE "ODsample::attrtest::para1(get)" TO API-NAME.
MOVE PARA1 OF TARGET-OBJ TO RET-NUM.
DISPLAY "ODsample::attrtest::para1 returns " RET-NUM.
*
* para2(SET)
INVOKE CORBA-STRING "NEW-WITH-VALUE" USING "test" RETURNING STR1.
MOVE "ODsample::attrtest::para2(set)" TO API-NAME.
SET PARA2 OF TARGET-OBJ TO STR1.
*
* para2(GET)
MOVE "ODsample::attrtest::para2(get)" TO API-NAME.
SET RET-STR1 TO PARA2 OF TARGET-OBJ.
INVOKE RET-STR1 "GET-VALUE" RETURNING RET-STR1-VALUE.
DISPLAY "ODsample::attrtest::para2 returns " RET-STR1-VALUE.
*
* para3(GET)
MOVE "ODsample::attrtest::para3(get)" TO API-NAME.
MOVE PARA3 OF TARGET-OBJ TO RET-NUM.
DISPLAY "ODsample::attrtest::para3 returns " RET-NUM.
*
STOP RUN.
*
END-MAIN.
*
END PROGRAM "CLIENT-MAIN".(4)サーバアプリケーション例
サーバアプリケーション例を以下に示します。
CLASS-ID. ODSAMPLE-ATTRTEST-IMPL
INHERITS ODSAMPLE-ATTRTEST.
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
COPY CORBA--REP.
COPY SIMPLE--REP.
.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY CORBA--CONST.
COPY SIMPLE--CONST.
.
*
OBJECT.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
COPY SIMPLE--COPY.
01 PARA1-VALUE TYPE CORBA-LONG VALUE ZERO.
01 PARA2-VALUE USAGE OBJECT REFERENCE CORBA-STRING.
01 PARA3-VALUE TYPE CORBA-LONG VALUE 10000.
*
PROCEDURE DIVISION.
*
METHOD-ID. GET PROPERTY PARA1 OVERRIDE.
DATA DIVISION.
WORKING-STORAGE SECTION.
LINKAGE SECTION.
01 PARAM TYPE CORBA-LONG.
*
PROCEDURE DIVISION
RETURNING PARAM
RAISING CORBA-SYSTEMEXCEPTION.
*
MOVE PARA1-VALUE TO PARAM.
*
END METHOD.
*
METHOD-ID. SET PROPERTY PARA1 OVERRIDE.
DATA DIVISION.
WORKING-STORAGE SECTION.
LINKAGE SECTION.
01 PARAM TYPE CORBA-LONG.
*
PROCEDURE DIVISION
USING PARAM
RAISING CORBA-SYSTEMEXCEPTION.
*
MOVE PARAM TO PARA1-VALUE.
*
END METHOD.
*
METHOD-ID. GET PROPERTY PARA2 OVERRIDE.
DATA DIVISION.
WORKING-STORAGE SECTION.
LINKAGE SECTION.
01 PARAM USAGE OBJECT REFERENCE CORBA-STRING.
*
PROCEDURE DIVISION
RETURNING PARAM
RAISING CORBA-SYSTEMEXCEPTION.
*
SET PARAM TO PARA2-VALUE.
*
END METHOD.
*
METHOD-ID. SET PROPERTY PARA2 OVERRIDE.
DATA DIVISION.
WORKING-STORAGE SECTION.
LINKAGE SECTION.
01 PARAM USAGE OBJECT REFERENCE CORBA-STRING.
*
PROCEDURE DIVISION
USING PARAM
RAISING CORBA-SYSTEMEXCEPTION.
*
SET PARA2-VALUE TO PARAM.
*
END METHOD.
*
METHOD-ID. GET PROPERTY PARA3 OVERRIDE.
DATA DIVISION.
WORKING-STORAGE SECTION.
LINKAGE SECTION.
01 PARAM TYPE CORBA-LONG.
*
PROCEDURE DIVISION
RETURNING PARAM
RAISING CORBA-SYSTEMEXCEPTION.
*
MOVE PARA3-VALUE TO PARAM.
*
END METHOD.
*
END OBJECT.
*
END CLASS ODSAMPLE-ATTRTEST-IMPL.クライアント/サーバアプリケーションでパラメタ受渡しに使用するデータ型(オペレーション宣言)を以下に示します。
CORBAデータ型 | in | out | inout | 復帰値 | |
|---|---|---|---|---|---|
long | BY REFERENCE | BY REFERENCE | BY REFERENCE | BY REFERENCE | |
short | BY REFERENCE | BY REFERENCE | BY REFERENCE | BY REFERENCE | |
unsigned long | BY REFERENCE | BY REFERENCE | BY REFERENCE | BY REFERENCE | |
unsigned short | BY REFERENCE | BY REFERENCE | BY REFERENCE | BY REFERENCE | |
long long | BY REFERENCE | BY REFERENCE | BY REFERENCE | BY REFERENCE | |
float | BY REFERENCE | BY REFERENCE | BY REFERENCE | BY REFERENCE | |
double | BY REFERENCE | BY REFERENCE | BY REFERENCE | BY REFERENCE | |
char | BY REFERENCE | BY REFERENCE | BY REFERENCE | BY REFERENCE | |
wchar | BY REFERENCE | BY REFERENCE | BY REFERENCE | BY REFERENCE | |
octet | BY REFERENCE | BY REFERENCE | BY REFERENCE | BY REFERENCE | |
boolean | BY REFERENCE | BY REFERENCE | BY REFERENCE | BY REFERENCE | |
enum | BY REFERENCE | BY REFERENCE | BY REFERENCE | BY REFERENCE | |
string | サイズ指定あり | TEXT | TEXT | TEXT | TEXT |
サイズ指定なし | TEXT | BY REFERENCE | BY REFERENCE | BY REFERENCE | |
wstring | サイズ指定あり | TEXT | TEXT | TEXT | TEXT |
サイズ指定なし | TEXT | BY REFERENCE | BY REFERENCE | BY REFERENCE | |
sequence | BY REFERENCE | BY REFERENCE | BY REFERENCE | BY REFERENCE | |
struct | BY REFERENCE | BY REFERENCE | BY REFERENCE | BY REFERENCE | |
union | BY REFERENCE | BY REFERENCE | BY REFERENCE | BY REFERENCE | |
fixed | BY REFERENCE | BY REFERENCE | BY REFERENCE | BY REFERENCE | |
Object | BY REFERENCE | BY REFERENCE | BY REFERENCE | BY REFERENCE | |
TypeCode | BY REFERENCE | BY REFERENCE | BY REFERENCE | BY REFERENCE | |
注) TEXTはOOCOBOLの固定長テキストでNULL文字を含みません。
クライアント/サーバアプリケーションでパラメタ受渡しに使用するデータ型(属性宣言)を以下に示します。
CORBAデータ型 | set | get | |
|---|---|---|---|
long | BY REFERENCE | BY REFERENCE | |
short | BY REFERENCE | BY REFERENCE | |
unsigned long | BY REFERENCE | BY REFERENCE | |
unsigned short | BY REFERENCE | BY REFERENCE | |
long long | BY REFERENCE | BY REFERENCE | |
float | BY REFERENCE | BY REFERENCE | |
double | BY REFERENCE | BY REFERENCE | |
char | BY REFERENCE | BY REFERENCE | |
wchar | BY REFERENCE | BY REFERENCE | |
octet | BY REFERENCE | BY REFERENCE | |
Boolean | BY REFERENCE | BY REFERENCE | |
enum | BY REFERENCE | BY REFERENCE | |
string | サイズ指定あり | TEXT | TEXT |
サイズ指定なし | BY REFERENCE | BY REFERENCE | |
wstring | サイズ指定あり | TEXT | TEXT |
サイズ指定なし | BY REFERENCE | BY REFERENCE | |
sequence | BY REFERENCE | BY REFERENCE | |
struct | BY REFERENCE | BY REFERENCE | |
union | BY REFERENCE | BY REFERENCE | |
fixed | BY REFERENCE | BY REFERENCE | |
Object | BY REFERENCE | BY REFERENCE | |
TypeCode | BY REFERENCE | BY REFERENCE | |
注) TEXTはOOCOBOLの固定長テキストでNULL文字を含みません。
注意事項
サーバアプリケーションでのout, inoutパラメタ、復帰値、およびクライアントアプリケーションでのin,inoutパラメタでは、文字列型、シーケンス型、構造体、共用体でNULLオブジェクトを設定することができません。
固定長sequenceの場合、lengthにmaximumを超える値を設定した場合、maximumがlengthに設定されます。指定したlengthは無効になります。