インタフェースリポジトリには、ドメイン全体のサーバアプリケーションの情報が格納されています。また、IDLで定義されたモジュール名、インタフェース名、メソッド名、およびパラメタが階層構造で格納されます。
サーバアプリケーションの情報を獲得するために、以下のような(1)から(3)の手順で検索します。
(1)InterfaceDefオブジェクトリファレンスの獲得
インタフェースリポジトリからサーバアプリケーションの情報を獲得するためには、INTERFACEDEFオブジェクトのオブジェクトリファレンスが必要となります。このため、サーバアプリケーションのオブジェクト名をパラメタとして、ネーミングサービスからサーバアプリケーションのオブジェクトリファレンスを求め、その後、CORBA-OBJECT-GET-INTERFACEメソッドによりInterfaceDefオブジェクトリファレンスを獲得します。
DATA DIVISION.
WORKING-STORAGE SECTION.
01 STR-BUF PIC X(30).
01 COPY COSNAMING-NAMECOMPONENT IN CORBA REPLACING
COSNAMING-NAMECOMPONENT BY NAME-COMPONENT.
01 NAME-COMPONENT-A USAGE POINTER.
01 COPY COSNAMING-NAME IN CORBA REPLACING COSNAMING-NAME BY NAME.
01 NAME-A USAGE POINTER.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY INTF-INTF.
PROCEDURE DIVISION.
* オブジェクト名
MOVE FUNCTION LENG (STR-BUF) TO STRING-LENGTH.
MOVE "ODdemo::calculator" 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.
* Sequenceの要素数
MOVE 1 TO NUM.
* CosNamingのアクセス情報格納用のSequence領域獲得
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.
* CosNamingの要素設定
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.
* サーバアプリケーションのInterfaceDefを獲得 *
CALL "CORBA-OBJECT-GET-INTERFACE" USING
OBJ
ENV
INTF-INTF.(2)OperationDef オブジェクトリファレンスの獲得
CORBA-INTERFACEDEF-LOOKUP-NAMEメソッドにより、サーバアプリケーションが複数もっているメソッドから指定されたメソッドをインタフェースリポジトリから検索します。パラメタとしてサーバアプリケーションのメソッド名を指定します。結果として、指定したメソッド情報が格納されているOPERATIONDEFオブジェクトのオブジェクトリファレンスが返されます。
DATA DIVISION.
WORKING-STORAGE SECTION.
01 BUF USAGE POINTER.
01 COPY DEFINITIONKIND IN CORBA REPLACING CORBA-DEFINITIONKIND BY DK-FLAG.
01 COPY BOOLEAN IN CORBA REPLACING CORBA-BOOLEAN BY BL.
01 INTF-OPR USAGE POINTER.
PROCEDURE DIVISION.
* メソッド名の入力
DISPLAY " Please input method name==>".
ACCEPT BUF.
* オブジェクトリファレンスの取得 : Operation情報の取得
SET CORBA-DK-OPERATION OF DK-FLAG TO TRUE.
MOVE -1 TO NUM.
MOVE CORBA-FALSE TO BL.
CALL "CORBA-INTERFACEDEF-LOOKUP-NAME" USING
INTF-INTF
BUF
NUM
DK-FLAG
BL
ENV
INTF-OPR. (3)パラメタ情報の獲得
CORBA-OPERATIONDEF-DESCRIBEメソッドにより、サーバアプリケーションがもっているメソッドのパラメタの情報(パラメタの名前、個数、パラメタの型など)をインタフェースリポジトリから検索します。パラメタとして、OPERATIONDEFオブジェクトリファレンスを指定します。
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WORK-POINTER USAGE POINTER.
01 DESCRIPTION USAGE POINTER.
LINKAGE SECTION.
01 COPY CONTAINED IN CORBA REPLACING CORBA-CONTAINED BY TMP-CONT.
PROCEDURE DIVISION.
* パラメタ情報の構造体の取得
MOVE 1 TO NUM.
CALL "CORBA-SEQUENCE-ELEMENT-GET" USING
INTF-OPR
NUM
WORK-POINTER.
SET ADDRESS OF TMP-CONT TO WORK-POINTER.
CALL "CORBA-OPERATIONDEF-DESCRIBE" USING
TMP-CONT
ENV
DESCRIPTION.