+ if( params.isMPI )
+ return true;
+ else
+ return false;
+}
+
+
+//=============================================================================
+/*! \brief Initialisation of a given Engines::MachineParameters with default values.
+ *
+ * - container_name = "" : not relevant
+ * - hostname = "" : not relevant
+ * - OS = "" : not relevant
+ * - mem_mb = 0 : not relevant
+ * - cpu_clock = 0 : not relevant
+ * - nb_proc_per_node = 0 : not relevant
+ * - nb_node = 0 : not relevant
+ * - isMPI = false : standard components
+ */
+//=============================================================================
+
+void SALOME_LifeCycleCORBA::preSet( Engines::MachineParameters& params)
+{
+ params.container_name = "";
+ params.hostname = "";
+ //param.componentList = 0;
+ //param.computerList = 0;
+ params.OS = "";
+ params.mem_mb = 0;
+ params.cpu_clock = 0;
+ params.nb_proc_per_node = 0;
+ params.nb_node = 0;
+ params.isMPI = false;
+ params.workingdir = "";
+ params.mode = "";
+ params.policy = "";
+ params.parallelLib = "";
+ params.nb_component_nodes = 0;
+}
+
+//=============================================================================
+/*!
+ * \return a number of processors not 0, only for MPI containers
+ */
+//=============================================================================
+
+int SALOME_LifeCycleCORBA::NbProc(const Engines::MachineParameters& params)
+{
+ if( !isMpiContainer(params) )
+ return 0;
+ else if( (params.nb_node <= 0) && (params.nb_proc_per_node <= 0) )
+ return 1;
+ else if( params.nb_node == 0 )
+ return params.nb_proc_per_node;
+ else if( params.nb_proc_per_node == 0 )
+ return params.nb_node;
+ else
+ return params.nb_node * params.nb_proc_per_node;
+}
+
+//=============================================================================
+/*! \brief Get the container manager
+ *
+ * \return the container Manager
+ */
+//=============================================================================
+
+Engines::ContainerManager_ptr SALOME_LifeCycleCORBA::getContainerManager()
+{
+ Engines::ContainerManager_var contManager =
+ Engines::ContainerManager::_duplicate(_ContManager);
+ return contManager._retn();
+}
+
+//=============================================================================
+/*! \brief Get the resources manager
+ *
+ * \return the container Manager
+ */
+//=============================================================================
+
+Engines::ResourcesManager_ptr SALOME_LifeCycleCORBA::getResourcesManager()
+{
+ Engines::ResourcesManager_var resManager =
+ Engines::ResourcesManager::_duplicate(_ResManager);
+ return resManager._retn();
+}
+
+//=============================================================================
+/*! \brief shutdown all the SALOME servers except SALOME_Session_Server, omniNames and notifd
+ */
+//=============================================================================
+
+void SALOME_LifeCycleCORBA::shutdownServers()
+{
+ // get each Container from NamingService => shutdown it
+ // (the order is inverse to the order of servers initialization)
+
+ SALOME::Session_var session = SALOME::Session::_nil();
+ CORBA::Long pid = 0;
+ CORBA::Object_var objS = _NS->Resolve("/Kernel/Session");
+ if (!CORBA::is_nil(objS))
+ {
+ session = SALOME::Session::_narrow(objS);
+ if (!CORBA::is_nil(session))
+ {
+ pid = session->getPID();
+ session->ping();
+ }
+ }
+
+ string hostname = Kernel_Utils::GetHostname();
+
+ // 1) SalomeLauncher
+ CORBA::Object_var objSL = _NS->Resolve("/SalomeLauncher");
+ Engines::SalomeLauncher_var launcher = Engines::SalomeLauncher::_narrow(objSL);
+ if (!CORBA::is_nil(launcher) && (pid != launcher->getPID()))
+ launcher->Shutdown();
+
+ // 2) ConnectionManager
+ CORBA::Object_var objCnM=_NS->Resolve("/ConnectionManager");
+ Engines::ConnectionManager_var connMan=Engines::ConnectionManager::_narrow(objCnM);
+ if ( !CORBA::is_nil(connMan) && ( pid != connMan->getPID() ) )
+ connMan->ShutdownWithExit();
+
+ // 3) SALOMEDS
+ CORBA::Object_var objSDS = _NS->Resolve("/myStudyManager");
+ SALOMEDS::StudyManager_var studyManager = SALOMEDS::StudyManager::_narrow(objSDS) ;
+ if ( !CORBA::is_nil(studyManager) && ( pid != studyManager->getPID() ) )
+ studyManager->Shutdown();
+
+ // 4) ModuleCatalog
+ CORBA::Object_var objMC=_NS->Resolve("/Kernel/ModulCatalog");
+ SALOME_ModuleCatalog::ModuleCatalog_var catalog = SALOME_ModuleCatalog::ModuleCatalog::_narrow(objMC);
+ if ( !CORBA::is_nil(catalog) && ( pid != catalog->getPID() ) )
+ catalog->shutdown();
+
+ // 5) Registry
+ CORBA::Object_var objR = _NS->Resolve("/Registry");
+ Registry::Components_var registry = Registry::Components::_narrow(objR);
+ if ( !CORBA::is_nil(registry) && ( pid != registry->getPID() ) )
+ registry->Shutdown();
+
+ // 6) Logger
+ int argc = 0;
+ char *xargv = (char*)"";
+ char **argv = &xargv;
+ CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
+
+ CORBA::Object_var objLog = CORBA::Object::_nil();
+ CosNaming::NamingContext_var inc;
+ CORBA::Object_var theObj = CORBA::Object::_nil();
+ std::string stdname = "Logger";
+ CosNaming::Name name;
+ name.length(1);
+ name[0].id = CORBA::string_dup(stdname.c_str());
+ try
+ {
+ if(!CORBA::is_nil(orb))
+ theObj = orb->resolve_initial_references("NameService");
+ if (!CORBA::is_nil(theObj))
+ inc = CosNaming::NamingContext::_narrow(theObj);
+ }
+ catch(...)
+ {
+ }
+ if(!CORBA::is_nil(inc)) {
+ try
+ {
+ objLog = inc->resolve(name);
+ SALOME_Logger::Logger_var logger = SALOME_Logger::Logger::_narrow(objLog);
+ if ( !CORBA::is_nil(logger) )
+ logger->shutdown();
+ }
+ catch(...)
+ {
+ }