Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
        }
    }
}