diff options
Diffstat (limited to 'TAO/CIAO/DAnCE/NodeManager/Node_Manager.cpp')
-rw-r--r-- | TAO/CIAO/DAnCE/NodeManager/Node_Manager.cpp | 79 |
1 files changed, 58 insertions, 21 deletions
diff --git a/TAO/CIAO/DAnCE/NodeManager/Node_Manager.cpp b/TAO/CIAO/DAnCE/NodeManager/Node_Manager.cpp index 7318939fe16..4c3684f5d3c 100644 --- a/TAO/CIAO/DAnCE/NodeManager/Node_Manager.cpp +++ b/TAO/CIAO/DAnCE/NodeManager/Node_Manager.cpp @@ -17,6 +17,7 @@ char *default_svcconf_ = 0; char *svcconf_config_ = 0; char *nodeapp_location_ = 0; char *nodeapp_options_ = 0; +const char *pid_file_name_ = 0; int write_to_ior_ = 0; int register_with_ns_ = 0; int nodeapp_loc_ = 0; @@ -25,29 +26,33 @@ int spawn_delay = 1; int parse_args (int argc, char *argv[]) { - ACE_Get_Opt get_opts (argc, argv, "o:c:m:s:d:na:"); + ACE_Get_Opt get_opts (argc, argv, "o:c:m:s:d:na:p:z:"); int c; while ((c = get_opts ()) != -1) switch (c) { + case 'z': + nodeapp_options_ = "-ORBDebugLevel 10"; + break; + case 'o': // get the file name to write to - ior_file_name_ = get_opts.opt_arg (); - write_to_ior_ = 1; - break; + ior_file_name_ = get_opts.opt_arg (); + write_to_ior_ = 1; + break; case 'c': // get the default svc.conf filename default_svcconf_ = get_opts.opt_arg (); - break; + break; case 'm': // get the svc.conf map configuration filename svcconf_config_ = get_opts.opt_arg (); - break; + break; case 's': //get the location to spawn the NodeApplication nodeapp_location_ = get_opts.opt_arg (); nodeapp_loc_ = 1; - break; + break; case 'a': // Nodeapplication arguments nodeapp_options_ = get_opts.opt_arg (); @@ -55,11 +60,15 @@ parse_args (int argc, char *argv[]) case 'd': //get the spawn delay argument spawn_delay = ACE_OS::atoi (get_opts.opt_arg ()); - break; + break; case 'n': register_with_ns_ = 1; - break; + break; + + case 'p': + pid_file_name_ = get_opts.opt_arg (); + break; case '?': // display help for use of the server. default: @@ -71,6 +80,7 @@ parse_args (int argc, char *argv[]) "-s <NodeApplication executable path>\n" "-a <arguments to NodeApplication>\n" "-d <spawn delay for nodeapplication>\n" + "-p <pid file>\n" "\n", argv [0]), -1); @@ -96,6 +106,23 @@ write_IOR(const char* ior) return 0; } +void +write_pid (void) +{ + if (pid_file_name_ == 0) + return; + + FILE* pid_file = ACE_OS::fopen (pid_file_name_, "w"); + + if (pid_file) + { + ACE_OS::fprintf (pid_file, + "%i", + ACE_OS::getpid ()); + ACE_OS::fclose (pid_file); + } +} + bool register_with_ns (const char * name_context, CORBA::ORB_ptr orb, @@ -116,8 +143,16 @@ register_with_ns (const char * name_context, name.length (1); name[0].id = name_context; - // Register the servant with the Naming Service - naming_context->bind (name, obj); + try + { + // Register the servant with the Naming Service + naming_context->bind (name, obj); + } + catch (CosNaming::NamingContext::AlreadyBound &) + { + ACE_DEBUG ((LM_DEBUG, "Node_Manager.cpp: Name already bound, rebinding....\n")); + naming_context->rebind (name, obj); + } return true; } @@ -170,7 +205,7 @@ main (int argc, char *argv[]) ACE_TRY_CHECK; if (CORBA::is_nil (adapter.in ())) - ACE_ERROR_RETURN ((LM_ERROR, "Nil IORTable\n"), -1); + ACE_ERROR_RETURN ((LM_ERROR, "Nil IORTable\n"), -1); // Create and install the CIAO NodeManager servant CIAO::NodeManager_Impl *node_manager_servant = 0; @@ -184,9 +219,9 @@ main (int argc, char *argv[]) -1); PortableServer::ServantBase_var safe_daemon (node_manager_servant); - + node_manager_servant->init (); - + // Implicit activation CIAO::NodeManager_var node_manager = node_manager_servant->_this (); @@ -232,19 +267,21 @@ main (int argc, char *argv[]) ACE_TRY_CHECK; // Here start the Monitor -/* - MonitorController* monitor_controller - = new MonitorController (orb); + /* + MonitorController* monitor_controller + = new MonitorController (orb); - ACE_DEBUG ((LM_DEBUG , "Before Activate")); - monitor_controller->activate (); - ACE_DEBUG ((LM_DEBUG , "After Activate")); -*/ + ACE_DEBUG ((LM_DEBUG , "Before Activate")); + monitor_controller->activate (); + ACE_DEBUG ((LM_DEBUG , "After Activate")); + */ // Finishing Deployment part ACE_DEBUG ((LM_DEBUG, "CIAO_NodeManager is running...\n")); + write_pid (); + // Run the main event loop for the ORB. orb->run (ACE_ENV_SINGLE_ARG_PARAMETER); ACE_TRY_CHECK; |