CORBAサーバントのネームサービスへの
Simple Wiki Based Contents Management System
ソフトウェア関連 >> ライブラリ >> RtORBについて >> RtORBの動作について >> CORBAサーバントのネームサービスへの

CORBAサーバントのネームサービスへの登録

CORBAサーバントのネームサービスへの登録する場合には、NameServerのrootContextに名前付きで登録する方法とrootContextに独自のNamingContextを生成して登録するという2つの方法がある。

rootContextに登録する場合

  1. CORBA_ORB_resolve_initial_references(orb, "NameService", env); によりNameServerのrootContextを取得
  2. objectName = CosNaming_Name__alloc(); 名前用のCosNaming_Name構造体を用意する。
  3. objectName->_buffer = CosNaming_Name_allocbuf(1); 名前用のバッファ用意する。
  4. objectName->_length = objectName->_maximum = 1; 名前用のバッファの長さは 1。
  5. objectName->_buffer[0].id = "Echo";
  6. objectName->_buffer[0].kind = "Object";  でIDとKindをセット
  7. CosNaming_NamingContext_bind(rootContext, objectName, obj, env); CORBAオブジェクトを登録。この時、すでに、同じ名前でNameServerに登録済みの場合には、ex_CosNaming_NamingContext_AlreadyBoundの例外が発生する。
  8. ex_CosNaming_NamingContext_AlreadyBoundが発生した場合には、CosNaming_NamingContext_rebind関数にて上書きする。

独自のNamingContextを生成して登録する場合

  1. CORBA_ORB_resolve_initial_references(orb, "NameService", env); によりNameServerのrootContextを取得
  2. contextName= CosNaming_Name__alloc(); 独自のNamingContext用のCosNaming_Name構造体を用意する。
  3. contextName->_buffer = CosNaming_Name_allocbuf(1); NamingContext用のバッファ用意する。
  4. contextName->_length =contextName->_maximum = 1; NamingContext用のバッファの長さは 1。
  5. contextName->_buffer[0].id = "test";
  6. contextName->_buffer[0].kind = "my_context"; でIDとKindをセット
  7. CosNaming_NamingContext_bind_new_context関数で新規NamingContextを登録。このとき既に同じNamingContextが生成済みの場合に、ex_CosNaming_NamingContext_AlreadyBoundが発生するのでCosNaming_NamingContext_resolve関数でNamingContextを取得
  8. あとは、必要なだけNamingContextの階層を作成して、名前を登録する。上記の場合には、ex_CosNaming_NamingContext_AlreadyBoundが発生する可能性があるが、NameServerが拡張実装されていれば、NamingContextの配列を2以上でセットし、CosNaming_NamingContext_rebind関数を使って強制的に上書き登録をすることができる。RtORBのNameServiceでは、この関数をサポートしている。