CORBAサーバントのネームサービスへの登録
CORBAサーバントのネームサービスへの登録する場合には、NameServerのrootContextに名前付きで登録する方法とrootContextに独自のNamingContextを生成して登録するという2つの方法がある。
rootContextに登録する場合
- CORBA_ORB_resolve_initial_references(orb, "NameService", env); によりNameServerのrootContextを取得
- objectName = CosNaming_Name__alloc(); 名前用のCosNaming_Name構造体を用意する。
- objectName->_buffer = CosNaming_Name_allocbuf(1); 名前用のバッファ用意する。
- objectName->_length = objectName->_maximum = 1; 名前用のバッファの長さは 1。
- objectName->_buffer[0].id = "Echo";
- objectName->_buffer[0].kind = "Object"; でIDとKindをセット
- CosNaming_NamingContext_bind(rootContext, objectName, obj, env); CORBAオブジェクトを登録。この時、すでに、同じ名前でNameServerに登録済みの場合には、ex_CosNaming_NamingContext_AlreadyBoundの例外が発生する。
- ex_CosNaming_NamingContext_AlreadyBoundが発生した場合には、CosNaming_NamingContext_rebind関数にて上書きする。
独自のNamingContextを生成して登録する場合
- CORBA_ORB_resolve_initial_references(orb, "NameService", env); によりNameServerのrootContextを取得
- contextName= CosNaming_Name__alloc(); 独自のNamingContext用のCosNaming_Name構造体を用意する。
- contextName->_buffer = CosNaming_Name_allocbuf(1); NamingContext用のバッファ用意する。
- contextName->_length =contextName->_maximum = 1; NamingContext用のバッファの長さは 1。
- contextName->_buffer[0].id = "test";
- contextName->_buffer[0].kind = "my_context"; でIDとKindをセット
- CosNaming_NamingContext_bind_new_context関数で新規NamingContextを登録。このとき既に同じNamingContextが生成済みの場合に、ex_CosNaming_NamingContext_AlreadyBoundが発生するのでCosNaming_NamingContext_resolve関数でNamingContextを取得
- あとは、必要なだけNamingContextの階層を作成して、名前を登録する。上記の場合には、ex_CosNaming_NamingContext_AlreadyBoundが発生する可能性があるが、NameServerが拡張実装されていれば、NamingContextの配列を2以上でセットし、CosNaming_NamingContext_rebind関数を使って強制的に上書き登録をすることができる。RtORBのNameServiceでは、この関数をサポートしている。