作成したサーバアプリケーションを他のアプリケーションからオブジェクトとしてアクセスできるようにするために、そのオブジェクトを識別するためのオブジェクトリファレンスを作成します。同時に作成したオブジェクトリファレンスをネーミングサービスに登録します。
オブジェクトを作成する方法として以下の方法があります。
OD_or_admコマンドを用います。
サーバアプリケーションでBOAの機能を使用してオブジェクトリファレンスを作成し、ネーミングサービスに登録します。
OD_or_admコマンドは、オブジェクトリファレンス作成後、ネーミングサービスに登録します。OD_or_admコマンドでの登録例と指定する情報を以下に示します。
![]()
ネーミングサービスへの登録
OD_or_adm -c IDL:ODdemo/calculator:1.0 -L SJIS -n ODdemo::calculator |
指定されたインタフェースリポジトリIDでオブジェクトリファレンスを登録します
ネーミングサービスに登録するオブジェクトに対してコード系を指定します。
ネーミングサービスに登録するオブジェクト名を指定します。
![]()
ネーミングサービスへの登録
OD_or_adm -c IDL:ODdemo/calculator:1.0 -L EUC -n ODdemo::calculator |
指定されたインタフェースリポジトリIDでオブジェクトリファレンスを登録します
ネーミングサービスに登録するオブジェクトに対してコード系を指定します。
ネーミングサービスに登録するオブジェクト名を指定します。
■ サーバアプリケーションで作成する方法
以下の流れで処理を行います。

以下にプログラミングの例を示します。
*ORB-INITで取得したObject
01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB.
*ORB-BOA-INITで取得したObject
01 COPY BOA IN CORBA REPLACING CORBA-BOA BY BOA.
*インタフェースリポジトリのオブジェクトリファレンス
01 COPY REPOSITORYID IN CORBA REPLACING CORBA-REPOSITORYID BY INTF-REP.
*インプリメンテーションリポジトリのオブジェクトリファレンス
01 COPY FJ-IMPLEMENTATIONDEF IN CORBA REPLACING FJ-IMPLEMENTATIONDEF BY IMPL-REP.
*インタフェースリポジトリのInterfaceDef
01 COPY INTERFACEDEF IN CORBA REPLACING CORBA-INTERFACEDEF BY INTF.
*インプリメンテーションリポジトリのImplementationDef
01 COPY IMPLEMENTATIONDEF IN CORBA REPLACING CORBA-IMPLEMENTATIONDEF BY IMPL.
*ReferenceData格納域
01 COPY REFERENCEDATA IN CORBA REPLACING CORBA-REFERENCEDATA BY R-ID.
*その他の変数
01 TEMP-BUF USAGE POINTER.
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY STRING-LENGTH.
01 INTF-INTF-A PIC X(25) VALUE "IDL:ODdemo/calculator:1.0".
01 IMPL-INTF-A PIC X(25) VALUE "IDL:ODdemo/calculator:1.0".
01 R-ID-P USAGE POINTER.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY NEW-OBJ.
01 NAMESERVICEID USAGE POINTER.
01 COPY COSNAMING-NAMINGCONTEXT IN CORBA REPLACING
COSNAMING-NAMINGCONTEXT BY COS-NAMING.
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 ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY NUM.
01 STR-BUF PIC X(64).
*ObjectDiretorの初期化(省略)
:
*インタフェースリポジトリのオブジェクトリファレンスの獲得
MOVE FUNCTION LENG (CORBA-ORB-OBJECTID-LIGHTINTFR) TO STRING-LENGTH.
CALL "CORBA-STRING-SET" USING
TEMP-BUF
STRING-LENGTH
CORBA-ORB-OBJECTID-LIGHTINTFR.
CALL "CORBA-ORB-RESOLVE-INITIAL-REFERENCES" USING
ORB
TEMP-BUF
ENV
INTF-REP.
CALL "CORBA-FREE" USING TEMP-BUF.
*InterfaceDefオブジェクトリファレンスの獲得
*INTF-INTF-A : インプリメンテーションリポジトリID
MOVE FUNCTION LENG (INTF-INTF-A) TO STRING-LENGTH.
CALL "CORBA-STRING-SET" USING
TEMP-BUF
STRING-LENGTH
INTF-INTF-A.
CALL "CORBA-REPOSITORY-LOOKUP-ID" USING
INTF-REP
TEMP-BUF
ENV
INTF.
CALL "CORBA-FREE" USING TEMP-BUF.
*インプリメンテーションリポジトリのオブジェクトリファレンスの獲得
MOVE FUNCTION LENG (CORBA-ORB-OBJECTID-IMPLREP) TO STRING-LENGTH.
CALL "CORBA-STRING-SET" USING
TEMP-BUF
STRING-LENGTH
CORBA-ORB-OBJECTID-IMPLREP.
CALL "CORBA-ORB-RESOLVE-INITIAL-REFERENCES" USING
ORB
TEMP-BUF
ENV
IMPL-REP.
CALL "CORBA-FREE" USING TEMP-BUF.
*ImplementationDefオブジェクトのオブジェクトリファレンスの獲得
MOVE FUNCTION LENG (IMPL-INTF-A) TO STRING-LENGTH.
CALL "CORBA-STRING-SET" USING
TEMP-BUF
STRING-LENGTH
IMPL-INTF-A.
CALL "FJ-IMPLEMENTATIONREP-LOOKUP-ID" USING
IMPL-REP
TEMP-BUF
ENV
IMPL.
CALL "CORBA-FREE" USING TEMP-BUF.
* オブジェクトリファレンスの作成
MOVE FUNCTION ADDR(R-ID) TO R-ID-P.
CALL "CORBA-BOA-CREATE" USING
BOA
R-ID-P
INTF
IMPL
ENV
NEW-OBJ.
* NamingServiceのObjectIDの設定
MOVE FUNCTION LENG ( CORBA-ORB-OBJECTID-NAMESERVICE ) TO STRING-LENGTH.
CALL "CORBA-STRING-SET" USING
NAMESERVICEID
STRING-LENGTH
CORBA-ORB-OBJECTID-NAMESERVICE.
* NamingServiceのオブジェクトリファレンス獲得
CALL "CORBA-ORB-RESOLVE-INITIAL-REFERENCES" USING
ORB
NAMESERVICEID
ENV
COS-NAMING.
* NAMESERVICEIDに格納した領域の解放
CALL "CORBA-FREE" USING NAMESERVICEID.
* オブジェクト名の設定
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.
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-BIND" USING
COS-NAMING
NAME
NEW-OBJ
ENV.注) CORBA-BOA-CREATE関数呼出し時にインプリメンテーションリポジトリに定義されているデフォルトコード系でオブジェクトリファレンスを作成します。デフォルトコード系の設定はOD_impl_instまたはOD_set_envコマンドで行います。