📄 naming_utils.cpp
字号:
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "TAO_Naming_Service::init");
return -1;
}
ACE_ENDTRY;
ACE_CHECK_RETURN (-1);
if (this->ior_output_file_ != 0)
{
CORBA::String_var str =
this->naming_service_ior ();
ACE_OS::fprintf (this->ior_output_file_,
"%s",
str.in ());
ACE_OS::fclose (this->ior_output_file_);
}
if (this->pid_file_name_ != 0)
{
FILE *pidf = ACE_OS::fopen (this->pid_file_name_, ACE_LIB_TEXT("w"));
if (pidf != 0)
{
ACE_OS::fprintf (pidf,
"%ld\n",
ACE_static_cast (long, ACE_OS::getpid ()));
ACE_OS::fclose (pidf);
}
}
return 0;
}
int
TAO_Naming_Server::init_new_naming (CORBA::ORB_ptr orb,
PortableServer::POA_ptr poa,
const ACE_TCHAR *persistence_location,
void *base_addr,
size_t context_size,
int enable_multicast,
int use_storable_context,
int round_trip_timeout,
int use_round_trip_timeout)
{
ACE_DECLARE_NEW_CORBA_ENV;
ACE_TRY
{
if (use_storable_context)
{
// In lieu of a fully implemented service configurator version
// of this Reader and Writer, let's just take something off the
// command line for now.
TAO_Naming_Service_Persistence_Factory *persFactory = 0;
ACE_NEW_RETURN(persFactory, TAO_NS_FlatFileFactory, -1);
// Was a location specified?
if (persistence_location == 0)
{
// No, assign the default location "NameService"
persistence_location = ACE_LIB_TEXT("NameService");
}
// Now make sure this directory exists
if (ACE_OS::access (persistence_location, W_OK|X_OK))
{
ACE_ERROR ((LM_ERROR, "Invalid persistence directory\n"));
return -1;
}
#if (TAO_HAS_MINIMUM_POA == 0)
if (this->use_servant_activator_)
{
TAO_Storable_Naming_Context_Activator *servant_activator;
ACE_NEW_THROW_EX (servant_activator,
TAO_Storable_Naming_Context_Activator (orb,
persFactory,
persistence_location,
context_size),
CORBA::NO_MEMORY ());
this->ns_poa_->set_servant_manager(servant_activator);
}
#endif /* TAO_HAS_MINIMUM_POA */
this->naming_context_ =
TAO_Storable_Naming_Context::recreate_all (orb,
poa,
TAO_ROOT_NAMING_CONTEXT,
context_size,
0,
persFactory,
persistence_location,
use_redundancy_
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
else if (persistence_location != 0)
//
// Initialize Persistent Naming Service.
//
{
// Allocate and initialize Persistent Context Index.
ACE_NEW_RETURN (this->context_index_,
TAO_Persistent_Context_Index (orb, poa),
-1);
if (this->context_index_->open (persistence_location,
base_addr) == -1
|| this->context_index_->init (context_size) == -1)
{
if (TAO_debug_level >0)
ACE_DEBUG ((LM_DEBUG,
"TAO_Naming_Server: context_index initialization failed\n"));
return -1;
}
// Set the root Naming Context reference.
this->naming_context_ =
this->context_index_->root_context ();
}
else
{
//
// Initialize Transient Naming Service.
//
this->naming_context_ =
TAO_Transient_Naming_Context::make_new_context (poa,
TAO_ROOT_NAMING_CONTEXT,
context_size
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
// Set the ior of the root Naming Context.
this->naming_service_ior_=
orb->object_to_string (this->naming_context_.in ()
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
CORBA::Object_var table_object =
orb->resolve_initial_references ("IORTable" ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
IORTable::Table_var adapter =
IORTable::Table::_narrow (table_object.in () ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
if (CORBA::is_nil (adapter.in ()))
{
ACE_ERROR ((LM_ERROR, "Nil IORTable\n"));
}
else
{
CORBA::String_var ior =
orb->object_to_string (this->naming_context_.in ()
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
adapter->bind ("NameService", ior.in () ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
#if defined (ACE_HAS_IP_MULTICAST)
if (enable_multicast)
{
// @@ Marina: is there anyway to implement this stuff
// without using ORB_Core_instance()? For example can you
// pass the ORB as an argument?
//
// Install ior multicast handler.
//
// Get reactor instance from TAO.
ACE_Reactor *reactor =
TAO_ORB_Core_instance ()->reactor ();
// See if the -ORBMulticastDiscoveryEndpoint option was specified.
ACE_CString mde (TAO_ORB_Core_instance ()->orb_params ()
->mcast_discovery_endpoint ());
// First, see if the user has given us a multicast port number
// on the command-line;
u_short port =
TAO_ORB_Core_instance ()->orb_params ()->service_port (NAMESERVICE);
if (port == 0)
{
// Check environment var. for multicast port.
const char *port_number =
ACE_OS::getenv ("NameServicePort");
if (port_number != 0)
port = ACE_static_cast (u_short, ACE_OS::atoi (port_number));
}
// Port wasn't specified on the command-line or in environment -
// use the default.
if (port == 0)
port = TAO_DEFAULT_NAME_SERVER_REQUEST_PORT;
// Instantiate a handler which will handle client requests for
// the root Naming Context ior, received on the multicast port.
ACE_NEW_RETURN (this->ior_multicast_,
TAO_IOR_Multicast (),
-1);
if (mde.length () != 0)
{
if (this->ior_multicast_->init (this->naming_service_ior_.in (),
mde.c_str (),
TAO_SERVICEID_NAMESERVICE) == -1)
return -1;
}
else
{
if (this->ior_multicast_->init (this->naming_service_ior_.in (),
port,
ACE_DEFAULT_MULTICAST_ADDR,
TAO_SERVICEID_NAMESERVICE) == -1)
return -1;
}
// Register event handler for the ior multicast.
if (reactor->register_handler (this->ior_multicast_,
ACE_Event_Handler::READ_MASK) == -1)
{
if (TAO_debug_level > 0)
ACE_DEBUG ((LM_DEBUG,
"TAO_Naming_Server: cannot register Event handler\n"));
return -1;
}
if (TAO_debug_level > 0)
ACE_DEBUG ((LM_DEBUG,
"TAO_Naming_Server: The multicast server setup is done.\n"));
}
#else
ACE_UNUSED_ARG (enable_multicast);
#endif /* ACE_HAS_IP_MULTICAST */
if (use_round_trip_timeout == 1)
{
TimeBase::TimeT roundTripTimeoutVal = round_trip_timeout;
CORBA::Any anyObjectVal;
anyObjectVal <<= roundTripTimeoutVal;
CORBA::PolicyList polList (1);
polList.length (1);
polList[0] = orb->create_policy (Messaging::RELATIVE_RT_TIMEOUT_POLICY_TYPE,
anyObjectVal);
ACE_TRY_CHECK;
// set a timeout on the orb
//
CORBA::Object_var orbPolicyManagerObj =
orb->resolve_initial_references ("ORBPolicyManager"
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
CORBA::PolicyManager_var orbPolicyManager =
CORBA::PolicyManager::_narrow (orbPolicyManagerObj.in ());
ACE_TRY_CHECK;
orbPolicyManager->set_policy_overrides (polList, CORBA::SET_OVERRIDE);
polList[0]->destroy ();
ACE_TRY_CHECK;
polList[0] = CORBA::Policy::_nil ();
}
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "TAO_Naming_Server");
return -1;
}
ACE_ENDTRY;
ACE_CHECK_RETURN (-1);
return 0;
}
int
TAO_Naming_Server::fini (void)
{
// Destroy the child POA ns_poa that is created when initializing
// the Naming Service
ACE_TRY_NEW_ENV
{
this->ns_poa_->destroy (1, 1 ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
CORBA::Object_var table_object =
this->orb_->resolve_initial_references ("IORTable"
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
IORTable::Table_var adapter =
IORTable::Table::_narrow (table_object.in () ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
if (CORBA::is_nil (adapter.in ()))
{
ACE_ERROR ((LM_ERROR, "Nil IORTable\n"));
}
else
{
adapter->unbind ("NameService" ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
}
ACE_CATCHANY
{
// Ignore
}
ACE_ENDTRY;
return 0;
}
char*
TAO_Naming_Server::naming_service_ior (void)
{
return CORBA::string_dup (this->naming_service_ior_.in ());
}
CosNaming::NamingContext_ptr
TAO_Naming_Server::operator-> (void) const
{
return this->naming_context_.ptr ();
}
TAO_Naming_Server::~TAO_Naming_Server (void)
{
if (this->ior_multicast_ != 0)
{
TAO_ORB_Core_instance ()->reactor ()->remove_handler
(this->ior_multicast_,
ACE_Event_Handler::READ_MASK | ACE_Event_Handler::DONT_CALL);
delete this->ior_multicast_;
}
delete context_index_;
}
CosNaming::NamingContext_ptr
TAO_Naming_Client::operator -> (void) const
{
return this->naming_context_.ptr ();
}
CosNaming::NamingContext_ptr
TAO_Naming_Client::get_context (void) const
{
// Must duplicate this pointer so it can be stored in a _var.
return CosNaming::NamingContext::_duplicate (this->naming_context_.ptr ());
}
int
TAO_Naming_Client::init (CORBA::ORB_ptr orb,
ACE_Time_Value *timeout)
{
ACE_DECLARE_NEW_CORBA_ENV;
ACE_TRY
{
CORBA::Object_var naming_obj =
orb->resolve_initial_references ("NameService", timeout ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
if (CORBA::is_nil (naming_obj.in ()))
ACE_ERROR_RETURN ((LM_ERROR,
" (%P|%t) Unable to initialize the NameService.\n"),
-1);
this->naming_context_ =
CosNaming::NamingContext::_narrow (naming_obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "init");
return -1;
}
ACE_ENDTRY;
ACE_CHECK_RETURN (-1);
return 0;
}
TAO_Naming_Client::TAO_Naming_Client (void)
{
// Do nothing
}
TAO_Naming_Client::~TAO_Naming_Client (void)
{
// Do nothing
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -