CORBA-OBJECT-CREATE-REQUESTメソッドにより、リクエストオブジェクトを作成します。リクエストオブジェクトに対して、サーバオブジェクトのオブジェクトリファレンス、NVListオブジェクトリファレンス、後述するNamedValueと呼ぶサーバの処理結果を格納する領域を指定します。この結果として、リクエストオブジェクトのオブジェクトリファレンスが返されます。
DATA DIVISION.
WORKING-STORAGE SECTION.
01 COPY CONTEXT IN CORBA REPLACING CORBA-CONTEXT BY CTX.
01 COPY REQUEST IN CORBA REPLACING CORBA-REQUEST BY REQ.
01 COPY NAMEDVALUE IN CORBA REPLACING CORBA-NAMEDVALUE BY RESULT.
PROCEDURE DIVISION.
MOVE FUNCTION ADDR(RESULT) TO PARAM-POINTER.
MOVE "calculate" TO STR-BUF.
MOVE FUNCTION LENG (STR-BUF) TO STRING-LENGTH.
CALL "CORBA-STRING-SET" USING
STRING-POINTER
STRING-LENGTH
STR-BUF.
SET CORBA-OUT-LIST-MEMORY OF FLAG TO TRUE.
CALL "CORBA-OBJECT-CREATE-REQUEST" USING
OBJ
CTX
STRING-POINTER
ARG-LIST
PARAM-POINTER
REQ
FLAG
ENV
RET-VAL.NamedValueは、サーバの処理結果を格納するための領域であり、以下のように定義されています。
IDLファイルでの定義を以下に示します。
module CORBA {
typedef string Identifier;
enum Flags{
ARG_IN,
ARG_OUT,
ARG_INOUT,
OUT_LIST_MEMORY,
IN_COPY_VALUE,
INV_NO_RESPONSE,
INV_TERM_ON_ERR,
RESP_NO_WAIT,
DEPENDENT_LIST,
CTX_RESTRICT_SCOPE,
CTX_DELETE_DESCENDENTS
};
struct NamedValue {
Identifier name; // パラメタの名前
any argument; // パラメタの値
long len; // パラメタの長さ
Flags arg_modes; // パラメタの引き渡し方法(in,out,inout)
};
};COBOL登録集を以下に示します。
* NamedValue構造体
CORBA-NAMED-VALUE.
* パラメタの名前
07 NAME USAGE POINTER.
* パラメタの値
07 ARGUMENT.
09 ANY-TYPE USAGE POINTER.
09 ANY-VALUE USAGE POINTER.
* パラメタの長さ
07 LEN PIC S9(9) COMP-5.
* パラメタの引き渡し方法(in,out,inout)
07 ARG-MODES PIC 9(9) COMP-5.
88 CORBA-ARG-IN VALUE 1.
88 CORBA-ARG-OUT VALUE 2.
88 CORBA-ARG-INOUT VALUE 4.
88 CORBA-OUT-LIST-MEMORY VALUE 8.
88 CORBA-IN-COPY-VALUE VALUE 16.
88 CORBA-INV-NO-RESPONSE VALUE 32.
88 CORBA-INV-TERM-ON-ERR VALUE 64.
88 CORBA-RESP-NO-WAIT VALUE 128.
88 CORBA-DEPENDENT-LIST VALUE 256.
88 CORBA-CTX-RESTRICT-SCOPE VALUE 512.
88 CORBA-CTX-DELETE-DESCENDENTS VALUE 1024.