Functions | |
| int | open_global_services (int argc, ACE_TCHAR **argv) |
| Note that the argument vector will be corrupted upon return. | |
| int | open_services (ACE_Intrusive_Auto_Ptr< ACE_Service_Gestalt > cfg, int &argc, ACE_TCHAR **argv) |
| int | close_services (ACE_Intrusive_Auto_Ptr< ACE_Service_Gestalt > pcfg) |
| void | default_svc_conf_entries (char const *rf_args, char const *ssf_args, char const *csf_args) |
| int TAO::ORB::close_services | ( | ACE_Intrusive_Auto_Ptr< ACE_Service_Gestalt > | pcfg | ) |
The complement to open_services(), this will perform appropriate ACE Service Configurator closure operations. It should be called as many times as open_services(), and will only actually close things down on the last call. It is fully thread-safe.
0 if successful, -1 with errno set if failure. Definition at line 530 of file TAO_Internal.cpp.
{
ACE_MT (ACE_GUARD_RETURN (TAO_SYNCH_RECURSIVE_MUTEX,
guard,
*ACE_Static_Object_Lock::instance (),
-1));
--service_open_count;
int result = 0;
if (pcfg != ACE_Service_Config::global())
{
result = pcfg->close ();
}
return result;
}
| void TAO::ORB::default_svc_conf_entries | ( | char const * | rf_args, | |
| char const * | ssf_args, | |||
| char const * | csf_args | |||
| ) |
Set default `svc.conf' content. This function must be called before first ORB initialization.
Definition at line 549 of file TAO_Internal.cpp.
{
resource_factory_args = rf_args;
server_strategy_factory_args = ssf_args;
client_strategy_factory_args = csf_args;
}
| int TAO::ORB::open_global_services | ( | int | argc, | |
| ACE_TCHAR ** | argv | |||
| ) |
Note that the argument vector will be corrupted upon return.
If never done it before, extract ACE Service Configurator arguments from the given argument vector, and initialize the _global_ configuration gestalt. Return value 0 means OK, -1 spells major trouble ...
Definition at line 223 of file TAO_Internal.cpp.
{
{
// Count of the number of (times we did this for all) ORBs.
static int orb_init_count = 0;
// Using ACE_Static_Object_Lock::instance() precludes ORB_init()
// from being called within a static object CTOR.
ACE_MT (ACE_GUARD_RETURN (TAO_SYNCH_RECURSIVE_MUTEX,
guard,
*ACE_Static_Object_Lock::instance (),
-1));
// Make sure TAO's singleton manager is initialized.
// We need to initialize before TAO_default_environment() is called
// since that call instantiates a TAO_TSS_Singleton.
if (TAO_Singleton_Manager::instance ()->init () == -1)
return -1;
// Prevent multiple initializations.
if (++orb_init_count > 1)
return 0;
}
// Prevent any other thread from going through ORB initialization before the
// uber-gestalt is initialized.
ACE_MT (ACE_GUARD_RETURN (TAO_SYNCH_RECURSIVE_MUTEX,
guard,
TAO_Ubergestalt_Ready_Condition::instance ()->mutex (),
-1));
if (TAO_debug_level > 2)
{
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("TAO (%P|%t) Initializing the ")
ACE_TEXT ("process-wide service context\n")));
}
ACE_Service_Gestalt* theone = ACE_Service_Config::global ();
ACE_Service_Config_Guard auto_config_guard (theone);
// Construct an argument vector specific to the process-wide
// (global) Service Configurator instance.
// Be certain to copy the program name so that service configurator
// has something to skip!
ACE_ARGV global_svc_config_argv (true); // only this ctor allows
// subsequent use of add()!
global_svc_config_argv.add ((argc <= 0 || argv == 0) ?
ACE_TEXT ("") : argv[0], true);
// Will expand the environment variables, if any were used.
// Is this a good thing? I guess it provides greater flexibility
// for deployment,so let's leave it. Will also quote arguments.
ACE_ARGV copyargv (argc, argv, true, true);
// Adjust to proper type
int tmpargc = argc;
ACE_Argv_Type_Converter cvtargv (tmpargc, copyargv.argv());
tmpargc = cvtargv.get_argc ();
ACE_TCHAR **tmpargv = cvtargv.get_TCHAR_argv ();
// Collect global SC parameters. True means "immediately
// apply global setting" like debug flag, etc.
if (parse_global_args_i (tmpargc,
tmpargv,
global_svc_config_argv,
true) == -1)
return -1;
bool skip_service_config_open = false; // by default we shouldn't
if (using_global_gestalt_i (tmpargc,
tmpargv,
skip_service_config_open))
{
if (parse_svcconf_args_i (tmpargc,
tmpargv,
global_svc_config_argv) == -1)
return -1;
}
bool ignore_default_svc_conf_file = false;
if (parse_private_args_i (tmpargc,
tmpargv,
global_svc_config_argv,
skip_service_config_open,
ignore_default_svc_conf_file) == -1)
return -1;
// register_global_services_i depends on the parsing of at least the
// -ORBNegotiateCodesets option, and must be invoked after all the
// parsing methods, but still must preceed the opening of other services.
register_global_services_i (theone);
// Perform the open magic (unless SC::open() has been called already)
int global_svc_config_argc = global_svc_config_argv.argc ();
int status = open_private_services_i (theone,
global_svc_config_argc,
global_svc_config_argv.argv (),
skip_service_config_open,
ignore_default_svc_conf_file);
// okay?
if (status == -1)
{
if (errno != ENOENT)
{
if (TAO_debug_level > 0)
{
ACE_ERROR ((LM_ERROR,
ACE_TEXT ("TAO (%P|%t) - Failed to open process-")
ACE_TEXT ("wide service configuration context\n")));
}
return -1;
}
else
{
if (TAO_debug_level > 4)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("TAO (%P|%t) - Did not find default ")
ACE_TEXT ("svc.conf\n")));
status = 0;
}
}
if (status > 0)
{
// one or more directives failed, but we don't know which
if (TAO_debug_level > 0)
{
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("TAO (%P|%t) - process-wide service ")
ACE_TEXT ("configuration context had %d failed ")
ACE_TEXT ("directives\n"), status));
}
}
if (TAO_debug_level > 2)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("TAO (%P|%t) - Completed initializing the ")
ACE_TEXT ("process-wide service context\n")));
if (TAO_debug_level > 4)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("TAO (%P|%t) - Default ORB services initialization begins\n")));
// Load more ORB-related services
register_additional_services_i (theone);
if (TAO_debug_level > 4)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("TAO (%P|%t) - Default ORB services initialization completed\n")));
// Notify all other threads that may be waiting, that the global
// gestalt has been initialized.
is_ubergestalt_ready = true;
ACE_MT (if (TAO_Ubergestalt_Ready_Condition::instance ()->
broadcast () == -1)
return -1);
return 0;
}
| int TAO::ORB::open_services | ( | ACE_Intrusive_Auto_Ptr< ACE_Service_Gestalt > | cfg, | |
| int & | argc, | |||
| ACE_TCHAR ** | argv | |||
| ) |
Extract ACE Service Configurator arguments from the given argument vector, and initialize the ACE Service Configurator.
Definition at line 390 of file TAO_Internal.cpp.
{
{
ACE_MT (ACE_GUARD_RETURN (TAO_SYNCH_RECURSIVE_MUTEX,
guard,
TAO_Ubergestalt_Ready_Condition::instance ()->mutex (),
-1));
// Wait in line, while the default ORB (which isn't us) completes
// initialization of the globaly required service objects
if (service_open_count == 1)
{
if (TAO_debug_level > 4)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("TAO (%P|%t) - Waiting for the default ")
ACE_TEXT ("ORB to complete the global ")
ACE_TEXT ("initialization\n")));
ACE_MT (while (!is_ubergestalt_ready)
TAO_Ubergestalt_Ready_Condition::instance ()->wait ());
if (TAO_debug_level > 4)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("TAO (%P|%t) - The default ")
ACE_TEXT ("ORB must have completed the global ")
ACE_TEXT ("initialization...\n")));
}
else
{
if (TAO_debug_level > 4)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("TAO (%P|%t) - We are%Cthe default ")
ACE_TEXT ("ORB ...\n"),
(service_open_count == 0) ? " " : " not "));
}
++service_open_count;
}
// Construct an argument vector specific to the Service Configurator.
// Be certain to copy the program name so that service configurator
// has something to skip!
ACE_ARGV svc_config_argv (true); // only this ctor allows subsequent
// use of add()!
svc_config_argv.add ((argc <= 0 || argv == 0) ? ACE_TEXT ("") : argv[0],
true);
// Should we skip the ACE_Service_Config::open() method?,
// e.g., because of -ORBSkipServiceConfigOpen
bool skip_service_config_open = false;
bool ignore_default_svc_conf_file = false;
// Extract any ORB options from the argument vector.
if (parse_private_args_i (argc,
argv,
svc_config_argv,
skip_service_config_open,
ignore_default_svc_conf_file) == -1)
{
return -1;
}
// Construct an argument vector specific to the process-wide
// (global) Service Configurator instance.
ACE_ARGV global_svc_config_argv;
// Parse any globally applicable arguments, but do not make them effective.
// We are effectively purging the command line from them without affecting
// the global state - after all, it may be a private (local) configuration
// context.
int status = parse_global_args_i(argc, argv, global_svc_config_argv, false);
if (status == -1 && TAO_debug_level > 0)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("TAO (%P|%t) - Skipping the process-wide ")
ACE_TEXT ("service configuration, service_open_count ")
ACE_TEXT ("= %d, status = %d\n"),
service_open_count,
status));
if (TAO_debug_level > 2)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("TAO (%P|%t) - Initializing the ")
ACE_TEXT ("orb-specific services\n")));
if (parse_svcconf_args_i (argc, argv, svc_config_argv) == -1)
return -1;
// Not a big deal to call open_private_services_i() again (if it was the global one). The SG::open() would not run if it has already been executed.
// only open the private context if it is not also the global context
if (pcfg != ACE_Service_Config::global())
{
int svc_config_argc = svc_config_argv.argc ();
status =
open_private_services_i (pcfg,
svc_config_argc,
svc_config_argv.argv (),
skip_service_config_open,
ignore_default_svc_conf_file);
}
if (status == -1)
{
if (errno != ENOENT)
{
if (TAO_debug_level > 0)
ACE_ERROR ((LM_ERROR,
ACE_TEXT ("TAO (%P|%t) - Failed to open ORB-specific ")
ACE_TEXT ("service configuration\n")));
return -1;
}
else
{
if (TAO_debug_level > 4)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("TAO (%P|%t) - Did not find default ")
ACE_TEXT ("svc.conf\n")));
status = 0;
}
}
if (status > 0)
{
// one or more directives failed, but we don't know which
if (TAO_debug_level > 0)
{
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("TAO (%P|%t) - ORB-specific service ")
ACE_TEXT ("configuration context had %d failed ")
ACE_TEXT ("directives\n"), status));
}
}
return status;
}
1.7.0