#include "BankImpl.h" #include "CosNaming_c.hh" #include "CosNamingExt_c.hh" // USE_STD_NS is a define setup by VisiBroker to use the std namespace USE_STD_NS int main(int argc, char* const* argv) { try { // ORB の初期化 CORBA::ORB_var orb = CORBA::ORB_init(argc, argv); // RootPOA のオブジェクトリファレンスを取得 CORBA::Object_var obj = orb->resolve_initial_references("RootPOA"); PortableServer::POA_var rootPOA = PortableServer::POA::_narrow(obj); // サーバントの生成 AccountImpl accountServant(10000.0,"NAGATA"); // RootPOA 上でサーバントの活性化 rootPOA->activate_object(&accountServant); // POA マネージャの取得 PortableServer::POAManager_var poa_manager = rootPOA->the_POAManager(); // POA マネージャの活性化 poa_manager->activate(); // サーバントからオブジェクトリファレンスを取得 CORBA::Object_var reference = rootPOA->servant_to_reference(&accountServant); // ネーミングサービスのルートコンテキストのリファレンスを取得 obj = orb->resolve_initial_references("NameService"); // ルートコンテキストのリファレンスを NamingContext 型に変換 CosNaming::NamingContext_var rootCtx = CosNaming::NamingContext::_narrow(obj); // 名前を作成する CosNaming::Name nameCtx; nameCtx.length(1); nameCtx[0].id = CORBA::string_dup("Bank"); nameCtx[0].kind = CORBA::string_dup(""); CosNaming::NamingContext_var bankCtx; try{ // ネーミングコンテキストを取得する obj = rootCtx->resolve(nameCtx); bankCtx = CosNaming::NamingContext::_narrow(obj); }catch(const CosNaming::NamingContext::NotFound& e){ cout << "Exception: " << e << endl; // ネーミングコンテキストが存在しない場合 // 作成した名前でネーミングコンテキストを登録 bankCtx = rootCtx->bind_new_context(nameCtx); } // 登録する名前を作成する CosNaming::Name nameObj; nameObj.length(1); nameObj[0].id = CORBA::string_dup("Nagata"); nameObj[0].kind = CORBA::string_dup("Account"); try{ // 作成した名前で Account のオブジェクトリファレンスを登録 bankCtx->bind(nameObj,reference); }catch(const CosNaming::NamingContext::AlreadyBound& e){ // 既にオブジェクトリファレンスが登録されている場合 // 再度、作成した名前でオブジェクトリファレンスを登録 cout << "Exception: " << e << endl; bankCtx->rebind(nameObj, reference); } // クライアントからのリクエストに待機 cout << "Server is ready" << endl; orb->run(); } catch(const CORBA::Exception& e) { cerr << e << endl; return 1; } return 0; }