ページの先頭行へ戻る
Interstage Application Server V13.0.0 アプリケーション作成ガイド(CORBAサービス編)
FUJITSU Software

4.3.2 ネーミングサービスへの登録

作成したサーバアプリケーションを他のアプリケーションからオブジェクトとしてアクセスできるようにするために、そのオブジェクトを識別するためのオブジェクトリファレンスを作成します。同時に作成したオブジェクトリファレンスをネーミングサービスに登録します。
オブジェクトを作成する方法として以下の方法があります。


OD_or_admコマンドを使用する方法

OD_or_admコマンドは、オブジェクトリファレンス作成後、ネーミングサービスに登録します。
OD_or_admコマンドでの登録例と指定する情報を以下に示します。



ネーミングサービスへの登録

OD_or_adm -c IDL:ODdemo/calculator:1.0 -L SJIS -n ODdemo::calculator

-c IDL:ODdemo/calculator:1.0

指定されたインタフェースリポジトリIDでオブジェクトリファレンスを登録します

-L SJIS

ネーミングサービスに登録するオブジェクトに対してコード系SJISを設定します。

-n ODdemo::calculator

ネーミングサービスに登録するオブジェクト名を指定します。



ネーミングサービスへの登録

OD_or_adm -c IDL:ODdemo/calculator:1.0 -L EUC -n ODdemo::calculator

-c IDL:ODdemo/calculator:1.0

指定されたインタフェースリポジトリIDでオブジェクトリファレンスを登録します

-L EUC

ネーミングサービスに登録するオブジェクトに対してコード系EUCを設定します。

-n ODdemo::calculator

ネーミングサービスに登録するオブジェクト名を指定します。


サーバアプリケーションで作成する方法

以下の流れで処理を行います。



プログラミングの例を以下に示します。

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コマンドで設定します。