Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
第11章 CORBAアプリケーションの高度な使い方 | > 11.1 Factory |
Factoryインタフェースによるオブジェクトリファレンスの作成方法について説明します。
インタフェース情報およびインプリメンテーション情報を獲得し、オブジェクトリファレンスを作成します。
ここでは、main関数でインプリメンテーション情報/インタフェース情報を獲得する例を示します。
static CORBA::ORB_ptr orb; static CORBA::BOA_ptr boa; static CORBA::Repository_ptr intf_rep; static FJ::ImplementationRep_ptr impl_rep; static CORBA::InterfaceDef_ptr intf1; static CORBA::ImplementationDef_ptr impl; static CORBA::Object_ptr o; static CORBA::Environment env; CORBA::ReferenceData id; int main( int argc, char *argv[] ) { int current_argc = argc; char buf[128]; // 初期化処理 orb = CORBA::ORB_init( current_argc, argv, FJ_OM_ORBid, env ); boa = orb->BOA_init( current_argc, argv, CORBA_BOA_OAid, env ); // インプリメンテーション情報の獲得 o = orb->resolve_initial_references( CORBA_ORB_ObjectId_ImplementationRepository, env ); impl_rep = FJ::ImplementationRep::_narrow( o ); o = impl_rep->lookup_id( _IMPL_ODsample_factory, env ); impl = CORBA::ImplementationDef::_narrow( o ); // インタフェース情報の獲得 o = orb->resolve_initial_references( CORBA_ORB_ObjectId_LightInterfaceRepository, env ); intf_rep = CORBA::Repository::_narrow( o ); o = intf_rep->lookup_id( _INTF_ODsample_intf1, env ); intf1 = CORBA::InterfaceDef::_narrow( o ); // サーバの活性化 boa->impl_is_ready( impl, env ); }
前項で獲得したインプリメンテーション情報およびインタフェース情報を使用して、CORBA::BOA::create()でオブジェクトリファレンスを作成します。
// create_obj メソッドの実装 ODsample::intf1_ptr ODsample_factory_impl::create_obj( CORBA::Environment &env ) throw( CORBA::Exception ) { // BOA::create関数を使用して、オブジェクトリファレンスを作成します。 CORBA::Object_ptr new_obj = boa->create( id, intf1, impl, env ); ODsample::intf1_ptr fac = ODsample::intf1::_narrow( new_obj ); CORBA::release( new_obj ); return( fac ); }
ネーミングサービスにはFactoryインタフェースのオブジェクトリファレンスを登録するため、OD_or_admコマンドを実行します。-cオプションではFactoryインタフェースのインタフェースリポジトリIDを指定します。
OD_or_adm -c IDL:ODsample/factory:1.0 -n ODsample::factory
目次
索引
![]() ![]() |