int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) { try { // Initialize orb CORBA::ORB_var orb = CORBA::ORB_init( argc, argv ); //Get reference to Root POA CORBA::Object_var obj = orb->resolve_initial_references( "RootPOA" ); PortableServer::POA_var poa = PortableServer::POA::_narrow( obj.in() ); // Activate POA Manager PortableServer::POAManager_var mgr = poa->the_POAManager(); mgr->activate(); // Find the Naming Service obj = orb->resolve_initial_references("NameService"); CosNaming::NamingContext_var root = CosNaming::NamingContext::_narrow(obj.in()); if (CORBA::is_nil(root.in())) { std::cerr << "Nil Naming Context reference" << std::endl; return 1; } // Bind the example Naming Context, if necessary CosNaming::Name name; name.length( 1 ); name[0].id = CORBA::string_dup("example"); try { obj = root->resolve(name); } catch(const CosNaming::NamingContext::NotFound&) { CosNaming::NamingContext_var dummy = root->bind_new_context(name); } // Bind the Messenger object name.length(2); name[1].id = CORBA::string_dup("Messenger"); // Create an object PortableServer::Servant_var<Messenger_i> servant = new Messenger_i; PortableServer::ObjectId_var oid = poa->activate_object(servant.in()); obj = poa->id_to_reference(oid.in()); Messenger_var messenger = Messenger::_narrow(obj.in()); root->rebind(name, messenger.in()); std::cout << "Messenger object bound in Naming Service" << std::endl; // Accept requests orb->run(); orb->destroy(); } catch(const CORBA::Exception& ex) { std::cerr << "server: Caught a CORBA::Exception: " << ex << std::endl; return 1; } return 0; }
ModelLoader_var hrp::getModelLoader(CosNaming::NamingContext_var cxt) { CosNaming::Name ncName; ncName.length(1); ncName[0].id = CORBA::string_dup("ModelLoader"); ncName[0].kind = CORBA::string_dup(""); ModelLoader_var modelLoader = NULL; try { modelLoader = ModelLoader::_narrow(cxt->resolve(ncName)); modelLoader->_non_existent(); } catch(const CosNaming::NamingContext::NotFound &exc) { std::cerr << "ModelLoader not found: "; switch(exc.why) { case CosNaming::NamingContext::missing_node: std::cerr << "Missing Node" << std::endl; case CosNaming::NamingContext::not_context: std::cerr << "Not Context" << std::endl; break; case CosNaming::NamingContext::not_object: std::cerr << "Not Object" << std::endl; break; } modelLoader = ModelLoader::_nil(); } catch(CosNaming::NamingContext::CannotProceed &exc) { std::cerr << "Resolve ModelLoader CannotProceed" << std::endl; modelLoader = ModelLoader::_nil(); } catch(CosNaming::NamingContext::AlreadyBound &exc) { std::cerr << "Resolve ModelLoader InvalidName" << std::endl; modelLoader = ModelLoader::_nil(); } catch(...){ modelLoader = ModelLoader::_nil(); } return modelLoader; }
Web_Server::Iterator_Factory_ptr get_iterator (CORBA::ORB_ptr o) { CORBA::ORB_var orb = CORBA::ORB::_duplicate (o); // Get a reference to the Name Service. CORBA::Object_var obj = orb->resolve_initial_references ("NameService"); // Narrow to a Naming Context CosNaming::NamingContext_var nc = CosNaming::NamingContext::_narrow (obj.in ()); if (CORBA::is_nil (obj.in ())) { ACE_ERROR ((LM_ERROR, ACE_TEXT ("Nil reference to Name Service\n"))); return Web_Server::Iterator_Factory::_nil (); } // Create a name. CosNaming::Name name; name.length (1); name[0].id = CORBA::string_dup ("Iterator_Factory"); name[0].kind = CORBA::string_dup (""); obj = nc->resolve (name); Web_Server::Iterator_Factory_ptr factory = Web_Server::Iterator_Factory::_narrow (obj.in ()); return factory; }
bool CorbaNameService::isRegistered(const std::string& taskName) { if(CORBA::is_nil(orb)) { throw std::runtime_error("CorbaNameService::Error, called getTaskContext() without connection " ); } CosNaming::Name serverName; serverName.length(2); serverName[0].id = CORBA::string_dup("TaskContexts"); serverName[1].id = CORBA::string_dup( taskName.c_str() ); try { // Get object reference CORBA::Object_var task_object = rootContext->resolve(serverName); if(CORBA::is_nil(task_object)) return false; RTT::corba::CTaskContext_var mtask = RTT::corba::CTaskContext::_narrow (task_object.in ()); if ( CORBA::is_nil( mtask ) ) { return false; } // force connect to object. //this needs to be done. If not, we may return a ghost task CORBA::String_var nm = mtask->getName(); } catch (...) { return false; } return true; }
RTT::TaskContext* CorbaNameService::getTaskContext(const std::string& taskName) { if(CORBA::is_nil(orb)) { throw std::runtime_error("CorbaNameService::Error, called getTaskContext() without connection " ); } CosNaming::Name serverName; serverName.length(2); serverName[0].id = CORBA::string_dup("TaskContexts"); serverName[1].id = CORBA::string_dup( taskName.c_str() ); // Get object reference CORBA::Object_var task_object = rootContext->resolve(serverName); CORBA::String_var s = orb->object_to_string(task_object); RTT::TaskContext *ret = nullptr; try { ret = RTT::corba::TaskContextProxy::Create(s.in(), true);; } catch (...) { std::cout << "Ghost " << taskName << std::endl; } return ret; }
void ApplicationWindow::resolveFactory(QString const& _name) { try { CosNaming::Name name; name.length(1); name[0].id = CORBA::string_dup(_name.latin1()); CosNotifyChannelAdmin::EventChannelFactory_ptr factory = server_.resolveName<CosNotifyChannelAdmin::EventChannelFactory>(name); EventChannelFactory * f = new EventChannelFactory(factory, listView_, this, _name); connect(timer_, SIGNAL(timeout()), f, SLOT(updateFactory())); } catch(CORBA::Exception& e) { std::ostringstream sstr; sstr << "CORBA exception: " << e << std::flush; QString error = sstr.str().c_str(); QMessageBox::warning(this, "Resolve EventChannelFactory", "Error resolving factory " + _name + ".\n" + error); } }
CosNaming::Name* VOmniORBHelper::nsPathToObjectName(const char* program, const char* object, int telescopenumber) throw(CORBA::SystemException) { std::ostringstream program_stream; if(telescopenumber!=-1) program_stream << program << telescopenumber; else program_stream << program; CosNaming::Name* name = new CosNaming::Name; name->length(3); (*name)[0].id = CORBA::string_dup(m_project.c_str()); (*name)[0].kind = CORBA::string_dup(""); (*name)[1].id = CORBA::string_dup(program_stream.str().c_str()); (*name)[1].kind = CORBA::string_dup("Program"); (*name)[2].id = CORBA::string_dup(object); (*name)[2].kind = CORBA::string_dup("Object"); return name; }
X_ptr checkCorbaServer(std::string n, CosNaming::NamingContext_var &cxt) { CosNaming::Name ncName; ncName.length(1); ncName[0].id = CORBA::string_dup(n.c_str()); ncName[0].kind = CORBA::string_dup(""); X_ptr srv = NULL; try { srv = X::_narrow(cxt->resolve(ncName)); } catch(const CosNaming::NamingContext::NotFound &exc) { std::cerr << n << " not found: "; switch(exc.why) { case CosNaming::NamingContext::missing_node: std::cerr << "Missing Node" << std::endl; case CosNaming::NamingContext::not_context: std::cerr << "Not Context" << std::endl; break; case CosNaming::NamingContext::not_object: std::cerr << "Not Object" << std::endl; break; } return (X_ptr)NULL; } catch(CosNaming::NamingContext::CannotProceed &exc) { std::cerr << "Resolve " << n << " CannotProceed" << std::endl; } catch(CosNaming::NamingContext::AlreadyBound &exc) { std::cerr << "Resolve " << n << " InvalidName" << std::endl; } return srv; }
/*! * @if jp * @brief ネームコンポーネントの文字列表現時の文字長を取得する * @else * @brief Get string length of the name component's string representation * @endif */ CORBA::ULong CorbaNaming::getNameLength(const CosNaming::Name& name) { CORBA::ULong slen = 0; for (CORBA::ULong i = 0; i < name.length(); ++i) { // Count string length of id(s) for (const char* id = name[i].id; *id; ++id) { // Escape character '/', '.', '\' will convert to "\/", "\.", "\\". if (*id == '/' || *id == '.' || *id == '\\') slen++; slen++; } // If kind exists, space for '.' is counted if (((const char*)(name[i].id ))[0] == '\0' || ((const char*)(name[i].kind))[0] != '\0') { slen++; } // Count string length of kind(s) for (const char* kind = name[i].kind; *kind; kind++) { if (*kind == '/' || *kind == '.' || *kind == '\\') slen++; slen++; } // Space for '/' or '\0' slen++; } return slen; }
/*! * @if jp * @brief ネームコンポーネントの文字列表現を取得する * @else * @brief Get string representation of name component * @endif */ void CorbaNaming::nameToString(const CosNaming::Name& name, char* string_name, CORBA::ULong slen) { char* s = string_name; for (CORBA::ULong i = 0; i < name.length(); ++i) { // Copy id to string_name for (const char* id = name[i].id; *id != '\0'; ++id) { if (*id == '/' || *id == '.' || *id == '\\') *s++ = '\\'; *s++ = *id; } // '.' if there is a kind, or no id if (((const char*)(name[i].id ))[0] == '\0' || ((const char*)(name[i].kind))[0] != '\0') *s++ = '.'; // Copy kind to string_name for (const char* kind = name[i].kind; *kind != '\0'; ++kind) { if (*kind == '/' || *kind == '.' || *kind == '\\') *s++ = '\\'; *s++ = *kind; } // The end of string_name will be overwritten by '\0' *s++ = '/'; } string_name[slen-1] = '\0'; }
void TAO_Hash_Naming_Context::bind_context (const CosNaming::Name &n, CosNaming::NamingContext_ptr nc) { // Check to make sure this object didn't have <destroy> method // invoked on it. if (this->destroyed_) throw CORBA::OBJECT_NOT_EXIST (); // Do not allow binding of nil context reference. if (CORBA::is_nil (nc)) throw CORBA::BAD_PARAM (); // Get the length of the name. CORBA::ULong const name_len = n.length (); // Check for invalid name. if (name_len == 0) throw CosNaming::NamingContext::InvalidName(); // If we received compound name, resolve it to get the context in // which the binding should take place, then perform the binding on // target context. if (name_len > 1) { CosNaming::NamingContext_var context = this->get_context (n); CosNaming::Name simple_name; simple_name.length (1); simple_name[0] = n[name_len - 1]; try { context->bind_context (simple_name, nc); } catch (const CORBA::SystemException&) { throw CosNaming::NamingContext::CannotProceed( context.in (), simple_name); } } // If we received a simple name, we need to bind it in this context. else { ACE_WRITE_GUARD_THROW_EX (TAO_SYNCH_RW_MUTEX, ace_mon, this->lock_, CORBA::INTERNAL ()); // Try binding the name. int result = this->context_->bind (n[0].id, n[0].kind, nc, CosNaming::ncontext); if (result == 1) throw CosNaming::NamingContext::AlreadyBound(); // Something went wrong with the internal structure else if (result == -1) throw CORBA::INTERNAL (); } }
NotifyLogPlayer::~NotifyLogPlayer() { DBG(cout << "Destructing NotifyLogPlayer." << endl); delete pPushSupplier; try { if (own_) { CosNaming::Name n; n.length(1); n[0].id = CORBA::string_dup("EventChannel"); namingContext->unbind(n); } if (colocated_) initialNamingContext->unbind(channelFactoryName); } catch (const CORBA::Exception& e) { cerr << "Caught CORBA exception on unbind: " << e << endl; cerr << "Porbably the NameSevice went down while we run." << endl; } DBG(cout << "unbound objects from Name Sevice" << endl); if (colocated_) ec_->destroy(); }
void handle_sigint ( int signal ) { std::cout << "\nGot Crtl-C" << std::endl; std::cerr << "..... unbind in NameService" << std::endl; // // unbind in naming service // CORBA::Object_var obj; CosNaming::NamingContext_var nameService; char hostname[256]; gethostname(hostname, 256); CosNaming::Name name; name.length(3); name[0].id = CORBA::string_dup("Qedo"); name[0].kind = CORBA::string_dup(""); name[1].id = CORBA::string_dup("ComponentInstallation"); name[1].kind = CORBA::string_dup(""); name[2].id = CORBA::string_dup(hostname); name[2].kind = CORBA::string_dup(""); try { obj = orb->resolve_initial_references("NameService"); nameService = CosNaming::NamingContext::_narrow(obj.in()); nameService->unbind(name); } catch (const CORBA::Exception&) { std::cerr << "..... could not unbind" << std::endl; } exit(1); }
void Connection_Manager::add_to_receivers (CosNaming::BindingList &binding_list) { for (CORBA::ULong i = 0; i < binding_list.length (); i++) { // Get the receiver name from the binding list. ACE_CString receiver_name = binding_list [i].binding_name [0].id.in (); CosNaming::Name name (1); name.length (1); name [0].id = CORBA::string_dup (receiver_name.c_str ()); // Resolve the reference of the receiver from the receiver // context. CORBA::Object_var obj = this->receiver_context_->resolve (name); AVStreams::MMDevice_var receiver_device = AVStreams::MMDevice::_narrow (obj.in ()); // Add this receiver to the receiver map. ACE_CString flowname = this->sender_name_ + "_" + receiver_name; this->receivers_.bind (flowname, receiver_device); } }
Speech::~Speech() { #ifdef DEBUG cout << "Destructing Speech." << endl; #endif // pConsumer->disconnect_push_consumer(); try { CosNaming::Name n; n.length(1); n[0].id = CORBA::string_dup("Speech"); namingContext->unbind(n); // n[0].id = CORBA::string_dup("SpeechEC"); // namingContext->unbind(n); #ifdef DEBUG cout << "Unbound objects from NamingSevice." << endl; #endif } catch (const CORBA::Exception& e) { cerr << "Caught CORBA exception on unbind: " << e << endl; cerr << "Porbably the NameSevice went down while we ran." << endl; } }
OnlineViewer_var getOnlineViewer(CosNaming::NamingContext_var cxt) { CosNaming::Name ncName; ncName.length(1); ncName[0].id = CORBA::string_dup("OnlineViewer"); ncName[0].kind = CORBA::string_dup(""); OnlineViewer_var onlineViewer = NULL; try { onlineViewer = OnlineViewer::_narrow(cxt->resolve(ncName)); } catch(const CosNaming::NamingContext::NotFound &exc) { std::cerr << "OnlineViewer not found: "; switch(exc.why) { case CosNaming::NamingContext::missing_node: std::cerr << "Missing Node" << std::endl; case CosNaming::NamingContext::not_context: std::cerr << "Not Context" << std::endl; break; case CosNaming::NamingContext::not_object: std::cerr << "Not Object" << std::endl; break; } return 0; } catch(CosNaming::NamingContext::CannotProceed &exc) { std::cerr << "Resolve OnlineViewer CannotProceed" << std::endl; return 0; } catch(CosNaming::NamingContext::AlreadyBound &exc) { std::cerr << "Resolve OnlineViewer InvalidName" << std::endl; return 0; } return onlineViewer; }
void Connection_Manager::unbind_sender (const ACE_CString &sender_name, AVStreams::MMDevice_ptr sender_mmdevice_obj) { if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG, "Connection_Manager::unbind_sender\n")); CosNaming::Name name (1); name.length (1); // Try binding the sender context in the NS name [0].id = CORBA::string_dup (sender_name.c_str ()); try { CORBA::Object_var object = this->naming_client_->resolve (name); CosNaming::NamingContext_var sender_context = CosNaming::NamingContext::_narrow (object.in ()); if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG, "Sender Context Found\n")); try { object = sender_context->resolve (name); AVStreams::MMDevice_var mmdevice = AVStreams::MMDevice::_narrow (object.in ()); if (mmdevice->_is_equivalent (sender_mmdevice_obj)) { sender_context->unbind (name); if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG, "Sender Unbound\n")); } } catch (const CosNaming::NamingContext::NotFound&) { ACE_DEBUG ((LM_DEBUG, "Sender object not found\n")); // Do not have to unbind. } } catch (const CosNaming::NamingContext::NotFound&) { ACE_DEBUG ((LM_DEBUG, "Sender Context Not Found\n")); // Do not have to unbind. } }
ImageServer::~ImageServer() { CosNaming::Name n; n.length(1); n[0].id = CORBA::string_dup("Image"); namingContext->unbind(n); }
/*! * @if jp * @brief 途中のコンテキストを再帰的に bind しながら Object を bind する * @else * @brief Bind intermediate context recursively and bind object * @endif */ void CorbaNaming::bindRecursive(CosNaming::NamingContext_ptr context, const CosNaming::Name& name, CORBA::Object_ptr obj) throw (SystemException, CannotProceed, InvalidName, AlreadyBound) { CORBA::ULong len(name.length()); CosNaming::NamingContext_var cxt; cxt = CosNaming::NamingContext::_duplicate(context); for (CORBA::ULong i = 0; i < len; ++i) { if (i == (len - 1)) { // this operation may throw AlreadyBound, cxt->bind(subName(name, i, i), obj); return; } else { // If the context is not a NamingContext, CannotProceed is thrown if (isNamingContext(cxt)) cxt = bindOrResolveContext(cxt, subName(name, i, i)); else throw CannotProceed(cxt, subName(name, i)); } } return; }
CosNaming::NamingContext_ptr TAO_Hash_Naming_Context::bind_new_context (const CosNaming::Name& n) { // Check to make sure this object didn't have <destroy> method // invoked on it. if (this->destroyed_) throw CORBA::OBJECT_NOT_EXIST (); // Get the length of the name. CORBA::ULong name_len = n.length (); // Check for invalid name. if (name_len == 0) throw CosNaming::NamingContext::InvalidName(); // If we received compound name, resolve it to get the context in // which the binding should take place, then perform the operation on // target context. if (name_len > 1) { CosNaming::NamingContext_var context = this->get_context (n); CosNaming::Name simple_name; simple_name.length (1); simple_name[0] = n[name_len - 1]; return context->bind_new_context (simple_name); } // If we received a simple name, we need to bind it in this context. // Stores our new Naming Context. CosNaming::NamingContext_var result = CosNaming::NamingContext::_nil (); // Create new context. result = this->new_context (); // Bind the new context to the name. try { this->bind_context (n, result.in ()); } catch (const CORBA::Exception&) { // If the bind() operation fails we must destroy the recently // created context, should any exceptions be raised by the // destroy() operation we want to ignore them. { try { result->destroy (); } catch (const CORBA::Exception&) { } } // Re-raise the exception in bind_context() throw; } return result._retn (); }
int main(int argc, char *argv[]) { CORBA::ORB_var orb = CORBA::ORB::_nil(); try { orb = CORBA::ORB_init(argc, argv); CORBA::Object_var obj; obj = orb->resolve_initial_references("RootPOA"); PortableServer::POA_var poa = PortableServer::POA::_narrow(obj); if(CORBA::is_nil(poa)){ throw std::string("error: failed to narrow root POA."); } PortableServer::POAManager_var poaManager = poa->the_POAManager(); if(CORBA::is_nil(poaManager)){ throw std::string("error: failed to narrow root POA manager."); } OnlineViewer_impl* OnlineViewerImpl = new OnlineViewer_impl(orb, poa); poa->activate_object(OnlineViewerImpl); OnlineViewer_var OnlineViewer = OnlineViewerImpl->_this(); OnlineViewerImpl->_remove_ref(); obj = orb->resolve_initial_references("NameService"); CosNaming::NamingContext_var namingContext = CosNaming::NamingContext::_narrow(obj); if(CORBA::is_nil(namingContext)){ throw std::string("error: failed to narrow naming context."); } CosNaming::Name name; name.length(1); name[0].id = CORBA::string_dup("OnlineViewer"); name[0].kind = CORBA::string_dup(""); namingContext->rebind(name, OnlineViewer); poaManager->activate(); glmain(argc, argv); } catch (CORBA::SystemException& ex) { std::cerr << ex._rep_id() << std::endl; } catch (const std::string& error){ std::cerr << error << std::endl; } try { orb->destroy(); } catch(...){ } return 0; }
void TAO_Hash_Naming_Context::rebind_context (const CosNaming::Name &n, CosNaming::NamingContext_ptr nc) { // Check to make sure this object didn't have <destroy> method // invoked on it. if (this->destroyed_) throw CORBA::OBJECT_NOT_EXIST (); // Get the length of the name. CORBA::ULong const name_len = n.length (); // Check for invalid name. if (name_len == 0) throw CosNaming::NamingContext::InvalidName(); // If we received compound name, resolve it to get the context in // which the rebinding should take place, then perform the rebinding // on target context. if (name_len > 1) { CosNaming::NamingContext_var context = this->get_context (n); CosNaming::Name simple_name; simple_name.length (1); simple_name[0] = n[name_len - 1]; try { context->rebind_context (simple_name, nc); } catch (const CORBA::SystemException&) { throw CosNaming::NamingContext::CannotProceed( context.in (), simple_name); } } else // If we received a simple name, we need to rebind it in this // context. { ACE_WRITE_GUARD_THROW_EX (TAO_SYNCH_RW_MUTEX, ace_mon, this->lock_, CORBA::INTERNAL ()); int result = this->context_->rebind (n[0].id, n[0].kind, nc, CosNaming::ncontext); // Check for error conditions. if (result == -1) throw CORBA::INTERNAL (); else if (result == -2) throw CosNaming::NamingContext::NotFound( CosNaming::NamingContext::not_context, n); } }
static CORBA::Object_ptr getObjectReference(CORBA::ORB_ptr orb) { CosNaming::NamingContext_var rootContext; try { // Obtain a reference to the root context of the Name service: CORBA::Object_var obj; obj = orb->resolve_initial_references("NameService"); // Narrow the reference returned. rootContext = CosNaming::NamingContext::_narrow(obj); if( CORBA::is_nil(rootContext) ) { cerr << "Failed to narrow the root naming context." << endl; return CORBA::Object::_nil(); } } catch (CORBA::NO_RESOURCES&) { cerr << "Caught NO_RESOURCES exception. You must configure omniORB " << "with the location" << endl << "of the naming service." << endl; return 0; } catch(CORBA::ORB::InvalidName& ex) { // This should not happen! cerr << "Service required is invalid [does not exist]." << endl; return CORBA::Object::_nil(); } // Create a name object, containing the name test/context: CosNaming::Name name; name.length(2); name[0].id = (const char*) "test"; // string copied name[0].kind = (const char*) "my_context"; // string copied name[1].id = (const char*) "IdServer"; name[1].kind = (const char*) "Object"; // Note on kind: The kind field is used to indicate the type // of the object. This is to avoid conventions such as that used // by files (name.type -- e.g. test.ps = postscript etc.) try { // Resolve the name to an object reference. return rootContext->resolve(name); } catch(CosNaming::NamingContext::NotFound& ex) { // This exception is thrown if any of the components of the // path [contexts or the object] aren't found: cerr << "Context not found." << endl; } catch(CORBA::TRANSIENT& ex) { cerr << "Caught system exception TRANSIENT -- unable to contact the " << "naming service." << endl << "Make sure the naming server is running and that omniORB is " << "configured correctly." << endl; } catch(CORBA::SystemException& ex) { cerr << "Caught a CORBA::" << ex._name() << " while using the naming service." << endl; return 0; } return CORBA::Object::_nil(); }
CosNaming::NamingContext_ptr TAO_Hash_Naming_Context::get_context (const CosNaming::Name &name) { CosNaming::NamingContext_var result = CosNaming::NamingContext::_nil (); // Create compound name to be resolved, i.e., // (<name> - last component). To avoid copying, we can just reuse // <name>'s buffer, since we will not be modifying it. CORBA::ULong name_len = name.length (); CosNaming::Name comp_name (name.maximum (), name_len - 1, const_cast<CosNaming::NameComponent*> (name.get_buffer ())); try { CORBA::Object_var context = this->resolve (comp_name); // Try narrowing object reference to the NamingContext type. result = CosNaming::NamingContext::_narrow (context.in ()); } catch (CosNaming::NamingContext::NotFound& ex) { // Add the last component of the name, which was stripped before // the call to resolve. CORBA::ULong const rest_len = ex.rest_of_name.length () + 1; ex.rest_of_name.length (rest_len); ex.rest_of_name[rest_len - 1] = name[name_len - 1]; throw; } if (CORBA::is_nil (result.in ())) { CosNaming::Name rest; rest.length (2); rest[0] = name[name_len - 2]; rest[1] = name[name_len - 1]; throw CosNaming::NamingContext::NotFound( CosNaming::NamingContext::not_context, rest); } // Finally, if everything went smoothly, just return the resolved // context. return result._retn (); }
int main( int argc, char *argv[] ) { try { // Initialize the CORBA Object Request Broker CORBA::ORB_var orb = CORBA::ORB_init( argc, argv ); // Find the CORBA Services Naming Service CORBA::Object_var naming_obj = orb->resolve_initial_references("NameService"); CosNaming::NamingContext_var root = CosNaming::NamingContext::_narrow(naming_obj.in()); if(CORBA::is_nil(root.in())) { cerr << "Could not narrow NameService to NamingContext!" << endl; throw 0; } // Resolve the desired object (ExampleInterfaces.IAdder). // The module and interface bindings need to be the same here in the client as they // are in the server. CosNaming::Name name; name.length(2); name[0].id = CORBA::string_dup( "ExampleInterfaces" ); // IDL-defined Module (namespace) name[1].id = CORBA::string_dup( "IAdder" ); // IDL-defined Interface (interface class) CORBA::Object_var obj = root->resolve(name); // Narrow to confirm that we have the interface we want. ExampleInterfaces::IAdder_var iAdder = ExampleInterfaces::IAdder::_narrow(obj.in()); if (CORBA::is_nil(iAdder.in())) { cerr << "Could not narrow to an iAdder reference" << endl; return 1; } // Now use the remote object... cout << "Using a remote object that implements the IAdder interface..." << endl; cout << endl; double number1 = 0; double number2 = 0; double sum = 0; while (true) { cout << "Enter the first number: "; cin >> number1; cout << "Enter the second number: "; cin >> number2; sum = iAdder->add(number1, number2); cout << "The sum is: " << sum << endl; cout << "------------------" << endl; } } catch ( CORBA::Exception& ex ) { cerr << "Caught a CORBA::Exception: " << ex << endl; return 1; } return 0; }
int ACE_TMAIN(int argc, ACE_TCHAR * argv[]) { try { // Initialize orb CORBA::ORB_var orb = CORBA::ORB_init(argc, argv); CORBA::Object_var rootObj = orb->resolve_initial_references("NameService"); CosNaming::NamingContext_var rootContext = CosNaming::NamingContext::_narrow(rootObj.in()); CosNaming::Name name; name.length (1); name[0].id = CORBA::string_dup ("MessengerService"); CORBA::Object_var messengerObj = rootContext->resolve(name); if (CORBA::is_nil(messengerObj.in())) { std::cerr << "Nil Messenger reference" << std::endl; return 1; } // Narrow Messenger_var messenger = Messenger::_narrow(messengerObj.in()); if (CORBA::is_nil(messenger.in ())) { std::cerr << "Argument is not a Messenger reference" << std::endl; return 1; } CORBA::String_var message = CORBA::string_dup( "We are experiencing network problems."); messenger->send_message ("*****@*****.**", "urgent", message.inout()); message = CORBA::string_dup("Where can I get TAO?"); messenger->send_message ("*****@*****.**", "OCI's Distribution of TAO", message.inout()); message = CORBA::string_dup( "Please contact [email protected] regarding your request."); messenger->send_message ("*****@*****.**", "OCI's Distribution of TAO", message.inout()); } catch(const CORBA::Exception& ex) { std::cerr << "Caught a CORBA exception: " << ex << std::endl; return 1; } std::cout << "MessengerClient: success" << std::endl; return 0; }
int ACE_TMAIN (int argc, ACE_TCHAR *argv []) { try { // Initialize orb CORBA::ORB_var orb = CORBA::ORB_init(argc, argv); if (parse_args (argc, argv) != 0) return 1; // Find the Naming Service. CORBA::Object_var rootObj = orb->resolve_initial_references("NameService"); CosNaming::NamingContext_var rootNC = CosNaming::NamingContext::_narrow(rootObj.in()); // Get the Root POA. CORBA::Object_var obj = orb->resolve_initial_references("RootPOA"); PortableServer::POA_var poa = PortableServer::POA::_narrow(obj.in()); // Activate POA manager PortableServer::POAManager_var mgr = poa->the_POAManager(); mgr->activate(); // Create our Messenger servant. PortableServer::Servant_var<Messenger_i> messenger_servant = new Messenger_i(orb.in()); // Register it with the RootPOA. PortableServer::ObjectId_var oid = poa->activate_object( messenger_servant.in() ); CORBA::Object_var messenger_obj = poa->id_to_reference( oid.in() ); // Bind it in the Naming Service. CosNaming::Name name; name.length (1); name[0].id = CORBA::string_dup("MessengerService"); rootNC->rebind(name, messenger_obj.in()); CORBA::String_var str = orb->object_to_string (messenger_obj.in()); std::ofstream iorFile (ACE_TEXT_ALWAYS_CHAR(ior_output_file)); iorFile << str.in () << std::endl; iorFile.close (); std::cout << "IOR written to file " << ior_output_file << std::endl; // Accept requests orb->run(); orb->destroy(); } catch(const CORBA::Exception& ex) { std::cerr << ex << std::endl; return 1; } return 0; }
void NamingContextHelper::unbind(const std::string& name) { if(isAlive()){ CosNaming::Name nc; nc.length(1); nc[0].id = CORBA::string_dup(name.c_str()); nc[0].kind = CORBA::string_dup(""); namingContext->unbind(nc); } }
RecordingDevice::ReturnCode RecordingDevice::ResolveDevice() { ReturnCode result = OK; if(mName.empty()) { result = NO_DEVICE; } mTrackCount = 0; CosNaming::Name name; name.length(3); name[0].id = CORBA::string_dup("ProductionAutomation"); name[1].id = CORBA::string_dup("RecordingDevices"); name[2].id = CORBA::string_dup(mName.c_str()); CORBA::Object_var obj; if(OK == result) { obj = CorbaUtil::Instance()->ResolveObject(name); } if(CORBA::is_nil(obj)) { result = NO_DEVICE; } if(OK == result) { try { mRecorder = ProdAuto::Recorder::_narrow(obj); } catch(const CORBA::Exception &) { result = NO_DEVICE; } } // Find out how many recording tracks there are ProdAuto::TrackList_var track_list; if(OK == result) { try { track_list = mRecorder->Tracks(); mTrackCount = track_list->length(); } catch(const CORBA::Exception &) { result = NO_DEVICE; } } return result; }
static void checkLogging(ACSDaemonContext * context, short instance) { if (!loggingSystemInitialized) { // we need msg_callback to get LoggingProxy if (ACE_LOG_MSG->msg_callback () != 0 && context->hasConfigurationReference(instance, acsServices[NAMING_SERVICE].xmltag)) { try { // we get via NS and not a manager (to support logging when manager is not running) std::string nsReference = context->getConfigurationReference(instance, acsServices[NAMING_SERVICE].xmltag); CORBA::Object_var nc_obj = context->getORB()->string_to_object(nsReference.c_str()); if (nc_obj.ptr() != CORBA::Object::_nil()) { CosNaming::NamingContext_var nc = CosNaming::NamingContext::_narrow(nc_obj.in()); if (nc.ptr() != CosNaming::NamingContext::_nil()) { CosNaming::Name name; name.length(1); name[0].id = CORBA::string_dup("Log"); CORBA::Object_var obj = nc->resolve(name); if (!CORBA::is_nil(obj.in())) { Logging::AcsLogService_var logger = Logging::AcsLogService::_narrow(obj.in()); LoggingProxy* lp = static_cast<LoggingProxy*>(ACE_LOG_MSG->msg_callback()); lp->setCentralizedLogger(logger.in()); lp->setNamingContext(nc.in()); loggingSystemInitialized = true; ACS_SHORT_LOG((LM_DEBUG, "Remote logging system initialized.")); } else { ACS_SHORT_LOG((LM_DEBUG, "Unable to resolve Log from the naming service.")); } } else { ACS_SHORT_LOG((LM_DEBUG, "Unable to narrow NamingContext.")); } } else { ACS_SHORT_LOG((LM_ERROR, "Unable to resolve naming service, invalid corbaloc reference: '%s'.", nsReference.c_str())); } } catch (...) { ACS_SHORT_LOG((LM_DEBUG, "Unable to initialize logging sytem, unexpected exception caught.")); } } } }