Server_Info_Ptr Locator_Repository::get_active_server (const ACE_CString& name, int pid) { sync_load (); ACE_CString key; Server_Info_Ptr si; if (name.length() == 0) { return si; } Server_Info::fqname_to_key (name.c_str(), key); servers ().find (key, si); if (si.null()) { if (this->opts_.debug() > 5) { ORBSVCS_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) get_active_server could not find %C\n"), name.c_str())); } si = find_by_poa (key); if (si.null()) { if (name.find ("JACORB:") == ACE_CString::npos) { ACE_CString jo_key ("JACORB:"); ACE_CString::size_type pos = name.find (':'); if (pos == ACE_CString::npos) { jo_key += name; } else { jo_key += name.substring (0, pos); jo_key += '/'; jo_key += name.substring (pos+1); } return this->get_active_server (jo_key, pid); } else { return si; } } } if (pid != 0 && si->pid != 0 && si->pid != pid) { if (this->opts_.debug() > 5) { ORBSVCS_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) get_active_server could not") ACE_TEXT (" find %C, %d != %d\n"), name.c_str(), pid, si->pid)); } si.reset (); } return si; }
void Config_Backing_Store::loadServers () { ACE_Configuration_Section_Key root; int err = config_.open_section (config_.root_section (), SERVERS_ROOT_KEY, 0, root); if (err == 0) { int index = 0; ACE_TString name; Server_Info *si = 0; u_int tmp_int = 0; ACE_CString tmp; while (config_.enumerate_sections (root, index, name) == 0) { Server_Info_Ptr info; if (this->servers ().find (name, info) != 0) { ACE_NEW (si, Server_Info); info.reset (si); si->key_name_ = name; } ACE_Configuration_Section_Key key; // Can't fail, because we're enumerating config_.open_section (root, name.c_str(), 0, key); if (!config_.get_string_value (key, POA, si->poa_name)) { si->poa_name = si->key_name_; } // Ignore any missing values. Server name is enough on its own. config_.get_string_value (key, SERVER_ID, si->server_id); config_.get_string_value (key, JACORB_SERVER, tmp); si->is_jacorb = (tmp == "1"); config_.get_string_value (key, ACTIVATOR, si->activator); config_.get_string_value (key, STARTUP_COMMAND, si->cmdline); config_.get_string_value (key, WORKING_DIR, si->dir); config_.get_string_value (key, ENVIRONMENT, tmp); ImR_Utils::stringToEnvList (tmp, si->env_vars); config_.get_integer_value (key, ACTIVATION, tmp_int); si->activation_mode_ = static_cast <ImplementationRepository::ActivationMode> (tmp_int); config_.get_string_value (key, PARTIAL_IOR, si->partial_ior); config_.get_string_value (key, IOR, si->ior); config_.get_integer_value (key, START_LIMIT, tmp_int); si->start_limit_ = tmp_int; config_.get_integer_value (key, PID, tmp_int); si->pid = tmp_int; if (config_.get_string_value (key, ALTKEY, tmp)) { if (tmp.length () > 0 && this->servers ().find (tmp, si->alt_info_) != 0) { Server_Info *base_si = 0; ACE_NEW (base_si, Server_Info); base_si->key_name_ = tmp; si->alt_info_.reset (base_si); this->servers ().bind (tmp, si->alt_info_); } } config_.get_string_value (key, PEERS, tmp); ImR_Utils::stringToPeerList (tmp, si->peers); this->servers ().bind (name, info); si = 0; ++index; } } }