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

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コマンドで行います。