SALOME documentation central

Engines_Container_i Class Reference

C++ implementation of Engines::Container interface. More...

Inheritance diagram for Engines_Container_i:

Public Member Functions

 Engines_Container_i ()
 Engines_Container_i (CORBA::ORB_ptr orb, PortableServer::POA_ptr poa, char *containerName, int argc, char *argv[], bool activAndRegist=true, bool isServantAloneInProcess=true)
virtual ~Engines_Container_i ()
virtual bool load_component_Library (const char *componentName)
 load a new component class
virtual Engines::Component_ptr create_component_instance (const char *componentName, CORBA::Long studyId)
 Create a new component instance.
Engines::Component_ptr find_component_instance (const char *registeredName, CORBA::Long studyId)
 Find an existing (in the container) component instance.
Engines::Component_ptr load_impl (const char *nameToRegister, const char *componentName)
 Find or create a new component instance.
void remove_impl (Engines::Component_ptr component_i)
 Remove the component instance from container.
void finalize_removal ()
 Unload component libraries from the container.
virtual void ping ()
 Ping the servant to check it is still alive.
char * name ()
 Get container name.
char * workingdir ()
 Get container working directory.
char * logfilename ()
 Get container log file name.
void logfilename (const char *name)
 Set container log file name.
virtual void Shutdown ()
 Shutdown the container.
char * getHostName ()
 Get container host name.
CORBA::Long getPID ()
 Get container PID.
bool Kill_impl ()
 Kill current container.
Engines::fileRef_ptr createFileRef (const char *origFileName)
 Get or create a file reference object associated to a local file (to transfer it)
Engines::fileTransfer_ptr getFileTransfer ()
 Get a fileTransfer reference.
virtual Engines::Salome_file_ptr createSalome_file (const char *origFileName)
 Create a Salome file.
void copyFile (Engines::Container_ptr container, const char *remoteFile, const char *localFile)
 copy a file from a remote host (container) to the local host
Engines::PyNode_ptr createPyNode (const char *nodeName, const char *code)
 create a PyNode object to execute remote python code
Engines::Component_ptr find_or_create_instance (std::string genericRegisterName, std::string componentLibraryName)
 Finds an already existing component instance or create a new instance.
Engines::Component_ptr createInstance (std::string genericRegisterName, void *handle, int studyId)
 Create a new component instance.
int getArgc ()
char ** getArgv ()

Static Public Member Functions

static bool isPythonContainer (const char *ContainerName)
 Indicate if container is a python one.
static void decInstanceCnt (std::string genericRegisterName)
 Decrement component instance reference count.

Protected Attributes

bool _isSupervContainer
SALOME_NamingService_NS
std::string _library_path
std::string _containerName
std::string _logfilename
CORBA::ORB_var _orb
PortableServer::POA_var _poa
PortableServer::ObjectId * _id
int _numInstance
std::map< std::string,
Engines::Component_var > 
_listInstances_map
std::map< std::string,
Engines::fileRef_var > 
_fileRef_map
std::map< std::string,
Engines::Salome_file_var > 
_Salome_file_map
Engines::fileTransfer_var _fileTransfer
int _argc
char ** _argv
long _pid
bool _isServantAloneInProcess

Static Protected Attributes

static std::map< std::string, int > _cntInstances_map
static std::map< std::string,
void * > 
_library_map
static std::map< std::string,
void * > 
_toRemove_map
static omni_mutex _numInstanceMutex

Detailed Description

C++ implementation of Engines::Container interface.


Constructor & Destructor Documentation

Engines_Container_i::Engines_Container_i ( )

Default constructor, not for use

Engines_Container_i::Engines_Container_i ( CORBA::ORB_ptr  orb,
PortableServer::POA_ptr  poa,
char *  containerName,
int  argc,
char *  argv[],
bool  activAndRegist = true,
bool  isServantAloneInProcess = true 
)

Construtor to use

Engines_Container_i::~Engines_Container_i ( ) [virtual]

Destructor


Member Function Documentation

bool Engines_Container_i::load_component_Library ( const char *  componentName) [virtual]

load a new component class

CORBA method: load a new component class (Python or C++ implementation)

Parameters:
componentNamelike COMPONENT try to make a Python import of COMPONENT, then a lib open of libCOMPONENTEngine.so
Returns:
true if dlopen successfull or already done, false otherwise
Engines::Component_ptr Engines_Container_i::create_component_instance ( const char *  genericRegisterName,
CORBA::Long  studyId 
) [virtual]

Create a new component instance.

CORBA method: Creates a new servant instance of a component. The servant registers itself to naming service and Registry.

Parameters:
genericRegisterNameName of the component instance to register in Registry & Name Service (without _inst_n suffix)
studyId0 for multiStudy instance, study Id (>0) otherwise
Returns:
a loaded component
Engines::Component_ptr Engines_Container_i::find_component_instance ( const char *  registeredName,
CORBA::Long  studyId 
)

Find an existing (in the container) component instance.

CORBA method: Finds a servant instance of a component

Parameters:
registeredNameName of the component in Registry or Name Service, without instance suffix number
studyId0 if instance is not associated to a study, >0 otherwise (== study id)
Returns:
the first instance found with same studyId
Engines::Component_ptr Engines_Container_i::load_impl ( const char *  genericRegisterName,
const char *  componentName 
)

Find or create a new component instance.

