(1)IDLマッピング
IDL言語で属性宣言(attribute)を指定した場合、オブジェクトのデータ設定/取得を行う関数(関数名は“モジュール名-インタフェース名--set(get)-変数名”。以降、データ設定関数/データ設定関数と呼ぶ)がIDLコンパイラで生成されます。
以降では、以下のIDL定義例をもとに説明します。
module ODsample{ interface attrtest{ attribute long para1; attribute string para2; readonly attribute long para3; }; };
IDENTIFICATION DIVISION. PROGRAM-ID. "ODSAMPLE-ATTRTEST--SET-PARA1". ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. COPY CONST IN CORBA. *オブジェクトリファレンス 01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB. * 設定値 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY NUM *例外情報 01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.
(2)クライアントアプリケーションで扱うパラメタ
データ設定関数でデータ設定に使用するデータ域はinパラメタと同様に扱われます。また、データ取得関数でデータ取得に使用するデータ域は復帰値と同様に扱われます。このため、可変長データでは、その領域が不要になった時点でCORBA-FREE関数で領域を解放する必要があります。
.IDENTIFICATION DIVISION. PROGRAM-ID. "ODSAMPLE-ATTRTEST". ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. COPY CONST IN CORBA. 01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB. 01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ. 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY NUM. 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY RET-NUM. 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY LSIZE. 01 STR1 USAGE POINTER. 01 STR-WORK PIC X(30). 01 RET-STR1 USAGE POINTER. 01 ERR-MSG PIC X(30). 01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV. PROCEDURE DIVISION. MAIN. MOVE 2 TO NUM. CALL "ODSAMPLE-ATTRTEST--SET-PARA1" USING OBJ NUM ENV. CALL "ODSAMPLE-ATTRTEST--GET-PARA1" USING OBJ ENV RET-NUM. DISPLAY "ODsample_attrtest_get_para1 returns " RET-NUM. MOVE "test" TO STR-WORK. MOVE 5 TO LSIZE. CALL "CORBA-STRING-SET" USING STR1 LSIZE STR-WORK. CALL "ODSAMPLE-ATTRTEST--SET-PARA2" USING OBJ STR1 ENV. CALL "ODSAMPLE-ATTRTEST--GET-PARA2" USING OBJ ENV RET-STR1. MOVE "ODsample_attrtest__get_para2" TO ERR-MSG. PERFORM ENV-CHECK. DISPLAY "ODsample_attrtest_get_para2 returns " RET-STR1. CALL "CORBA-FREE" USING RET-STR1. CALL "ODSAMPLE-ATTRTEST--GET-PARA3" USING OBJ ENV RET-NUM. DISPLAY "ODsample_attrtest_get_para3 returns " RET-NUM. MAIN-END. 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 : " MESS 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 : " MESS 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.
(3)サーバアプリケーションで扱うパラメタ
データ設定関数でデータ設定に使用するデータ域はinパラメタと同様に扱われ、スケルトンで自動的に獲得/解放されます。データ取得関数でデータ取得に使用するデータ域は復帰値と同様に扱われます。可変長データではデータ域獲得関数で領域獲得する必要があります。獲得した領域はスケルトンで自動的に解放されます。
関数間でデータを受け渡すにはGLOBAL句で変数を定義します(以降の例では変数GNUM,GSTRを使用)。
IDENTIFICATION DIVISION. PROGRAM-ID. "ODSAMPLE-ATTRTEST-GET-PARA1". ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. COPY CONST IN CORBA. LINKAGE SECTION. 01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB. 01 ENV. 03 MAJOR PIC 9(9) COMP-5. 88 CORBA-NO-EXCEPTION VALUE 0. 88 CORBA-USER-EXCEPTION VALUE 1. 88 CORBA-SYSTEM-EXCEPTION VALUE 2. 03 IDL-ID USAGE POINTER. 03 MINOR PIC 9(9) COMP-5. 03 IDL-STATUS PIC 9(9) COMP-5. 03 PARAM USAGE POINTER. 03 MAGIC PIC 9(9) COMP-5. 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY RET-NUM. PROCEDURE DIVISION DIVISION USING OBJ ENV. MAIN. MOVE GNUM TO RET-NUM. MAIN-END. END PROGRAM "ODSAMPLE-ATTRTEST--GET-PARA1". IDENTIFICATION DIVISION. PROGRAM-ID. "ODSAMPLE-ATTRTEST--SET-PARA1". ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. COPY CONST IN CORBA. LINKAGE SECTION. 01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB. 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY NUM. 01 ENV. 03 MAJOR PIC 9(9) COMP-5. 88 CORBA-NO-EXCEPTION VALUE 0. 88 CORBA-USER-EXCEPTION VALUE 1. 88 CORBA-SYSTEM-EXCEPTION VALUE 2. 03 IDL-ID USAGE POINTER. 03 MINOR PIC 9(9) COMP-5. 03 IDL-STATUS PIC 9(9) COMP-5. 03 PARAM USAGE POINTER. 03 MAGIC PIC 9(9) COMP-5. PROCEDURE DIVISION DIVISION USING OBJ NUM ENV. MAIN. MOVE NUM TO GNUM. MAIN-END. END PROGRAM "ODSAMPLE-ATTRTEST--SET-PARA1". IDENTIFICATION DIVISION. PROGRAM-ID. "ODSAMPLE-ATTRTEST--GET-PARA2". ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. COPY CONST IN CORBA. 01 WSTR USAGE IS POINTER. LINKAGE SECTION. 01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB. 01 ENV. 03 MAJOR PIC 9(9) COMP-5. 88 CORBA-NO-EXCEPTION VALUE 0. 88 CORBA-USER-EXCEPTION VALUE 1. 88 CORBA-SYSTEM-EXCEPTION VALUE 2. 03 IDL-ID USAGE POINTER. 03 MINOR PIC 9(9) COMP-5. 03 IDL-STATUS PIC 9(9) COMP-5. 03 PARAM USAGE POINTER. 03 MAGIC PIC 9(9) COMP-5. 01 STR1 USAGE IS POINTER. PROCEDURE DIVISION DIVISION USING OBJ ENV STR1. MAIN. MOVE GSTR TO STR1. MAIN-END. END PROGRAM "ODSAMPLE-ATTRTEST--GET-PARA2". IDENTIFICATION DIVISION. PROGRAM-ID. "ODSAMPLE-ATTRTEST--SET-PARA2". ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. COPY CONST IN CORBA. LINKAGE SECTION. 01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB. 01 STR1 USAGE IS POINTER. 01 ENV. 03 MAJOR PIC 9(9) COMP-5. 88 CORBA-NO-EXCEPTION VALUE 0. 88 CORBA-USER-EXCEPTION VALUE 1. 88 CORBA-SYSTEM-EXCEPTION VALUE 2. 03 IDL-ID USAGE POINTER. 03 MINOR PIC 9(9) COMP-5. 03 IDL-STATUS PIC 9(9) COMP-5. 03 PARAM USAGE POINTER. 03 MAGIC PIC 9(9) COMP-5. PROCEDURE DIVISION DIVISION USING OBJ STR1 ENV. MOVE STR1 TO GSTR MAIN-END. END PROGRAM "ODSAMPLE-ATTRTEST--SET-PARA2". IDENTIFICATION DIVISION. PROGRAM-ID. "ODSAMPLE-ATTRTEST--GET-PARA3". ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. COPY CONST IN CORBA. LINKAGE SECTION. 01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB. 01 ENV. 03 MAJOR PIC 9(9) COMP-5. 88 CORBA-NO-EXCEPTION VALUE 0. 88 CORBA-USER-EXCEPTION VALUE 1. 88 CORBA-SYSTEM-EXCEPTION VALUE 2. 03 IDL-ID USAGE POINTER. 03 MINOR PIC 9(9) COMP-5. 03 IDL-STATUS PIC 9(9) COMP-5. 03 PARAM USAGE POINTER. 03 MAGIC PIC 9(9) COMP-5. 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY RET-NUM. PROCEDURE DIVISION DIVISION USING OBJ ENV RET-NUM. MAIN. MOVE GNUM TO RET-NUM. MAIN-END. END PROGRAM "ODSAMPLE-ATTRTEST--GET-PARA3".