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;
*/
class YACSLIBENGINE_EXPORT HomogeneousPoolContainer : public Container
{
+ public:
+ virtual void setSizeOfPool(int sz) = 0;
protected:
HomogeneousPoolContainer();
#ifndef SWIG
{
class ComponentInstance;
- class YACSLIBENGINE_EXPORT ServiceNode: public ElementaryNode
+ class YACSLIBENGINE_EXPORT ServiceNode : public ElementaryNode
{
protected:
ServiceNode(const std::string& name);
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;
};
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 { }
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 { }
SalomeContainer.hxx
SalomeContainerTools.hxx
SalomeContainerHelper.hxx
+ SalomeHPContainer.hxx
SALOMEDispatcher.hxx
SalomeProc.hxx
SalomePythonComponent.hxx
SalomePythonComponent.cxx
SalomeContainer.cxx
SalomeContainerTools.cxx
+ SalomeHPContainer.cxx
SalomeContainerHelper.cxx
PythonPorts.cxx
XMLNode.cxx
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)
_sct.clearProperties();
}
-void SalomeContainer::addComponentName(std::string name)
+void SalomeContainer::addComponentName(const std::string& name)
{
_componentNames.push_back(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<std::string, std::string> properties = inst->getProperties();
- if(p)
- {
- std::map<std::string,std::string> procMap=p->getProperties();
- properties.insert(procMap.begin(),procMap.end());
- }
-
- std::map<std::string, std::string>::const_iterator itm;
- env->length(properties.size());
- int item=0;
- for(itm = properties.begin(); itm != properties.end(); ++itm, item++)
- {
- DEBTRACE("envname="<<itm->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
*/
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
*/
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
*/
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<std::string>::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<SalomeContainerMonoHelper *>(_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="<<stream.str());
- myparams.container_name=CORBA::string_dup(stream.str().c_str());
- _shutdownLevel=1;
- }
-
- Engines::Container_var trueCont(Engines::Container::_nil());
- if(namedContainer && _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");
-
- _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)
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);
//! thread safety in Salome ???
YACS::BASES::Mutex _mutex;
std::vector<std::string> _componentNames;
- std::string _launchMode;
SalomeContainerHelper *_launchModeType;
int _shutdownLevel;
SalomeContainerTools _sct;
#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"
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);
*/
return properties;
}
+
+/*!
+ * \param [in] compoNames
+ * \param [in,out] shutdownLevel
+ */
+void SalomeContainerTools::Start(const std::vector<std::string>& 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<std::string>::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<SalomeContainerMonoHelper *>(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<std::string, std::string> properties = inst->getProperties();
+ if(p)
+ {
+ std::map<std::string,std::string> procMap=p->getProperties();
+ properties.insert(procMap.begin(),procMap.end());
+ }
+
+ std::map<std::string, std::string>::const_iterator itm;
+ env->length(properties.size());
+ int item=0;
+ for(itm = properties.begin(); itm != properties.end(); ++itm, item++)
+ {
+ DEBTRACE("envname="<<itm->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";
+}
#include CORBA_CLIENT_HEADER(SALOME_ContainerManager)
#include <string>
+#include <vector>
#include <map>
namespace YACS
{
namespace ENGINE
{
+ class Container;
+ class ComponentInstance;
+ class SalomeContainerHelper;
+
class YACSRUNTIMESALOME_EXPORT SalomeContainerTools
{
public:
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<std::string>& 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<std::string,std::string> _propertyMap;
Engines::ContainerParameters _params;
--- /dev/null
+// 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()
+{
+}
#include "YACSRuntimeSALOMEExport.hxx"
#include "HomogeneousPoolContainer.hxx"
+#include "SalomeContainerHelper.hxx"
+#include "SalomeContainerTools.hxx"
#include "Mutex.hxx"
#include <string>
#include <vector>
{
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<std::string,std::string> 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<std::string> _componentNames;
- std::vector<Engines::Container_var> _trueContainers;
- std::string _type;
+ std::vector<SalomeContainerMonoHelper> _launchModeType;
int _shutdownLevel;
- public:
- Engines::ContainerParameters _params;
+ SalomeContainerTools _sct;
};
}
}