From 3e331eb80221183c95b5c7557d1b00df5efd5683 Mon Sep 17 00:00:00 2001 From: Anthony Geay Date: Thu, 31 Jul 2014 16:08:59 +0200 Subject: [PATCH] B4 an API modification to generalize launching of kernel containers. --- src/engine/Container.hxx | 2 + src/engine/HomogeneousPoolContainer.hxx | 2 + src/engine/ServiceNode.hxx | 9 +- src/engine/Test/ContainerTest.hxx | 4 + src/runtime/CMakeLists.txt | 2 + src/runtime/SalomeContainer.cxx | 225 +-------------------- src/runtime/SalomeContainer.hxx | 3 +- src/runtime/SalomeContainerTools.cxx | 256 ++++++++++++++++++++++++ src/runtime/SalomeContainerTools.hxx | 12 ++ src/runtime/SalomeHPContainer.cxx | 39 ++++ src/runtime/SalomeHPContainer.hxx | 31 +-- 11 files changed, 336 insertions(+), 249 deletions(-) create mode 100644 src/runtime/SalomeHPContainer.cxx diff --git a/src/engine/Container.hxx b/src/engine/Container.hxx index 5e37e4a60..00675f643 100644 --- a/src/engine/Container.hxx +++ b/src/engine/Container.hxx @@ -54,6 +54,8 @@ namespace YACS virtual void attachOnCloning() const; virtual void dettachOnCloning() const; bool isAttachedOnCloning() const; + virtual void lock() = 0; + virtual void unLock() = 0; //! \b WARNING ! clone behaviour \b MUST be in coherence with what is returned by isAttachedOnCloning() method virtual Container *clone() const = 0; virtual Container *cloneAlways() const = 0; diff --git a/src/engine/HomogeneousPoolContainer.hxx b/src/engine/HomogeneousPoolContainer.hxx index 6bb2bd812..7ca663a7a 100644 --- a/src/engine/HomogeneousPoolContainer.hxx +++ b/src/engine/HomogeneousPoolContainer.hxx @@ -37,6 +37,8 @@ namespace YACS */ class YACSLIBENGINE_EXPORT HomogeneousPoolContainer : public Container { + public: + virtual void setSizeOfPool(int sz) = 0; protected: HomogeneousPoolContainer(); #ifndef SWIG diff --git a/src/engine/ServiceNode.hxx b/src/engine/ServiceNode.hxx index 9db9bb685..a079a9288 100644 --- a/src/engine/ServiceNode.hxx +++ b/src/engine/ServiceNode.hxx @@ -31,7 +31,7 @@ namespace YACS { class ComponentInstance; - class YACSLIBENGINE_EXPORT ServiceNode: public ElementaryNode + class YACSLIBENGINE_EXPORT ServiceNode : public ElementaryNode { protected: ServiceNode(const std::string& name); @@ -45,16 +45,17 @@ namespace YACS virtual Container *getContainer(); virtual void setRef(const std::string& ref); virtual std::string getRef(); - virtual void setMethod(const std::string& method){ _method=method; } + virtual void setMethod(const std::string& method) { _method=method; } virtual std::string getMethod(){return _method;} virtual ServiceNode *createNode(const std::string& name) = 0; virtual ~ServiceNode(); virtual void accept(Visitor *visitor); virtual std::string getKind() const; + virtual std::string typeName() { return "YACS__ENGINE__ServiceNode"; } + public: static const char KIND[]; - virtual std::string typeName() {return "YACS__ENGINE__ServiceNode";} protected: - ComponentInstance* _component; + ComponentInstance *_component; std::string _method; std::string _ref; }; diff --git a/src/engine/Test/ContainerTest.hxx b/src/engine/Test/ContainerTest.hxx index 9dc1f3d7e..d77edcce2 100644 --- a/src/engine/Test/ContainerTest.hxx +++ b/src/engine/Test/ContainerTest.hxx @@ -37,6 +37,8 @@ namespace YACS Container *clone() const; Container *cloneAlways() const; // + void lock() { } + void unLock() { } void clearProperties() { } void setProperty(const std::string& name,const std::string& value) { } std::string getProperty(const std::string& name) const { } @@ -65,6 +67,8 @@ namespace YACS Container *clone() const; Container *cloneAlways() const; // + void lock() { } + void unLock() { } void clearProperties() { } void setProperty(const std::string& name,const std::string& value) { } std::string getProperty(const std::string& name) const { } diff --git a/src/runtime/CMakeLists.txt b/src/runtime/CMakeLists.txt index c5d9ef548..bb8e6299b 100644 --- a/src/runtime/CMakeLists.txt +++ b/src/runtime/CMakeLists.txt @@ -119,6 +119,7 @@ SET(YACSRuntimeSALOME_HEADERS SalomeContainer.hxx SalomeContainerTools.hxx SalomeContainerHelper.hxx + SalomeHPContainer.hxx SALOMEDispatcher.hxx SalomeProc.hxx SalomePythonComponent.hxx @@ -170,6 +171,7 @@ SET(YACSRuntimeSALOME_SOURCES SalomePythonComponent.cxx SalomeContainer.cxx SalomeContainerTools.cxx + SalomeHPContainer.cxx SalomeContainerHelper.cxx PythonPorts.cxx XMLNode.cxx diff --git a/src/runtime/SalomeContainer.cxx b/src/runtime/SalomeContainer.cxx index cea49d6a0..ef67c0631 100644 --- a/src/runtime/SalomeContainer.cxx +++ b/src/runtime/SalomeContainer.cxx @@ -51,13 +51,12 @@ using namespace YACS::ENGINE; using namespace std; -SalomeContainer::SalomeContainer():_launchMode("start"),_launchModeType(new SalomeContainerMonoHelper),_shutdownLevel(999) +SalomeContainer::SalomeContainer():_launchModeType(new SalomeContainerMonoHelper),_shutdownLevel(999) { } SalomeContainer::SalomeContainer(const SalomeContainer& other) : Container(other), - _launchMode(other._launchMode), _launchModeType(other._launchModeType->deepCpyOnlyStaticInfo()), _shutdownLevel(other._shutdownLevel), _sct(other._sct) @@ -132,7 +131,7 @@ void SalomeContainer::clearProperties() _sct.clearProperties(); } -void SalomeContainer::addComponentName(std::string name) +void SalomeContainer::addComponentName(const std::string& name) { _componentNames.push_back(name); } @@ -148,75 +147,7 @@ void SalomeContainer::addToResourceList(const std::string& name) */ CORBA::Object_ptr SalomeContainer::loadComponent(ComponentInstance *inst) { - DEBTRACE("SalomeContainer::loadComponent "); - lock();//To be sure - if(!isAlreadyStarted(inst)) - { - try - { - start(inst); - } - catch(Exception& e) - { - unLock(); - throw e; - } - } - unLock(); - lock();//To be sure - CORBA::Object_ptr objComponent=CORBA::Object::_nil(); - std::string compoName=inst->getCompoName(); - const char* componentName=compoName.c_str(); - Engines::Container_var container(_launchModeType->getContainer(inst)); - - char* reason; - - bool isLoadable = container->load_component_Library(componentName, reason); - if (isLoadable) - { - CORBA::string_free(reason); - int studyid=1; - Proc* p=getProc(); - if(p) - { - std::string value=p->getProperty("DefaultStudyID"); - if(!value.empty()) - studyid= atoi(value.c_str()); - } - // prepare component instance properties - Engines::FieldsDict_var env = new Engines::FieldsDict; - std::map properties = inst->getProperties(); - if(p) - { - std::map procMap=p->getProperties(); - properties.insert(procMap.begin(),procMap.end()); - } - - std::map::const_iterator itm; - env->length(properties.size()); - int item=0; - for(itm = properties.begin(); itm != properties.end(); ++itm, item++) - { - DEBTRACE("envname="<first<<" envvalue="<< itm->second); - env[item].key= CORBA::string_dup(itm->first.c_str()); - env[item].value <<= itm->second.c_str(); - } - - objComponent=container->create_component_instance_env(componentName, studyid, env, reason); - } - - if(CORBA::is_nil(objComponent)) - { - unLock(); - std::string text="Error while trying to create a new component: component '"+ compoName; - text=text+"' is not installed or it's a wrong name"; - text += '\n'; - text += reason; - CORBA::string_free(reason); - throw Exception(text); - } - unLock(); - return objComponent; + return SalomeContainerTools::LoadComponent(_launchModeType,this,inst); } //! Get the container placement id for a component instance @@ -226,23 +157,7 @@ CORBA::Object_ptr SalomeContainer::loadComponent(ComponentInstance *inst) */ std::string SalomeContainer::getPlacementId(const ComponentInstance *inst) const { - - if(isAlreadyStarted(inst)) - { - Engines::Container_var container(_launchModeType->getContainer(inst)); - const char *what="/"; - CORBA::String_var corbaStr=container->name(); - string ret(corbaStr); - - //Salome FOREVER ... - std::string::size_type i=ret.find_first_of(what,0); - i=ret.find_first_of(what, i==std::string::npos ? i:i+1); - if(i!=std::string::npos) - return ret.substr(i+1); - return ret; - } - else - return "Not placed yet !!!"; + return SalomeContainerTools::GetPlacementId(_launchModeType,this,inst); } //! Get the container full path for a component instance @@ -252,23 +167,7 @@ std::string SalomeContainer::getPlacementId(const ComponentInstance *inst) const */ std::string SalomeContainer::getFullPlacementId(const ComponentInstance *inst) const { - - if(isAlreadyStarted(inst)) - { - Engines::Container_var container(_launchModeType->getContainer(inst)); - try - { - CORBA::String_var corbaStr=container->name(); - string ret(corbaStr); - return ret; - } - catch(...) - { - return "Unknown_placement"; - } - } - else - return "Not_placed_yet"; + return SalomeContainerTools::GetFullPlacementId(_launchModeType,this,inst); } //! Check if the component instance container is already started @@ -292,119 +191,7 @@ Engines::Container_ptr SalomeContainer::getContainerPtr(const ComponentInstance */ void SalomeContainer::start(const ComponentInstance *inst) throw(YACS::Exception) { - CORBA::ORB_ptr orb(getSALOMERuntime()->getOrb()); - SALOME_NamingService ns; - try - { - ns.init_orb(orb); - } - catch(SALOME_Exception& e) - { - throw Exception("SalomeContainer::start : Unable to contact the SALOME Naming Service"); - } - CORBA::Object_var obj(ns.Resolve(SALOME_ContainerManager::_ContainerManagerNameInNS)); - Engines::ContainerManager_var contManager(Engines::ContainerManager::_narrow(obj)); - - std::string str(_sct.getContainerName()); - DEBTRACE("SalomeContainer::start " << str <<";"<< _sct.getHostName() <<";"<<_type); - - // Finalize parameters with components found in the container - std::vector::iterator iter; - for(CORBA::ULong i=0; i < _componentNames.size();i++) - _sct.addToComponentList(_componentNames[i]); - Engines::ContainerParameters myparams(_sct.getParameters()); - - bool namedContainer=false; - if(str != "") - namedContainer=true; - - //If a container_name is given try to find an already existing container in naming service - //If not found start a new container with the given parameters - if (dynamic_cast(_launchModeType) && str != "") - { - myparams.mode="getorstart"; - } - - if (str == "") - { - //give a almost unique name to the container : Pid_Name_Addr - std::ostringstream stream; - stream << getpid(); - stream << "_"; - stream << _name; - stream << "_"; - stream << (void *)(this); - DEBTRACE("container_name="<GiveContainer(myparams); - } - catch( const SALOME::SALOME_Exception& ex ) - { - std::string msg="SalomeContainer::start : no existing container : "; - msg += '\n'; - msg += ex.details.text.in(); - DEBTRACE( msg ); - } - catch(...) - { - } - - if(!CORBA::is_nil(trueCont)) - { - _shutdownLevel=3; - DEBTRACE( "container found: " << str << " " << _shutdownLevel ); - } - else - { - _shutdownLevel=2; - myparams.mode="start"; - DEBTRACE( "container not found: " << str << " " << _shutdownLevel); - } - } - - if(CORBA::is_nil(trueCont)) - try - { - // --- GiveContainer is used in batch mode to retreive launched containers, - // and is equivalent to StartContainer when not in batch. - trueCont=contManager->GiveContainer(myparams); - } - catch( const SALOME::SALOME_Exception& ex ) - { - std::string msg="SalomeContainer::start : Unable to launch container in Salome : "; - msg += '\n'; - msg += ex.details.text.in(); - throw Exception(msg); - } - catch(CORBA::COMM_FAILURE&) - { - throw Exception("SalomeContainer::start : Unable to launch container in Salome : CORBA Comm failure detected"); - } - catch(CORBA::Exception&) - { - throw Exception("SalomeContainer::start : Unable to launch container in Salome : Unexpected CORBA failure detected"); - } - - if(CORBA::is_nil(trueCont)) - throw Exception("SalomeContainer::start : Unable to launch container in Salome. Check your CatalogResources.xml file"); - - _launchModeType->setContainer(inst,trueCont); - - CORBA::String_var containerName(trueCont->name()),hostName(trueCont->getHostName()); - std::cerr << "SalomeContainer launched : " << containerName << " " << hostName << " " << trueCont->getPID() << std::endl; + SalomeContainerTools::Start(_componentNames,_launchModeType,_sct,_shutdownLevel,this,inst); } void SalomeContainer::shutdown(int level) diff --git a/src/runtime/SalomeContainer.hxx b/src/runtime/SalomeContainer.hxx index fc6d6b2aa..8fd377c9f 100644 --- a/src/runtime/SalomeContainer.hxx +++ b/src/runtime/SalomeContainer.hxx @@ -56,7 +56,7 @@ namespace YACS void setProperty(const std::string& name, const std::string& value); std::string getProperty(const std::string& name) const; void clearProperties(); - void addComponentName(std::string name); + void addComponentName(const std::string& name); void addToResourceList(const std::string& name); virtual CORBA::Object_ptr loadComponent(ComponentInstance *inst); void shutdown(int level); @@ -71,7 +71,6 @@ namespace YACS //! thread safety in Salome ??? YACS::BASES::Mutex _mutex; std::vector _componentNames; - std::string _launchMode; SalomeContainerHelper *_launchModeType; int _shutdownLevel; SalomeContainerTools _sct; diff --git a/src/runtime/SalomeContainerTools.cxx b/src/runtime/SalomeContainerTools.cxx index 8eb41946e..fd3336efd 100644 --- a/src/runtime/SalomeContainerTools.cxx +++ b/src/runtime/SalomeContainerTools.cxx @@ -21,7 +21,13 @@ #include "SALOME_LifeCycleCORBA.hxx" #include "SALOME_NamingService.hxx" #include "SALOME_ResourcesManager.hxx" +#include "SALOME_ContainerManager.hxx" +#include "Container.hxx" +#include "YacsTrace.hxx" +#include "Proc.hxx" +#include "ComponentInstance.hxx" +#include "SalomeContainerHelper.hxx" #include "RuntimeSALOME.hxx" #include "Exception.hxx" @@ -217,6 +223,33 @@ std::string SalomeContainerTools::getContainerName() const return std::string(_params.container_name); } +void SalomeContainerTools::setContainerName(const std::string& name) +{ + _params.container_name=CORBA::string_dup(name.c_str()); +} + +std::string SalomeContainerTools::getNotNullContainerName(const Container *contPtr, bool& isEmpty) const +{ + isEmpty=true; + std::string name(_params.container_name); + if(!name.empty()) + { + isEmpty=false; + return name; + } + else + { + //give a almost unique name to the container : Pid_Name_Addr + std::ostringstream stream; + stream << getpid(); + stream << "_"; + stream << contPtr->getName(); + stream << "_"; + stream << (const void *)contPtr; + return stream.str(); + } +} + std::string SalomeContainerTools::getHostName() const { return std::string(_params.resource_params.hostname); @@ -261,3 +294,226 @@ std::map SalomeContainerTools::getResourceProperties(co */ return properties; } + +/*! + * \param [in] compoNames + * \param [in,out] shutdownLevel + */ +void SalomeContainerTools::Start(const std::vector& compoNames, SalomeContainerHelper *schelp, SalomeContainerTools& sct, int& shutdownLevel, const Container *cont, const ComponentInstance *inst) +{ + CORBA::ORB_ptr orb(getSALOMERuntime()->getOrb()); + SALOME_NamingService ns; + try + { + ns.init_orb(orb); + } + catch(SALOME_Exception& e) + { + throw Exception("SalomeContainer::start : Unable to contact the SALOME Naming Service"); + } + CORBA::Object_var obj(ns.Resolve(SALOME_ContainerManager::_ContainerManagerNameInNS)); + Engines::ContainerManager_var contManager(Engines::ContainerManager::_narrow(obj)); + + bool isEmptyName; + std::string str(sct.getNotNullContainerName(cont,isEmptyName)); + DEBTRACE("SalomeContainer::start " << str <<";"<< _sct.getHostName() <<";"<<_type); + + // Finalize parameters with components found in the container + + for(std::vector::const_iterator iter=compoNames.begin();iter!=compoNames.end();iter++) + sct.addToComponentList(*iter); + + Engines::ContainerParameters myparams(sct.getParameters()); + + //If a container_name is given try to find an already existing container in naming service + //If not found start a new container with the given parameters + if (dynamic_cast(schelp) && str != "") + { + myparams.mode="getorstart"; + } + + if (isEmptyName) + { + shutdownLevel=1; + } + sct.setContainerName(str); + Engines::Container_var trueCont(Engines::Container::_nil()); + if(!isEmptyName && shutdownLevel==999) + { + //Make this only the first time start is called (_shutdownLevel==999) + //If the container is named, first try to get an existing container + //If there is an existing container use it and set the shutdown level to 3 + //If there is no existing container, try to launch a new one and set the shutdown level to 2 + myparams.mode="get"; + try + { + trueCont=contManager->GiveContainer(myparams); + } + catch( const SALOME::SALOME_Exception& ex ) + { + std::string msg="SalomeContainer::start : no existing container : "; + msg += '\n'; + msg += ex.details.text.in(); + DEBTRACE( msg ); + } + catch(...) + { + } + + if(!CORBA::is_nil(trueCont)) + { + shutdownLevel=3; + DEBTRACE( "container found: " << str << " " << _shutdownLevel ); + } + else + { + shutdownLevel=2; + myparams.mode="start"; + DEBTRACE( "container not found: " << str << " " << _shutdownLevel); + } + } + + if(CORBA::is_nil(trueCont)) + try + { + // --- GiveContainer is used in batch mode to retreive launched containers, + // and is equivalent to StartContainer when not in batch. + trueCont=contManager->GiveContainer(myparams); + } + catch( const SALOME::SALOME_Exception& ex ) + { + std::string msg="SalomeContainer::start : Unable to launch container in Salome : "; + msg += '\n'; + msg += ex.details.text.in(); + throw Exception(msg); + } + catch(CORBA::COMM_FAILURE&) + { + throw Exception("SalomeContainer::start : Unable to launch container in Salome : CORBA Comm failure detected"); + } + catch(CORBA::Exception&) + { + throw Exception("SalomeContainer::start : Unable to launch container in Salome : Unexpected CORBA failure detected"); + } + + if(CORBA::is_nil(trueCont)) + throw Exception("SalomeContainer::start : Unable to launch container in Salome. Check your CatalogResources.xml file"); + + schelp->setContainer(inst,trueCont); + + CORBA::String_var containerName(trueCont->name()),hostName(trueCont->getHostName()); + std::cerr << "SalomeContainer launched : " << containerName << " " << hostName << " " << trueCont->getPID() << std::endl; +} + +CORBA::Object_ptr SalomeContainerTools::LoadComponent(SalomeContainerHelper *launchModeType, Container *cont, ComponentInstance *inst) +{ + DEBTRACE("SalomeContainer::loadComponent "); + cont->lock();//To be sure + if(!cont->isAlreadyStarted(inst)) + { + try + { + cont->start(inst); + } + catch(Exception& e) + { + cont->unLock(); + throw e; + } + } + cont->unLock(); + cont->lock();//To be sure + CORBA::Object_ptr objComponent=CORBA::Object::_nil(); + std::string compoName(inst->getCompoName()); + const char* componentName=compoName.c_str(); + Engines::Container_var container(launchModeType->getContainer(inst)); + + char* reason; + + bool isLoadable = container->load_component_Library(componentName, reason); + if (isLoadable) + { + CORBA::string_free(reason); + int studyid=1; + Proc* p(cont->getProc()); + if(p) + { + std::string value(p->getProperty("DefaultStudyID")); + if(!value.empty()) + studyid= atoi(value.c_str()); + } + // prepare component instance properties + Engines::FieldsDict_var env = new Engines::FieldsDict; + std::map properties = inst->getProperties(); + if(p) + { + std::map procMap=p->getProperties(); + properties.insert(procMap.begin(),procMap.end()); + } + + std::map::const_iterator itm; + env->length(properties.size()); + int item=0; + for(itm = properties.begin(); itm != properties.end(); ++itm, item++) + { + DEBTRACE("envname="<first<<" envvalue="<< itm->second); + env[item].key= CORBA::string_dup(itm->first.c_str()); + env[item].value <<= itm->second.c_str(); + } + + objComponent=container->create_component_instance_env(componentName, studyid, env, reason); + } + + if(CORBA::is_nil(objComponent)) + { + cont->unLock(); + std::string text="Error while trying to create a new component: component '"+ compoName; + text=text+"' is not installed or it's a wrong name"; + text += '\n'; + text += reason; + CORBA::string_free(reason); + throw Exception(text); + } + cont->unLock(); + return objComponent; +} + +std::string SalomeContainerTools::GetPlacementId(SalomeContainerHelper *launchModeType, const Container *cont, const ComponentInstance *inst) +{ + if(cont->isAlreadyStarted(inst)) + { + Engines::Container_var container(launchModeType->getContainer(inst)); + const char *what="/"; + CORBA::String_var corbaStr(container->name()); + std::string ret(corbaStr); + + //Salome FOREVER ... + std::string::size_type i=ret.find_first_of(what,0); + i=ret.find_first_of(what, i==std::string::npos ? i:i+1); + if(i!=std::string::npos) + return ret.substr(i+1); + return ret; + } + else + return "Not placed yet !!!"; +} + +std::string SalomeContainerTools::GetFullPlacementId(SalomeContainerHelper *launchModeType, const Container *cont, const ComponentInstance *inst) +{ + if(cont->isAlreadyStarted(inst)) + { + Engines::Container_var container(launchModeType->getContainer(inst)); + try + { + CORBA::String_var corbaStr(container->name()); + std::string ret(corbaStr); + return ret; + } + catch(...) + { + return "Unknown_placement"; + } + } + else + return "Not_placed_yet"; +} diff --git a/src/runtime/SalomeContainerTools.hxx b/src/runtime/SalomeContainerTools.hxx index 0713e6d62..1ef95fb61 100644 --- a/src/runtime/SalomeContainerTools.hxx +++ b/src/runtime/SalomeContainerTools.hxx @@ -25,12 +25,17 @@ #include CORBA_CLIENT_HEADER(SALOME_ContainerManager) #include +#include #include namespace YACS { namespace ENGINE { + class Container; + class ComponentInstance; + class SalomeContainerHelper; + class YACSRUNTIMESALOME_EXPORT SalomeContainerTools { public: @@ -45,8 +50,15 @@ namespace YACS void addToResourceList(const std::string& name); public: std::string getContainerName() const; + void setContainerName(const std::string& name); + std::string getNotNullContainerName(const Container *contPtr, bool& isEmpty) const; std::string getHostName() const; Engines::ContainerParameters getParameters() const { return _params; } + public: + static void Start(const std::vector& compoNames, SalomeContainerHelper *schelp, SalomeContainerTools& sct, int& shutdownLevel, const Container *cont, const ComponentInstance *inst); + static CORBA::Object_ptr LoadComponent(SalomeContainerHelper *launchModeType, Container *cont, ComponentInstance *inst); + static std::string GetPlacementId(SalomeContainerHelper *launchModeType, const Container *cont, const ComponentInstance *inst); + static std::string GetFullPlacementId(SalomeContainerHelper *launchModeType, const Container *cont, const ComponentInstance *inst); protected: std::map _propertyMap; Engines::ContainerParameters _params; diff --git a/src/runtime/SalomeHPContainer.cxx b/src/runtime/SalomeHPContainer.cxx new file mode 100644 index 000000000..aee80db77 --- /dev/null +++ b/src/runtime/SalomeHPContainer.cxx @@ -0,0 +1,39 @@ +// Copyright (C) 2006-2014 CEA/DEN, EDF R&D +// +// 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, 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 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "SalomeHPContainer.hxx" + +using namespace YACS::ENGINE; + +SalomeHPContainer::SalomeHPContainer():_shutdownLevel(999) +{ +} + +SalomeHPContainer::SalomeHPContainer(const SalomeHPContainer& other):_shutdownLevel(999) +{ +} + +void SalomeHPContainer::setSizeOfPool(int sz) +{ + _launchModeType.resize(sz); +} + +SalomeHPContainer::~SalomeHPContainer() +{ +} diff --git a/src/runtime/SalomeHPContainer.hxx b/src/runtime/SalomeHPContainer.hxx index 016ed66ed..53033cd26 100644 --- a/src/runtime/SalomeHPContainer.hxx +++ b/src/runtime/SalomeHPContainer.hxx @@ -22,6 +22,8 @@ #include "YACSRuntimeSALOMEExport.hxx" #include "HomogeneousPoolContainer.hxx" +#include "SalomeContainerHelper.hxx" +#include "SalomeContainerTools.hxx" #include "Mutex.hxx" #include #include @@ -39,37 +41,18 @@ namespace YACS { public: SalomeHPContainer(); - SalomeHPContainer(const SalomeContainer& other); - bool isAlreadyStarted(const ComponentInstance *inst) const; - Engines::Container_ptr getContainerPtr(const ComponentInstance *inst) const; - void start(const ComponentInstance *inst) throw (Exception); - Container *clone() const; - Container *cloneAlways() const; - std::string getPlacementId(const ComponentInstance *inst) const; - std::string getFullPlacementId(const ComponentInstance *inst) const; - void checkCapabilityToDealWith(const ComponentInstance *inst) const throw (Exception); - virtual void setProperty(const std::string& name, const std::string& value); - virtual void addComponentName(std::string name); - virtual CORBA::Object_ptr loadComponent(ComponentInstance *inst); - virtual void shutdown(int level); - // Helper methods - void addToComponentList(const std::string & name); - void addToResourceList(const std::string & name); - virtual std::map getResourceProperties(const std::string& name); + SalomeHPContainer(const SalomeHPContainer& other); + void setSizeOfPool(int sz); protected: #ifndef SWIG - virtual ~SalomeHPContainer(); + ~SalomeHPContainer(); #endif protected: - //! thread safety in Salome ??? YACS::BASES::Mutex _mutex; - Engines::Container_var _trueCont; std::vector _componentNames; - std::vector _trueContainers; - std::string _type; + std::vector _launchModeType; int _shutdownLevel; - public: - Engines::ContainerParameters _params; + SalomeContainerTools _sct; }; } } -- 2.39.2