X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FLifeCycleCORBA%2FSALOME_LifeCycleCORBA.cxx;h=a576b5b6f37041000a77f570da0880bea76c4366;hb=2545c09242343820cec14e8f6b05bb246a7ebffd;hp=2afca3b7f4efe1a69ded3a74b3be8f59e249f54f;hpb=288dc1c84630e521220d796b7c88c518f34856d5;p=modules%2Fkernel.git diff --git a/src/LifeCycleCORBA/SALOME_LifeCycleCORBA.cxx b/src/LifeCycleCORBA/SALOME_LifeCycleCORBA.cxx index 2afca3b7f..a576b5b6f 100644 --- a/src/LifeCycleCORBA/SALOME_LifeCycleCORBA.cxx +++ b/src/LifeCycleCORBA/SALOME_LifeCycleCORBA.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2021 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -6,7 +6,7 @@ // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -37,18 +37,26 @@ #endif #include "Basics_Utils.hxx" +#include "OpUtil.hxx" #include "utilities.h" #include #include "SALOME_LifeCycleCORBA.hxx" +#include "SALOME_ResourcesManager.hxx" +#include "SALOMESDS_DataServerManager.hxx" +#include "SALOME_ExternalServerLauncher.hxx" + #include CORBA_CLIENT_HEADER(SALOME_ModuleCatalog) #include CORBA_CLIENT_HEADER(SALOME_Session) #include CORBA_CLIENT_HEADER(DSC_Engines) #include CORBA_CLIENT_HEADER(SALOME_Registry) #include CORBA_CLIENT_HEADER(SALOMEDS) +#include CORBA_CLIENT_HEADER(SALOME_SDS) #include CORBA_CLIENT_HEADER(Logger) +#include CORBA_CLIENT_HEADER(SALOME_Launcher) +#include "SALOME_ResourcesManager.hxx" #include "SALOME_ContainerManager.hxx" #include "SALOME_Component_i.hxx" #include "SALOME_NamingService.hxx" @@ -60,7 +68,7 @@ IncompatibleComponent::IncompatibleComponent( void ): } IncompatibleComponent::IncompatibleComponent(const IncompatibleComponent &ex): - SALOME_Exception( ex ) + SALOME_Exception( ex ) { } @@ -70,19 +78,16 @@ IncompatibleComponent::IncompatibleComponent(const IncompatibleComponent &ex): */ //============================================================================= -/*! +/*! * Constructor */ //============================================================================= -SALOME_LifeCycleCORBA::SALOME_LifeCycleCORBA(SALOME_NamingService *ns) +SALOME_LifeCycleCORBA::SALOME_LifeCycleCORBA(SALOME_NamingService_Abstract *ns) { // be sure to have an instance of traceCollector, when used via SWIG // in a Python module - int argc = 0; - char *xargv = (char*)""; - char **argv = &xargv; - CORBA::ORB_var orb = CORBA::ORB_init(argc, argv); + CORBA::ORB_var orb = KERNEL::GetRefToORB(); // LocalTraceCollector *myThreadTrace = SALOMETraceCollector::instance(orb); _NSnew=0; if (!ns) @@ -92,24 +97,28 @@ SALOME_LifeCycleCORBA::SALOME_LifeCycleCORBA(SALOME_NamingService *ns) } else _NS = ns; //add try catch - _NS->Change_Directory("/"); // mpv 250105: current directory may be not root + _NS->Change_Directory("/"); // mpv 250105: current directory may be not root // (in SALOMEDS for an example) // not enough: set a current directory in naming service is not thread safe // if naming service instance is shared among several threads... - // ==> allways use absolute path and dot rely on current directory! - - CORBA::Object_var obj = - _NS->Resolve(SALOME_ContainerManager::_ContainerManagerNameInNS); - ASSERT( !CORBA::is_nil(obj)); - _ContManager=Engines::ContainerManager::_narrow(obj); - - obj = _NS->Resolve(SALOME_ResourcesManager::_ResourcesManagerNameInNS); - ASSERT( !CORBA::is_nil(obj)); - _ResManager=Engines::ResourcesManager::_narrow(obj); + // ==> always use absolute path and don't rely on current directory! + //if( dynamic_cast(_NS) ) + { + CORBA::Object_var obj = + _NS->Resolve(SALOME_ContainerManager::_ContainerManagerNameInNS); + if (CORBA::is_nil(obj)) + throw SALOME_Exception("Error: Cannot resolve ContainerManager in Naming Service"); + _ContManager=Engines::ContainerManager::_narrow(obj); + + obj = _NS->Resolve(SALOME_ResourcesManager::_ResourcesManagerNameInNS); + if (CORBA::is_nil(obj)) + throw SALOME_Exception("Error: Cannot resolve ResourceManager in Naming Service"); + _ResManager=Engines::ResourcesManager::_narrow(obj); + } } //============================================================================= -/*! +/*! * Destructor */ //============================================================================= @@ -122,150 +131,93 @@ SALOME_LifeCycleCORBA::~SALOME_LifeCycleCORBA() //============================================================================= /*! \brief Find an already existing and registered component instance. * - * \param params machine parameters like type or name... + * \param params container parameters like type or name... * \param componentName the name of component class - * \param studyId default = 0 : multistudy instance * \return a CORBA reference of the component instance, or _nil if not found */ //============================================================================= Engines::EngineComponent_ptr -SALOME_LifeCycleCORBA::FindComponent(const Engines::MachineParameters& params, - const char *componentName, - int studyId) +SALOME_LifeCycleCORBA::FindComponent(const Engines::ContainerParameters& params, + const char *componentName) { if (! isKnownComponentClass(componentName)) return Engines::EngineComponent::_nil(); - Engines::ContainerParameters new_params; - convert(params, new_params); + Engines::ContainerParameters new_params(params); new_params.resource_params.componentList.length(1); new_params.resource_params.componentList[0] = componentName; + new_params.resource_params.can_run_containers = true; Engines::ResourceList_var listOfResources; try { listOfResources = _ResManager->GetFittingResources(new_params.resource_params); } - catch( const SALOME::SALOME_Exception& ex ) + catch( const SALOME::SALOME_Exception& /*ex*/ ) //!< TODO: unused variable { return Engines::EngineComponent::_nil(); } Engines::EngineComponent_var compo = _FindComponent(new_params, componentName, - studyId, listOfResources); return compo._retn(); } //============================================================================= -/*! \brief Load a component instance on a container defined by machine parameters +/*! \brief Load a component instance on a container defined by its parameters * - * \param params machine parameters like type or name... + * \param params container parameters like type or name... * \param componentName the name of component class - * \param studyId default = 0 : multistudy instance * \return a CORBA reference of the component instance, or _nil if problem */ //============================================================================= Engines::EngineComponent_ptr -SALOME_LifeCycleCORBA::LoadComponent(const Engines::MachineParameters& params, - const char *componentName, - int studyId) +SALOME_LifeCycleCORBA::LoadComponent(const Engines::ContainerParameters& params, + const char *componentName) { // --- Check if Component Name is known in ModuleCatalog if (! isKnownComponentClass(componentName)) return Engines::EngineComponent::_nil(); - Engines::ContainerParameters new_params; - convert(params, new_params); + Engines::ContainerParameters new_params(params); new_params.resource_params.componentList.length(1); new_params.resource_params.componentList[0] = componentName; + new_params.resource_params.can_run_containers = true; Engines::ResourceList_var listOfResources; try { listOfResources = _ResManager->GetFittingResources(new_params.resource_params); } - catch( const SALOME::SALOME_Exception& ex ) + catch( const SALOME::SALOME_Exception& /*ex*/ ) //!< TODO: unused variable { return Engines::EngineComponent::_nil(); } new_params.resource_params.resList = listOfResources; Engines::EngineComponent_var compo = _LoadComponent(new_params, - componentName, - studyId); + componentName); return compo._retn(); } //============================================================================= /*! \brief Find an already existing and registered component instance or load a new - * component instance on a container defined by machine parameters. + * component instance on a container defined by its parameters. * - * \param params machine parameters like type or name... + * \param params container parameters like type or name... * \param componentName the name of component class - * \param studyId default = 0 : multistudy instance * \return a CORBA reference of the component instance, or _nil if problem */ //============================================================================= -Engines::EngineComponent_ptr -SALOME_LifeCycleCORBA:: -FindOrLoad_Component(const Engines::MachineParameters& params, - const char *componentName, - int studyId) -{ - // --- Check if Component Name is known in ModuleCatalog - - if (! isKnownComponentClass(componentName)) - return Engines::EngineComponent::_nil(); - - Engines::ContainerParameters new_params; - convert(params, new_params); - new_params.resource_params.componentList.length(1); - new_params.resource_params.componentList[0] = componentName; - - // For Compatibility -> if hostname == localhost put name == hostname - if (std::string(new_params.resource_params.hostname.in()) == "localhost") - { - new_params.resource_params.hostname = CORBA::string_dup(Kernel_Utils::GetHostname().c_str()); - new_params.resource_params.name = CORBA::string_dup(Kernel_Utils::GetHostname().c_str()); - } - - Engines::ResourceList_var listOfResources; - try - { - listOfResources = _ResManager->GetFittingResources(new_params.resource_params); - } - catch( const SALOME::SALOME_Exception& ex ) - { - return Engines::EngineComponent::_nil(); - } - - Engines::EngineComponent_var compo = _FindComponent(new_params, - componentName, - studyId, - listOfResources); - - if(CORBA::is_nil(compo)) - { - new_params.resource_params.resList = listOfResources; - compo = _LoadComponent(new_params, - componentName, - studyId); - } - - return compo._retn(); -} - Engines::EngineComponent_ptr SALOME_LifeCycleCORBA:: FindOrLoad_Component(const Engines::ContainerParameters& params, - const char *componentName, - int studyId) + const char *componentName) { // --- Check if Component Name is known in ModuleCatalog @@ -275,28 +227,27 @@ FindOrLoad_Component(const Engines::ContainerParameters& params, Engines::ContainerParameters new_params(params); new_params.resource_params.componentList.length(1); new_params.resource_params.componentList[0] = componentName; + new_params.resource_params.can_run_containers = true; Engines::ResourceList_var listOfResources; try { listOfResources = _ResManager->GetFittingResources(new_params.resource_params); } - catch( const SALOME::SALOME_Exception& ex ) + catch( const SALOME::SALOME_Exception& /*ex*/ ) //!< TODO: unused variable { return Engines::EngineComponent::_nil(); } Engines::EngineComponent_var compo = _FindComponent(new_params, - componentName, - studyId, - listOfResources); + componentName, + listOfResources); if(CORBA::is_nil(compo)) { new_params.resource_params.resList = listOfResources; compo = _LoadComponent(new_params, - componentName, - studyId); + componentName); } return compo._retn(); @@ -327,24 +278,23 @@ SALOME_LifeCycleCORBA::FindOrLoad_Component(const char *containerName, // --- Check if containerName contains machine name (if yes: rg>0) char *stContainer=strdup(containerName); std::string st2Container(stContainer); - int rg=st2Container.find("/"); + size_t rg=st2Container.find("/"); - Engines::MachineParameters_var params=new Engines::MachineParameters; + Engines::ContainerParameters params; preSet(params); - if (rg<0) + if (rg == std::string::npos) { // containerName doesn't contain "/" => Local container - params->container_name=CORBA::string_dup(stContainer); - params->hostname=""; + params.container_name = CORBA::string_dup(stContainer); } - else + else { stContainer[rg]='\0'; - params->container_name=CORBA::string_dup(stContainer+rg+1); - params->hostname=CORBA::string_dup(stContainer); + params.container_name = CORBA::string_dup(stContainer+rg+1); + params.resource_params.hostname = CORBA::string_dup(stContainer); } - params->isMPI = false; - SCRUTE(params->container_name); + params.isMPI = false; + SCRUTE(params.container_name); free(stContainer); return FindOrLoad_Component(params, componentName); } @@ -362,12 +312,12 @@ bool SALOME_LifeCycleCORBA::isKnownComponentClass(const char *componentName) try { CORBA::Object_var obj = _NS->Resolve("/Kernel/ModulCatalog"); - SALOME_ModuleCatalog::ModuleCatalog_var Catalog = + SALOME_ModuleCatalog::ModuleCatalog_var Catalog = SALOME_ModuleCatalog::ModuleCatalog::_narrow(obj) ; ASSERT(! CORBA::is_nil(Catalog)); - SALOME_ModuleCatalog::Acomponent_var compoInfo = + SALOME_ModuleCatalog::Acomponent_var compoInfo = Catalog->GetComponent(componentName); - if (CORBA::is_nil (compoInfo)) + if (CORBA::is_nil (compoInfo)) { MESSAGE("Catalog Error: Component not found in the catalog " << componentName); return false; @@ -386,55 +336,11 @@ bool SALOME_LifeCycleCORBA::isKnownComponentClass(const char *componentName) } //============================================================================= -/*! - * Not so complex... useful ? - */ -//============================================================================= - -bool -SALOME_LifeCycleCORBA::isMpiContainer(const Engines::ContainerParameters& params) - throw(IncompatibleComponent) -{ - 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 - * - nb_proc = 0 : 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 +/*! \brief Initialisation of a given Engines::ResourceParameters with default values. */ //============================================================================= -void SALOME_LifeCycleCORBA::preSet(Engines::MachineParameters& params) -{ - params.container_name = ""; - params.hostname = ""; - 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; -} - -void +void SALOME_LifeCycleCORBA::preSet(Engines::ResourceParameters& params) { params.name = ""; @@ -446,8 +352,15 @@ SALOME_LifeCycleCORBA::preSet(Engines::ResourceParameters& params) params.nb_node = 0; params.nb_proc_per_node = 0; params.policy = ""; + params.can_launch_batch_jobs = false; + params.can_run_containers = false; } +//============================================================================= +/*! \brief Initialisation of a given Engines::ContainerParameters with default values. + */ +//============================================================================= + void SALOME_LifeCycleCORBA::preSet( Engines::ContainerParameters& params) { params.container_name = ""; @@ -459,43 +372,15 @@ void SALOME_LifeCycleCORBA::preSet( Engines::ContainerParameters& params) SALOME_LifeCycleCORBA::preSet(params.resource_params); } -void -SALOME_LifeCycleCORBA::convert(const Engines::MachineParameters& params_in, - Engines::ContainerParameters& params_out) -{ - SALOME_LifeCycleCORBA::preSet(params_out); - - // Container part - params_out.container_name = params_in.container_name; - params_out.mode = params_in.mode; - params_out.workingdir = params_in.workingdir; - params_out.isMPI = params_in.isMPI; - params_out.parallelLib = params_in.parallelLib; - - // Resource part - params_out.resource_params.hostname = params_in.hostname; - params_out.resource_params.OS = params_in.OS; - params_out.resource_params.mem_mb = params_in.mem_mb; - params_out.resource_params.cpu_clock = params_in.cpu_clock; - params_out.resource_params.nb_node = params_in.nb_node; - params_out.resource_params.nb_proc_per_node = params_in.nb_proc_per_node; - params_out.resource_params.policy = params_in.policy; - params_out.resource_params.componentList = params_in.componentList; - - params_out.resource_params.resList.length(params_in.computerList.length()); - for (CORBA::ULong i = 0; i < params_in.computerList.length(); i++) - params_out.resource_params.resList[i] = params_in.computerList[i]; -} - //============================================================================= -/*! +/*! * \return a number of processors not 0, only for MPI containers */ //============================================================================= int SALOME_LifeCycleCORBA::NbProc(const Engines::ContainerParameters& params) { - if( !isMpiContainer(params) ) + if( !params.isMPI ) return 0; else if( params.nb_proc <= 0 ) return 1; @@ -532,15 +417,15 @@ Engines::ResourcesManager_ptr SALOME_LifeCycleCORBA::getResourcesManager() } //============================================================================= -/*! \brief shutdown all the SALOME servers except SALOME_Session_Server, omniNames and notifd +/*! \brief shutdown all the SALOME servers except SALOME_Session_Server and omniNames */ //============================================================================= -void SALOME_LifeCycleCORBA::shutdownServers() +void SALOME_LifeCycleCORBA::shutdownServers(bool shutdownLauncher) { // 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"); @@ -550,11 +435,12 @@ void SALOME_LifeCycleCORBA::shutdownServers() if (!CORBA::is_nil(session)) { pid = session->getPID(); + session->Shutdown(); } } std::string hostname = Kernel_Utils::GetHostname(); - + // 1) ConnectionManager try { @@ -563,7 +449,7 @@ void SALOME_LifeCycleCORBA::shutdownServers() if ( !CORBA::is_nil(connMan) && ( pid != connMan->getPID() ) ) connMan->ShutdownWithExit(); } - catch(const CORBA::Exception& e) + catch(const CORBA::Exception& /*e*/) //!< TODO: unused variable { // ignore and continue } @@ -580,12 +466,13 @@ void SALOME_LifeCycleCORBA::shutdownServers() // 2) SALOMEDS try { - 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(); + CORBA::Object_var objSDS = _NS->Resolve("/Study"); + SALOMEDS::Study_var study = SALOMEDS::Study::_narrow(objSDS) ; + if ( !CORBA::is_nil(study) && ( pid != study->getPID() ) ) + study->Shutdown(); + _NS->Destroy_Name("/Study"); } - catch(const CORBA::Exception& e) + catch(const CORBA::Exception& /*e*/) //!< TODO: unused variable { // ignore and continue } @@ -602,8 +489,9 @@ void SALOME_LifeCycleCORBA::shutdownServers() SALOME_ModuleCatalog::ModuleCatalog_var catalog = SALOME_ModuleCatalog::ModuleCatalog::_narrow(objMC); if ( !CORBA::is_nil(catalog) && ( pid != catalog->getPID() ) ) catalog->shutdown(); + _NS->Destroy_Name("/Kernel/ModulCatalog"); } - catch(const CORBA::Exception& e) + catch(const CORBA::Exception& /*e*/) //!< TODO: unused variable { // ignore and continue } @@ -612,55 +500,66 @@ void SALOME_LifeCycleCORBA::shutdownServers() #ifndef WIN32 nanosleep(&ts_req,0); #endif - - // 4) SalomeLauncher + // 4 ) Remote ScopeServer (the DataServer is hosted by SalomeLauncher shutdown right after on point 6) try { - 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(); + CORBA::Object_var objDSM(_NS->Resolve(SALOMESDS::DataServerManager::NAME_IN_NS)); + SALOME::DataServerManager_var dsm(SALOME::DataServerManager::_narrow(objDSM)); + if ( !CORBA::is_nil(dsm) ) + dsm->shutdownScopes(); } - catch(const CORBA::Exception& e) + catch(const CORBA::Exception& /*e*/) //!< TODO: unused variable { // ignore and continue } - + // 5) External server launcher (the ExternalServer is hosted by SalomeLauncher shutdown right after on point 6) + try + { + CORBA::Object_var objDSM(_NS->Resolve(SALOME_ExternalServerLauncher::NAME_IN_NS)); + SALOME::ExternalServerLauncher_var dsm(SALOME::ExternalServerLauncher::_narrow(objDSM)); + if ( !CORBA::is_nil(dsm) ) + dsm->shutdownServers(); + } + catch(const CORBA::Exception& /*e*/) //!< TODO: unused variable + { + // ignore and continue + } + // 6) SalomeLauncher + try + { + if(shutdownLauncher){ + 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(); + } + } + catch(const CORBA::Exception& /*e*/) //!< TODO: unused variable + { + // ignore and continue + } + //Wait some time so that launcher be completely shutdown #ifndef WIN32 nanosleep(&ts_req,0); #endif - // 5) Registry + // 6) Registry try { 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(); + _NS->Destroy_Name("/Registry"); } - catch(const CORBA::Exception& e) + catch(const CORBA::Exception& /*e*/) //!< TODO: unused variable { // ignore and continue } - // 6) Session - if ( !CORBA::is_nil( session ) ) { - try - { - session->Shutdown(); - } - catch(const CORBA::Exception& e) - { - // ignore and continue - } - } - // 7) Logger - int argc = 0; - char *xargv = (char*)""; - char **argv = &xargv; - CORBA::ORB_var orb = CORBA::ORB_init(argc, argv); + CORBA::ORB_var orb = KERNEL::GetRefToORB(); CORBA::Object_var objLog = CORBA::Object::_nil(); CosNaming::NamingContext_var inc; @@ -670,8 +569,8 @@ void SALOME_LifeCycleCORBA::shutdownServers() name.length(1); name[0].id = CORBA::string_dup(stdname.c_str()); try - { - if(!CORBA::is_nil(orb)) + { + if(!CORBA::is_nil(orb)) theObj = orb->resolve_initial_references("NameService"); if (!CORBA::is_nil(theObj)) inc = CosNaming::NamingContext::_narrow(theObj); @@ -679,7 +578,7 @@ void SALOME_LifeCycleCORBA::shutdownServers() catch(...) { } - if(!CORBA::is_nil(inc)) + if(!CORBA::is_nil(inc)) { try { @@ -695,36 +594,42 @@ void SALOME_LifeCycleCORBA::shutdownServers() } //============================================================================= -/*! \brief shutdown omniNames and notifd +/*! \brief shutdown omniNames */ //============================================================================= void SALOME_LifeCycleCORBA::killOmniNames() { std::string portNumber (::getenv ("NSPORT") ); - if ( !portNumber.empty() ) + std::string python_exe; + + python_exe = std::string("python3"); + + if ( !portNumber.empty() ) { -#ifdef WNT -#else - std::string cmd ; - cmd = std::string( "ps -eo pid,command | grep -v grep | grep -E \"omniNames.*") - + portNumber - + std::string("\" | awk '{cmd=sprintf(\"kill -9 %s\",$1); system(cmd)}'" ); + std::string cmd; + + cmd = std::string("from salome_utils import killOmniNames; "); + cmd += std::string("killOmniNames(") + portNumber + "); "; + cmd = python_exe + std::string(" -c \"") + cmd +"\""; MESSAGE(cmd); - try { - system ( cmd.c_str() ); - } - catch ( ... ) { - } -#endif + system( cmd.c_str() ); + + cmd = std::string("from killSalomeWithPort import cleanApplication; "); + cmd += std::string("cleanApplication(") + portNumber + "); "; + cmd = python_exe + std::string(" -c \"") + cmd +"\""; + MESSAGE(cmd); + system( cmd.c_str() ); } - - // NPAL 18309 (Kill Notifd) - if ( !portNumber.empty() ) + + // shutdown portmanager + if ( !portNumber.empty() ) { - std::string cmd = ("from killSalomeWithPort import killNotifdAndClean; "); - cmd += std::string("killNotifdAndClean(") + portNumber + "); "; - cmd = std::string("python -c \"") + cmd +"\" > /dev/null 2> /dev/null"; + std::string cmd; + + cmd = std::string("from PortManager import releasePort; "); + cmd += std::string("releasePort(") + portNumber + "); "; + cmd = python_exe + std::string(" -c \"") + cmd +"\""; MESSAGE(cmd); system( cmd.c_str() ); } @@ -738,7 +643,6 @@ void SALOME_LifeCycleCORBA::killOmniNames() * * \param params machine parameters like type or name... * \param componentName the name of component class - * \param studyId default = 0 : multistudy instance * \param listOfMachines list of machine address * \return a CORBA reference of the component instance, or _nil if not found */ @@ -748,7 +652,6 @@ Engines::EngineComponent_ptr SALOME_LifeCycleCORBA:: _FindComponent(const Engines::ContainerParameters& params, const char *componentName, - int studyId, const Engines::ResourceList& listOfResources) { // --- build the list of machines on which the component is already running @@ -763,7 +666,9 @@ _FindComponent(const Engines::ContainerParameters& params, for(unsigned int i=0; i < listOfResources.length(); i++) { const char * currentResource = listOfResources[i]; - CORBA::Object_var obj = _NS->ResolveComponent(currentResource, + Engines::ResourceDefinition_var resource_definition = + _ResManager->GetResourceDefinition(currentResource); + CORBA::Object_var obj = _NS->ResolveComponent(resource_definition->hostname.in(), containerName, componentName, nbproc); @@ -776,7 +681,9 @@ _FindComponent(const Engines::ContainerParameters& params, { resourcesOK->length(lghtOfresourcesOK); CORBA::String_var bestResource = _ResManager->FindFirst(resourcesOK); - CORBA::Object_var obj = _NS->ResolveComponent(bestResource, + Engines::ResourceDefinition_var resource_definition = + _ResManager->GetResourceDefinition(bestResource); + CORBA::Object_var obj = _NS->ResolveComponent(resource_definition->hostname.in(), containerName, componentName, nbproc); @@ -795,16 +702,14 @@ _FindComponent(const Engines::ContainerParameters& params, * * \param params machine parameters like type or name... * \param componentName the name of component class - * \param studyId default = 0 : multistudy instance * \return a CORBA reference of the component instance, or _nil if problem */ //============================================================================= -Engines::EngineComponent_ptr +Engines::EngineComponent_ptr SALOME_LifeCycleCORBA:: -_LoadComponent(const Engines::ContainerParameters& params, - const char *componentName, - int studyId) +_LoadComponent(const Engines::ContainerParameters& params, + const char *componentName) { MESSAGE("_LoadComponent, required " << params.container_name << " " << componentName << " " << NbProc(params)); @@ -816,7 +721,7 @@ _LoadComponent(const Engines::ContainerParameters& params, char* reason; bool isLoadable = cont->load_component_Library(componentName,reason); - if (!isLoadable) + if (!isLoadable) { //std::cerr << reason << std::endl; CORBA::string_free(reason); @@ -825,7 +730,7 @@ _LoadComponent(const Engines::ContainerParameters& params, CORBA::string_free(reason); Engines::EngineComponent_var myInstance = - cont->create_component_instance(componentName, studyId); + cont->create_component_instance(componentName); return myInstance._retn(); } @@ -834,14 +739,12 @@ _LoadComponent(const Engines::ContainerParameters& params, * * \param params machine parameters like type or name... * \param componentName the name of component class - * \param studyId default = 0 : multistudy instance * \return a CORBA reference of the parallel component instance, or _nil if problem */ //============================================================================= Engines::EngineComponent_ptr SALOME_LifeCycleCORBA::Load_ParallelComponent(const Engines::ContainerParameters& params, - const char *componentName, - int studyId) + const char *componentName) { MESSAGE("Entering LoadParallelComponent"); @@ -877,7 +780,7 @@ SALOME_LifeCycleCORBA::Load_ParallelComponent(const Engines::ContainerParameters // @PARALLEL@ permits to identify that the component requested // is a parallel component. std::string name = std::string(componentName); - Engines::EngineComponent_var myInstance = cont->create_component_instance(name.c_str(), studyId); + Engines::EngineComponent_var myInstance = cont->create_component_instance(name.c_str()); if (CORBA::is_nil(myInstance)) INFOS("create_component_instance returns a NULL component !"); return myInstance._retn(); @@ -918,7 +821,7 @@ void SALOME_LifeCycleCORBA::copyFile(const char* hostSrc, const char* fileSrc, c * * \return the naming service */ -SALOME_NamingService * SALOME_LifeCycleCORBA::namingService() +SALOME_NamingService_Abstract * SALOME_LifeCycleCORBA::namingService() { return _NS; } @@ -929,5 +832,8 @@ SALOME_NamingService * SALOME_LifeCycleCORBA::namingService() */ CORBA::ORB_ptr SALOME_LifeCycleCORBA::orb() { - return _NS->orb(); + SALOME_NamingService *NSC = dynamic_cast(_NS); + if(!_NS) + THROW_SALOME_EXCEPTION("SALOME_LifeCycleCORBA::orb : not a CORBA SALOME_NamingService "); + return NSC->orb(); }