Interstage Application Server アプリケーション作成ガイド (CORBAサービス編)
目次 索引 前ページ次ページ

第5章 アプリケーションの開発(C++言語)> 5.4 サーバアプリケーションの登録

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

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

注)POAを使用してサーバアプリケーションを作成する場合は、環境設定を行う必要があります。詳細については、“POA使用方法例”を参照してください。

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

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


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

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


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

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

 -c IDL:ODdemo/calculator:1.0
 指定されたインタフェースリポジトリIDでオブジェクトリファレンスを登録します
 -L SJIS
 -L EUC
 ネーミングサービスに登録するオブジェクトに対してコード系EUCを設定します。
 -n ODdemo::calculator
 ネーミングサービスに登録するオブジェクト名を指定します。

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

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

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

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


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005