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

3.4.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

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

-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

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

-n ODdemo::calculator

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


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

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



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

CORBA_ORB              orb;         /* ORB_initで取得したObject */
CORBA_BOA              boa;         /* ORB_BOA_initで取得したObject */
CORBA_Repository       intf_rep;   /* インタフェースリポジトリのオブジェクトリファレンス */
CORBA_InterfaceDef     intf;        /* インタフェースリポジトリのInterfaceDef */
FJ_ImplementationRep   impl_rep;   /* インプリメンテーションリポジトリのオブジェクトリファレンス */
CORBA_ImplementationDef impl;       /* インプリメンテーションリポジトリのImplementationDef */
CORBA_Object           new_obj;     /* 作成したオブジェクトリファレンス */
CORBA_ReferenceData    id;          /* ReferenceData格納域 */
CosNaming_NamingContext cos_naming; /* NamingServiceのオブジェクトリファレンス */
CosNaming_Name         name;        /* 検索した情報格納域 */
CORBA_Environment      env;         /* 例外情報 */

/* ObjectDirectorの初期化(省略) */
      : 

/* ReferenceDataの初期化 */
id._length  = 0;
id._maximum = 0;
id._buffer  = NULL;

/* インタフェースリポジトリのオブジェクトリファレンスの獲得 */
intf_rep = CORBA_ORB_resolve_initial_references(
        orb, 
        CORBA_ORB_ObjectId_LightInterfaceRepository, 
        &env ); 

/* InterfaceDefオブジェクトのオブジェクトリファレンスの獲得 */
intf = CORBA_Repository_lookup_id(
        intf_rep, 
        "...",  /* インタフェースリポジトリID */
        &env ); 

/* インプリメンテーションリポジトリのオブジェクトリファレンスの獲得 */
impl_rep = CORBA_ORB_resolve_initial_references(
        orb, 
        CORBA_ORB_ObjectId_ImplementationRepository, 
        &env ); 

/* ImplementationDefオブジェクトのオブジェクトリファレンスの獲得 */
impl = FJ_ImplementationRep_lookup_id(
        impl_rep, 
        "...",  /* インプリメンテーションリポジトリID */
        &env ); 

/* オブジェクトリファレンスの作成 */
new_obj = CORBA_BOA_create( boa, &id, intf, impl, &env ); 

/* NamingServiceのリファレンスを獲得 */
cos_naming = CORBA_ORB_resolve_initial_references(
    orb,
    CORBA_ORB_ObjectId_NameService, 
    &env); 

name._length = name._maximum = 1;          /* オブジェクト名の数 */
name._buffer = &name_component;            /* オブジェクト名格納域 */
name_component.id = "ODdemo::calculator";  /* オブジェクト名 */
name_component.kind = "";                  /* オブジェクトのタイプ */

/* ネーミングサービスへの登録 */
CosNaming_NamingContext_bind (cos_naming, &name, new_obj, &env );

注意

CORBA_BOA_create()呼出し時にインプリメンテーションリポジトリに定義されているデフォルトコード系でオブジェクトリファレンスを作成します。デフォルトコード系は、OD_impl_inst/OD_set_envコマンドで設定します。