CORBA method: find or create an instance of the component (servant), load a new component class (dynamic library) if required,

---- FOR COMPATIBILITY WITH 2.2 ----

---- USE ONLY FOR MULTISTUDY INSTANCES ! --------

The servant registers itself to naming service and Registry.

Parameters:
genericRegisterNameName of the component to register in Registry & Name Service
componentNameName of the constructed library of the component
Returns:
a loaded component
void Engines_Container_i::remove_impl ( Engines::Component_ptr  component_i)

Remove the component instance from container.

CORBA method: Stops the component servant, and deletes all related objects

Parameters:
component_iComponent to be removed
void Engines_Container_i::finalize_removal ( )

Unload component libraries from the container.

CORBA method: Discharges unused libraries from the container.

void Engines_Container_i::ping ( ) [virtual]

Ping the servant to check it is still alive.

CORBA method: check if servant is still alive

char * Engines_Container_i::name ( )

Get container name.

CORBA attribute: Container name (see constructor)

char * Engines_Container_i::workingdir ( )

Get container working directory.

CORBA attribute: Container working directory

char * Engines_Container_i::logfilename ( )

Get container log file name.

CORBA attribute: Container log file name

void Engines_Container_i::logfilename ( const char *  name)

Set container log file name.

void Engines_Container_i::Shutdown ( ) [virtual]

Shutdown the container.

CORBA method, oneway: Server shutdown.

  • Container name removed from naming service,
  • servant deactivation,
  • orb shutdown if no other servants in the process
char * Engines_Container_i::getHostName ( )

Get container host name.

CORBA method: Get the hostName of the Container (without domain extensions)

CORBA::Long Engines_Container_i::getPID ( )

Get container PID.

CORBA method: Get the PID (process identification) of the Container

bool Engines_Container_i::Kill_impl ( )

Kill current container.

Kill the container.

CORBA method: Kill the container process with exit(0). To remove : never returns !

Engines::fileRef_ptr Engines_Container_i::createFileRef ( const char *  origFileName)

Get or create a file reference object associated to a local file (to transfer it)

CORBA method: get or create a fileRef object associated to a local file (a file on the computer on which runs the container server), which stores a list of (machine, localFileName) corresponding to copies already done.

Parameters:
origFileNameabsolute path for a local file to copy on other computers
Returns:
a fileRef object associated to the file.
Engines::fileTransfer_ptr Engines_Container_i::getFileTransfer ( )

Get a fileTransfer reference.

CORBA method:

Returns:
a reference to the fileTransfer object
Engines::Salome_file_ptr Engines_Container_i::createSalome_file ( const char *  origFileName) [virtual]

Create a Salome file.

void Engines_Container_i::copyFile ( Engines::Container_ptr  container,
const char *  remoteFile,
const char *  localFile 
)

copy a file from a remote host (container) to the local host

Parameters:
containerthe remote container
remoteFilethe file to copy locally from the remote host into localFile
localFilethe local file
Engines::PyNode_ptr Engines_Container_i::createPyNode ( const char *  nodeName,
const char *  code 
)

create a PyNode object to execute remote python code

Parameters:
nodeNamethe name of the node
codethe python code to load
Returns:
the PyNode
Engines::Component_ptr Engines_Container_i::find_or_create_instance ( std::string  genericRegisterName,
std::string  componentLibraryName 
)

Finds an already existing component instance or create a new instance.

C++ method: Finds an already existing servant instance of a component, or create an instance. ---- USE ONLY FOR MULTISTUDY INSTANCES ! --------

Parameters:
genericRegisterNameName of the component instance to register in Registry & Name Service, (without _inst_n suffix, like "COMPONENT")
componentLibraryNamelike "libCOMPONENTEngine.so"
Returns:
a loaded component

example with names:

  • aGenRegisterName = COMPONENT (= first argument)
  • impl_name = libCOMPONENTEngine.so (= second argument)
  • _containerName = /Containers/cli76ce/FactoryServer
  • factoryName = COMPONENTEngine_factory
  • component_registerBase = /Containers/cli76ce/FactoryServer/COMPONENT
  • instanceName = COMPONENT_inst_1
  • component_registerName = /Containers/cli76ce/FactoryServer/COMPONENT_inst_1
Engines::Component_ptr Engines_Container_i::createInstance ( std::string  genericRegisterName,
void *  handle,
int  studyId 
)

Create a new component instance.

C++ method: create a servant instance of a component.

Parameters:
genericRegisterNameName of the component instance to register in Registry & Name Service, (without _inst_n suffix, like "COMPONENT")
handleloaded library handle
studyId0 for multiStudy instance, study Id (>0) otherwise
Returns:
a loaded component

example with names:

  • aGenRegisterName = COMPONENT (= first argument)
  • _containerName = /Containers/cli76ce/FactoryServer
  • factoryName = COMPONENTEngine_factory
  • component_registerBase = /Containers/cli76ce/FactoryServer/COMPONENT
  • instanceName = COMPONENT_inst_1
  • component_registerName = /Containers/cli76ce/FactoryServer/COMPONENT_inst_1
bool Engines_Container_i::isPythonContainer ( const char *  ContainerName) [static]

Indicate if container is a python one.

Retrieves only with container naming convention if it is a python container

void Engines_Container_i::decInstanceCnt ( std::string  genericRegisterName) [static]

Decrement component instance reference count.