作成したサーバアプリケーションを他のアプリケーションからオブジェクトとしてアクセスできるようにするために、そのオブジェクトを識別するためのオブジェクトリファレンスを作成します。同時に作成したオブジェクトリファレンスをネーミングサービスに登録します。
オブジェクトを作成する方法として以下の方法があります。
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でオブジェクトリファレンスを登録します
ネーミングサービスに登録するオブジェクトに対してコード系SJISを設定します。
ネーミングサービスに登録するオブジェクト名を指定します。
ネーミングサービスへの登録
OD_or_adm -c IDL:ODdemo/calculator:1.0 -L EUC -n ODdemo::calculator
指定されたインタフェースリポジトリIDでオブジェクトリファレンスを登録します
ネーミングサービスに登録するオブジェクトに対してコード系EUCを設定します。
ネーミングサービスに登録するオブジェクト名を指定します。
■サーバアプリケーションで作成する方法
以下の流れで処理を行います。
プログラミングの例を以下に示します。
CORBA::ORB_ptr orb; // ORB_initで取得したObject CORBA::BOA_ptr boa; // ORB::BOA__initで取得したObject CORBA::Repository_ptr intf_rep; // インタフェースリポジトリのオブジェクトリファレンス CORBA::InterfaceDef_ptr intf; // インタフェースリポジトリのInterfaceDef FJ::ImplementationRep_ptr impl_rep; // インプリメンテーションリポジトリのオブジェクトリファレンス CORBA::ImplementationDef_ptr impl; // インプリメンテーションリポジトリのImplementationDef CORBA::Object_ptr new_obj; // 作成したオブジェクトリファレンス CORBA::ReferenceData id; // ReferenceData格納域 CORBA_Environment *env = new CORBA::Environment(); // 例外情報 // ObjectDirectorの初期化(省略) : // インタフェースリポジトリのオブジェクトリファレンスの獲得 intf_rep = orb->resolve_initial_references( CORBA_ORB_ObjectId_LightInterfaceRepository, *env ); // InterfaceDefオブジェクトのオブジェクトリファレンスの獲得 intf = intf_rep->lookup_id( "...", // インタフェースリポジトリID &env ); // インプリメンテーションリポジトリのオブジェクトリファレンスの獲得 impl_rep = orb->resolve_initial_references( CORBA_ORB_ObjectId_ImplementationRepository, *env ); // ImplementationDefオブジェクトのオブジェクトリファレンスの獲得 impl = impl_rep->lookup_id( "...", // インプリメンテーションリポジトリID *env ); // オブジェクトリファレンスの作成 new_obj = boa->create( id, intf, impl , *env ); CORBA::Object_ptr obj; // NamingServiceのオブジェクトリファレンス // NamingServiceのオブジェクトリファレンス獲得 obj = orb->resolve_initial_references( CORBA_ORB_ObjectId_NameService, *env ); // NamingContextクラスへの変換 CosNaming::NamingContext_ptr cos_naming = CosNaming::NamingContext::_narrow( obj ); CosNaming::Name name; // CosNaming::Nameのインスタンス // オブジェクト名 name[0]->id = (const CORBA::Char *)"ODdemo::calculator"; // オブジェクトのタイプ name[0]->kind = (const CORBA::Char *)""; // サーバアプリケーションのオブジェクトリファレンスを登録 cos_naming-> bind( name, obj, *env );
注意
CORBA::BOA::create関数呼出し時に、インプリメンテーションリポジトリに定義されているデフォルトコード系でオブジェクトリファレンスを作成します。デフォルトコード系は、OD_impl_inst/OD_set_envコマンドで設定します。