]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
PR: LifeCycleCORBA and Container Manager Corrections
authorprascle <prascle>
Tue, 20 Sep 2005 14:36:03 +0000 (14:36 +0000)
committerprascle <prascle>
Tue, 20 Sep 2005 14:36:03 +0000 (14:36 +0000)
29 files changed:
bin/appliskel/runAppli
bin/appliskel/runSession
idl/SALOME_Component.idl
idl/SALOME_ContainerManager.idl
src/Container/Component_i.cxx
src/Container/Container_i.cxx
src/Container/Makefile.in
src/Container/SALOME_ComponentPy.py
src/Container/SALOME_Component_i.hxx
src/Container/SALOME_Container.py
src/Container/SALOME_ContainerManager.cxx
src/Container/SALOME_ContainerManager.hxx
src/Container/SALOME_ContainerPy.py
src/Container/SALOME_Container_i.hxx
src/DataTypeCatalog/Makefile.in
src/LifeCycleCORBA/Makefile.in
src/LifeCycleCORBA/SALOME_LifeCycleCORBA.cxx
src/LifeCycleCORBA/SALOME_LifeCycleCORBA.hxx
src/LifeCycleCORBA_SWIG/Makefile.in
src/LifeCycleCORBA_SWIG/TestLifeCycleCORBA.py
src/ModuleCatalog/Makefile.in
src/NamingService/Makefile.in
src/NamingService/SALOME_NamingService.cxx
src/Registry/Makefile.in
src/ResourcesManager/Makefile.in
src/ResourcesManager/SALOME_LoadRateManager.cxx
src/ResourcesManager/SALOME_ResourcesManager.cxx
src/RessourcesCatalog/Makefile.in
src/TestContainer/Makefile.in

index 3e703bc640a55abdbbab02ed0f933b2abe9ab29b..05b0287d1ef5229c6dbcc9551835e6b6a62c7414 100755 (executable)
@@ -33,10 +33,13 @@ searchFreePort() {
         if [ -z "$aRes" ]; then
             echo ${NSPORT} - Ok
            local myhost=`hostname`
-            export OMNIORB_CONFIG=${HOME}/$APPLI//.omniORB_${myhost}_${NSPORT}.cfg
+            export OMNIORB_CONFIG=${HOME}/${APPLI}/.omniORB_${myhost}_${NSPORT}.cfg
            export NSPORT
             local initref="NameService=corbaname::"`hostname`":$NSPORT"
             echo "ORBInitRef $initref" > $OMNIORB_CONFIG
+            LAST_RUNNING_CONFIG=${HOME}/${APPLI}/.omniORB_${myhost}_last.cfg
+           rm ${LAST_RUNNING_CONFIG}
+            ln -s ${OMNIORB_CONFIG} ${LAST_RUNNING_CONFIG}
             break
         fi
         echo -n "${NSPORT} "
@@ -61,3 +64,5 @@ if [ $# -ne 0 ] ; then
 else
     ${KERNEL_ROOT_DIR}/bin/salome/envSalome.py python ${KERNEL_ROOT_DIR}/bin/salome/runSalome.py 
 fi
+
+rm ${OMNIORB_CONFIG}
index d94bfff6ce3c0b56284413b086235f3c50c15fcc..a2c9d4b4593e7ecfb2ccdac07940db5dc1e6af02 100755 (executable)
@@ -25,6 +25,9 @@ export APPLI
 
 . ${HOME}/${APPLI}/envd ${HOME}/${APPLI}
 
+myhost=`hostname`
+export OMNIORB_CONFIG=${HOME}/${APPLI}/.omniORB_${myhost}_last.cfg
+
 # --- invoque shell with or without args
 
 if [ $# -ne 0 ] ; then
index 3d305ab778b8f0c562bb1fb6ae62c1041ac10366..bb099003072a5c28eb438849ff5ce6d883718a3e 100644 (file)
@@ -33,8 +33,8 @@ component in %SALOME application.
 module Engines
 {
   /*! 
-    A byte stream which is used for binary data transfer between different components
-
+    A byte stream which is used for binary data transfer between different
+    components
   */
   typedef sequence<octet> TMPFile;  
   
@@ -71,8 +71,8 @@ module Engines
     /*!
       Creates a new servant instance of a component.
       Component library must be loaded.
-      \param comoponentName Name of the component which will be registered
-                            in Registry and Name Service,
+      \param componentName Name of the component which will be registered
+                           in Registry and Name Service,
                          (instance number suffix added to the registered name)
       \param studyId        0 if instance is not associated to a study, 
                             >0 otherwise (== study id)
@@ -239,9 +239,8 @@ module Engines
     /*!
       This method is used by the %SUPERVISOR component. It sets the names of
       the graph and of the node.
-      \param aGraphName
- Name of graph
-      \param aNodeName Name of node
+      \param aGraphName Name of graph
+      \param aNodeName  Name of node
     */
     void Names( in string aGraphName , in string aNodeName ) ;
 
@@ -273,9 +272,12 @@ module Engines
     long CpuUsed_impl() ;
     
     /*!
-      Returns a python script, which is being played back reproduces the data model of component
+      Returns a python script, which is being played back reproduces
+      the data model of component
     */    
-    TMPFile DumpPython(in Object theStudy, in boolean isPublished, out boolean isValidScript); 
+    TMPFile DumpPython(in Object theStudy,
+                      in boolean isPublished, 
+                      out boolean isValidScript); 
 
   } ;
 } ;
index 7ee221913d62ce77a669bbdb47821d86306d65c1..7d4e96c24b97b6fa31ec554564491a40833cdfc1 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef _SALOME_CONTAINERMANAGER_IDL_
 #define _SALOME_CONTAINERMANAGER_IDL_
 
+#include "SALOME_Exception.idl"
 #include "SALOME_Component.idl"
 
 module Engines
@@ -26,17 +27,29 @@ struct MachineParameters
 */
   typedef sequence<string> MachineList;
 
+/*!
+    exception thrown if a computer is not found in the catalog
+*/
+  exception NotFound {};
+
+
 /*! \brief Interface of the %containerManager
-    This interface is used for interaction with the unique instance of ContainerManager
+    This interface is used for interaction with the unique instance
+    of ContainerManager
 */
   interface ContainerManager
   {
-    Container FindOrStartContainer( in MachineParameters params, in MachineList possibleComputers);
+    Container FindOrStartContainer( in MachineParameters params,
+                                   in MachineList possibleComputers);
+
     string FindBest(in MachineList possibleComputers);
 
     MachineList GetFittingResources( in MachineParameters params,
-                                    in string componentName );
+                                    in string componentName )
+      raises (SALOME::SALOME_Exception);
+
     void Shutdown();
+
     void ShutdownContainers();
   } ;
 };
index e40508347f5cec004067ff8f13d374e7bfabc316..258a7acf7e8c303429fd2f2a661bd610e0791e45 100644 (file)
@@ -250,14 +250,21 @@ void Engines_Component_i::destroy()
 
 Engines::Container_ptr Engines_Component_i::GetContainerRef()
 {
+  MESSAGE("Engines_Component_i::GetContainerRef");
   CORBA::Object_ptr o = _poa->id_to_reference(*_contId) ;
   return Engines::Container::_narrow(o);
 }
 
-Engines_Container_i *Engines_Component_i::GetContainerPtr()
-{
-  return dynamic_cast<Engines_Container_i*>(_poa->id_to_servant(*_contId)) ;
-}
+//=============================================================================
+/*! 
+ *  CORBA method: 
+ *  Gives a sequence of (key=string,value=any) to the component. 
+ *  Base class component stores the sequence in a map.
+ *  The map is cleared before.
+ *  This map is for use by derived classes. 
+ *  \param dico sequence of (key=string,value=any)
+ */
+//=============================================================================
 
 void Engines_Component_i::setProperties(const Engines::FieldsDict& dico)
 {
@@ -502,13 +509,26 @@ CORBA::Long Engines_Component_i::CpuUsed_impl()
   return cpu ;
 }
 
+
+//=============================================================================
+/*! 
+ *  C++ method: return Container Servant
+ */
+//=============================================================================
+
+Engines_Container_i *Engines_Component_i::GetContainerPtr()
+{
+  return dynamic_cast<Engines_Container_i*>(_poa->id_to_servant(*_contId)) ;
+}
+
 //=============================================================================
 /*! 
  *  C++ method: set study Id
  *  \param studyId         0 if instance is not associated to a study, 
  *                         >0 otherwise (== study id)
  *  \return true if the set of study Id is OK
- *  must be set once by Container, and cannot be changed after.
+ *  must be set once by Container, at instance creation,
+ *  and cannot be changed after.
  */
 //=============================================================================
 
@@ -516,7 +536,7 @@ CORBA::Boolean Engines_Component_i::setStudyId(CORBA::Long studyId)
 {
   ASSERT( studyId >= 0);
   CORBA::Boolean ret = false;
-  if (_studyId < 0)
+  if (_studyId < 0) // --- not yet initialized 
     {
       _studyId = studyId;
       ret = true;
@@ -760,7 +780,7 @@ void Engines_Component_i::sendMessage(const char *event_type,
 
 //=============================================================================
 /*! 
- *  C++ method:
+ *  C++ method: return standard library name built on component name
  */
 //=============================================================================
 
@@ -791,4 +811,3 @@ Engines::TMPFile* Engines_Component_i::DumpPython(CORBA::Object_ptr theStudy,
   isValidScript = true;
   return aStreamFile._retn(); 
 }
-
index 3357c8fdc7e6e53c1c75a4ef9dd3aef878b9dd23..2f1327fc692b4f6209108d93a7bf912c609283f1 100644 (file)
@@ -152,9 +152,12 @@ Engines_Container_i::Engines_Container_i (CORBA::ORB_ptr orb,
       Engines::Container_var pCont 
        = Engines::Container::_narrow(obj);
 
-      _containerName = _NS->BuildContainerNameForNS(containerName,hostname.c_str());
+      _containerName = _NS->BuildContainerNameForNS(containerName,
+                                                   hostname.c_str());
       SCRUTE(_containerName);
       _NS->Register(pCont, _containerName.c_str());
+      MESSAGE("Engines_Container_i::Engines_Container_i : Container name "
+             << _containerName);
 
       // Python: 
       // import SALOME_Container
@@ -171,8 +174,10 @@ Engines_Container_i::Engines_Container_i (CORBA::ORB_ptr orb,
        {
          Py_ACQUIRE_NEW_THREAD;
 #ifdef WNT
-Sleep(2000); // mpv: this is temporary solution: there is a unregular crash if not
-         PyRun_SimpleString("import sys\n"); // first element is the path to Registry.dll, but it's wrong
+         // mpv: this is temporary solution: there is a unregular crash if not
+         Sleep(2000);
+         PyRun_SimpleString("import sys\n");
+         // first element is the path to Registry.dll, but it's wrong
          PyRun_SimpleString("sys.path = sys.path[1:]\n");
 #endif
          PyRun_SimpleString("import SALOME_Container\n");
@@ -802,8 +807,10 @@ void ActSigIntHandler()
   SigIntAct.sa_flags = SA_SIGINFO ;
 #endif
 
-// DEBUG 03.02.2005 : the first parameter of sigaction is not a mask of signals (SIGINT | SIGUSR1) :
-// it must be only one signal ===> one call for SIGINT and an other one for SIGUSR1
+// DEBUG 03.02.2005 : the first parameter of sigaction is not a mask of signals
+// (SIGINT | SIGUSR1) :
+// it must be only one signal ===> one call for SIGINT 
+// and an other one for SIGUSR1
 #ifndef WNT
   if ( sigaction( SIGINT , &SigIntAct, NULL ) ) {
     perror("SALOME_Container main ") ;
index 5ccebde83945342646b59f1c2e0dd23ab3a85e1c..9a355a682bcee2aabf53a1516d1a796b4a807758 100644 (file)
@@ -52,7 +52,7 @@ LIB_SRC = Component_i.cxx \
          SALOME_ContainerManager.cxx \
          Container_init_python.cxx
 
-LIB_SERVER_IDL = SALOME_Registry.idl SALOME_Component.idl SALOME_ContainerManager.idl
+LIB_SERVER_IDL = SALOME_Registry.idl SALOME_Component.idl SALOME_ContainerManager.idl SALOME_Exception.idl
 LIB_CLIENT_IDL = 
 
 # Executables targets
index 6ae1812b469c824594e9ae767ab554ba7a150863..642c76e5a4f65e08067e2fb9b7f5a1b5053393e6 100755 (executable)
@@ -59,7 +59,7 @@ class SALOME_ComponentPy_i (Engines__POA.Component):
     #-------------------------------------------------------------------------
 
     def __init__ (self, orb, poa, contID, containerName,
-                  instanceName, interfaceName, notif):
+                  instanceName, interfaceName, notif=0):
         # Notif for notification services
         # NOT YET IMPLEMENTED
         MESSAGE(  "SALOME_ComponentPy_i::__init__" + " " + str (containerName) + " " + str(instanceName) + " " + str(interfaceName) )
@@ -80,7 +80,7 @@ class SALOME_ComponentPy_i (Engines__POA.Component):
 
         naming_service = SALOME_NamingServicePy_i(self._orb)
         myMachine=getShortHostName()
-        Component_path = "/Containers/" + myMachine + "/" + self._containerName + "/" + self._interfaceName
+        Component_path = self._containerName + "/" + self._instanceName
         MESSAGE(  'SALOME_ComponentPy_i Register' + str( Component_path ) )
         naming_service.Register(self._this(), Component_path)
 
index f20b5a14104547a5921d3eee592840981bdedd0d..c8de1f1aac979cc437130ecf51bfe0b46e0d1191 100644 (file)
@@ -59,8 +59,9 @@ class Engines_Container_i;
 #endif
 #endif
 
-class CONTAINER_EXPORT Engines_Component_i: public virtual POA_Engines::Component,
-                          public virtual PortableServer::RefCountServantBase
+class CONTAINER_EXPORT Engines_Component_i: 
+  public virtual POA_Engines::Component,
+  public virtual PortableServer::RefCountServantBase
 {
 public:
   Engines_Component_i();
@@ -81,51 +82,59 @@ public:
 
   virtual ~Engines_Component_i();
 
+  // --- CORBA methods
+
   char* instanceName();
   char* interfaceName();
 
-  void destroy();
   void ping();
+  void destroy();
 
+  CORBA::Long getStudyId();
   Engines::Container_ptr GetContainerRef();
-  Engines_Container_i *GetContainerPtr();
-  PortableServer::ObjectId * getId(); 
 
   void setProperties(const Engines::FieldsDict& dico);
   Engines::FieldsDict* getProperties();
 
-  void beginService(const char *serviceName);
-  void endService(const char *serviceName);
-  void sendMessage(const char *event_type, const char *message);
-
   void Names( const char * graphName , const char * nodeName ) ;
-  char * graphName() ;
-  char * nodeName() ;
-  bool Killer( pthread_t ThreadId , int signum );
   bool Kill_impl();
   bool Stop_impl();
   bool Suspend_impl();
   bool Resume_impl();
-  void SetCurCpu() ;
-  long CpuUsed() ;
   CORBA::Long CpuUsed_impl() ;
-  CORBA::Long getStudyId();
 
- virtual Engines::TMPFile* DumpPython(CORBA::Object_ptr theStudy, CORBA::Boolean isPublished, CORBA::Boolean& isValidScript);
+ virtual Engines::TMPFile* DumpPython(CORBA::Object_ptr theStudy,
+                                     CORBA::Boolean isPublished,
+                                     CORBA::Boolean& isValidScript);
+
+
+  // --- local C++ methods
+
+  PortableServer::ObjectId * getId(); 
+  Engines_Container_i *GetContainerPtr();
 
   bool setStudyId(CORBA::Long studyId);
   static bool isMultiStudy();
   static bool isMultiInstance();
   static std::string GetDynLibraryName(const char *componentName);
+
+  void beginService(const char *serviceName);
+  void endService(const char *serviceName);
+  void sendMessage(const char *event_type, const char *message);
+  char * graphName() ;
+  char * nodeName() ;
+  bool Killer( pthread_t ThreadId , int signum );
+  void SetCurCpu() ;
+  long CpuUsed() ;
+
 protected:
+  int _studyId; // -1: not initialised; 0: multiStudy; >0: study
   static bool _isMultiStudy;
   static bool _isMultiInstance;
+
   std::string _instanceName ;
   std::string _interfaceName ;
-  std::string _serviceName ;
-  std::string _graphName ;
-  std::string _nodeName ;
-  int _studyId; // -1: not initialised; 0: multiStudy; >0: study
+
   CORBA::ORB_ptr _orb;
   PortableServer::POA_ptr _poa;
   PortableServer::ObjectId * _id;
@@ -135,6 +144,10 @@ protected:
   NOTIFICATION_Supplier* _notifSupplier;
   std::map<std::string,CORBA::Any>_fieldsDict;
 
+  std::string _serviceName ;
+  std::string _graphName ;
+  std::string _nodeName ;
+
 private:
 #ifndef WNT
   pthread_t _ThreadId ;
@@ -147,4 +160,3 @@ private:
 };
 
 #endif
-
index befd9a1737b87b19ae854c06564399f8a469673b..4dab6de0d244f3d5d55652158c339d897f7880b8 100644 (file)
@@ -61,6 +61,7 @@ class SALOME_Container_i:
         self._orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID)
         self._poa = self._orb.resolve_initial_references("RootPOA")
         self._containerName = containerName
+        print "SALOME_Container.SALOME_Container_i : _containerName ",self._containerName
         #self._naming_service = SALOME_NamingServicePy_i(self._orb)
         self._container = self._orb.string_to_object(containerIORStr)
 
index 759dea955d6792911b89f7525964945a428a36c5..ddfcb37764bdec143547967f63c0eaf2b63cfc94 100644 (file)
@@ -6,30 +6,38 @@
 #include <unistd.h>
 #endif
 #include <vector>
+#include "Utils_CorbaException.hxx"
 
 #define TIME_OUT_TO_LAUNCH_CONT 21
 
 using namespace std;
 
-const char *SALOME_ContainerManager::_ContainerManagerNameInNS="/ContainerManager";
+const char *SALOME_ContainerManager::_ContainerManagerNameInNS = 
+  "/ContainerManager";
 
 SALOME_ContainerManager::SALOME_ContainerManager(CORBA::ORB_ptr orb)
 {
   MESSAGE("constructor");
-  _NS=new SALOME_NamingService(orb);
-  _ResManager=new SALOME_ResourcesManager(orb);
-  PortableServer::POA_var root_poa=PortableServer::POA::_the_root_poa();
+  _NS = new SALOME_NamingService(orb);
+  _ResManager = new SALOME_ResourcesManager(orb);
+  PortableServer::POA_var root_poa = PortableServer::POA::_the_root_poa();
   PortableServer::POAManager_var pman = root_poa->the_POAManager();
   PortableServer::POA_var my_poa;
+
   CORBA::PolicyList policies;
   policies.length(1);
-  PortableServer::ThreadPolicy_var threadPol=root_poa->create_thread_policy(PortableServer::SINGLE_THREAD_MODEL);
-  policies[0]=PortableServer::ThreadPolicy::_duplicate(threadPol);
-  my_poa=root_poa->create_POA("SThreadPOA",pman,policies);
+  PortableServer::ThreadPolicy_var threadPol = 
+    root_poa->create_thread_policy(PortableServer::SINGLE_THREAD_MODEL);
+  policies[0] = PortableServer::ThreadPolicy::_duplicate(threadPol);
+
+  my_poa = 
+    root_poa->create_POA("SThreadPOA",pman,policies);
   threadPol->destroy();
-  PortableServer::ObjectId_var id=my_poa->activate_object(this);
-  CORBA::Object_var obj=my_poa->id_to_reference(id);
-  Engines::ContainerManager_var refContMan = Engines::ContainerManager::_narrow(obj);
+  PortableServer::ObjectId_var id = my_poa->activate_object(this);
+  CORBA::Object_var obj = my_poa->id_to_reference(id);
+  Engines::ContainerManager_var refContMan =
+    Engines::ContainerManager::_narrow(obj);
+
   _NS->Register(refContMan,_ContainerManagerNameInNS);
   MESSAGE("constructor end");
 }
@@ -55,8 +63,8 @@ void SALOME_ContainerManager::ShutdownContainers()
 {
   MESSAGE("ShutdownContainers");
   _NS->Change_Directory("/Containers");
-  vector<string> vec=_NS->list_directory_recurs();
-  for(vector<string>::iterator iter=vec.begin();iter!=vec.end();iter++)
+  vector<string> vec = _NS->list_directory_recurs();
+  for(vector<string>::iterator iter = vec.begin();iter!=vec.end();iter++)
     {
       SCRUTE((*iter));
       CORBA::Object_var obj=_NS->Resolve((*iter).c_str());
@@ -66,56 +74,97 @@ void SALOME_ContainerManager::ShutdownContainers()
     }
 }
 
-Engines::Container_ptr SALOME_ContainerManager::FindOrStartContainer(const Engines::MachineParameters& params, const Engines::MachineList& possibleComputers)
+Engines::Container_ptr
+SALOME_ContainerManager::
+FindOrStartContainer(const Engines::MachineParameters& params,
+                    const Engines::MachineList& possibleComputers)
 {
-  Engines::Container_ptr ret=FindContainer(params,possibleComputers);
+  Engines::Container_ptr ret = FindContainer(params,possibleComputers);
   if(!CORBA::is_nil(ret))
     return ret;
   MESSAGE("Container doesn't exist try to launch it ...");
-  vector<string> vector;
+  MESSAGE("SALOME_ContainerManager::FindOrStartContainer " <<
+         possibleComputers.length());
+  //vector<string> vector;
   string theMachine=_ResManager->FindBest(possibleComputers);
+  MESSAGE("try to launch it on " << theMachine);
+
   string command;
-  if(theMachine==GetHostname())
-    command=_ResManager->BuildCommandToLaunchLocalContainer(params);
+  if(theMachine=="")
+    {
+      MESSAGE("SALOME_ContainerManager::FindOrStartContainer : " <<
+             "no possible computer");
+      return Engines::Container::_nil();
+    }
+  else if(theMachine==GetHostname())
+    {
+      command=_ResManager->BuildCommandToLaunchLocalContainer(params);
+    }
   else
-    command=_ResManager->BuildTempFileToLaunchRemoteContainer(theMachine,params);
+    command =
+      _ResManager->BuildTempFileToLaunchRemoteContainer(theMachine,params);
+
   _ResManager->RmTmpFile();
   int status=system(command.c_str());
-  if (status == -1) {
-    MESSAGE("SALOME_LifeCycleCORBA::StartOrFindContainer rsh failed (system command status -1)");
-    return Engines::Container::_nil();
-  }
-  else if (status == 217) {
-    MESSAGE("SALOME_LifeCycleCORBA::StartOrFindContainer rsh failed (system command status 217)");
-    return Engines::Container::_nil();
-  }
-  else {
-    int count=TIME_OUT_TO_LAUNCH_CONT;
-    while ( CORBA::is_nil(ret) && count ) {
+  if (status == -1)
+    {
+      MESSAGE("SALOME_LifeCycleCORBA::StartOrFindContainer rsh failed " <<
+             "(system command status -1)");
+      return Engines::Container::_nil();
+    }
+  else if (status == 217)
+    {
+      MESSAGE("SALOME_LifeCycleCORBA::StartOrFindContainer rsh failed " <<
+             "(system command status 217)");
+      return Engines::Container::_nil();
+    }
+  else
+    {
+      int count=TIME_OUT_TO_LAUNCH_CONT;
+      while ( CORBA::is_nil(ret) && count )
+       {
 #ifndef WNT
-      sleep( 1 ) ;
+         sleep( 1 ) ;
 #else
          Sleep(1000);
 #endif
-      count-- ;
-      if ( count != 10 )
-       MESSAGE( count << ". Waiting for FactoryServer on " << theMachine);
-      string containerNameInNS=_NS->BuildContainerNameForNS(params,theMachine.c_str());
-      SCRUTE(containerNameInNS);
-      CORBA::Object_var obj = _NS->Resolve(containerNameInNS.c_str());
-      ret=Engines::Container::_narrow(obj);
-    }
-    if ( CORBA::is_nil(ret) ) {
-      MESSAGE("SALOME_LifeCycleCORBA::StartOrFindContainer rsh failed");
+         count-- ;
+         if ( count != 10 )
+           MESSAGE( count << ". Waiting for FactoryServer on " << theMachine);
+         string containerNameInNS =
+           _NS->BuildContainerNameForNS(params,theMachine.c_str());
+         SCRUTE(containerNameInNS);
+         CORBA::Object_var obj = _NS->Resolve(containerNameInNS.c_str());
+         ret=Engines::Container::_narrow(obj);
+       }
+      if ( CORBA::is_nil(ret) )
+       {
+         MESSAGE("SALOME_LifeCycleCORBA::StartOrFindContainer rsh failed");
+       }
+      return ret;
     }
-    return ret;
-  }
 }
 
-Engines::MachineList *SALOME_ContainerManager::GetFittingResources(const Engines::MachineParameters& params, const char *componentName)
+Engines::MachineList *
+SALOME_ContainerManager::
+GetFittingResources(const Engines::MachineParameters& params,
+                   const char *componentName)
 {
-  vector<string> vec=_ResManager->GetFittingResources(params,componentName);
+  MESSAGE("SALOME_ContainerManager::GetFittingResources");
   Engines::MachineList *ret=new Engines::MachineList;
+  vector<string> vec;
+  try
+    {
+      vec = _ResManager->GetFittingResources(params,componentName);
+    }
+  catch(const SALOME_Exception &ex)
+    {
+      INFOS("Caught exception.");
+      cerr << ex.what() <<endl;
+      THROW_SALOME_CORBA_EXCEPTION(ex.what(),SALOME::BAD_PARAM);
+      //return ret;
+    }
+
   MESSAGE("Machine list length "<<vec.size());
   ret->length(vec.size());
   for(unsigned int i=0;i<vec.size();i++)
@@ -125,13 +174,18 @@ Engines::MachineList *SALOME_ContainerManager::GetFittingResources(const Engines
   return ret;
 }
 
-char* SALOME_ContainerManager::FindBest(const Engines::MachineList& possibleComputers)
-  {
-    string theMachine=_ResManager->FindBest(possibleComputers);
-    return CORBA::string_dup(theMachine.c_str());
-  }
+char*
+SALOME_ContainerManager::
+FindBest(const Engines::MachineList& possibleComputers)
+{
+  string theMachine=_ResManager->FindBest(possibleComputers);
+  return CORBA::string_dup(theMachine.c_str());
+}
 
-Engines::Container_ptr SALOME_ContainerManager::FindContainer(const Engines::MachineParameters& params,const char *theMachine)
+Engines::Container_ptr
+SALOME_ContainerManager::
+FindContainer(const Engines::MachineParameters& params,
+             const char *theMachine)
 {
   string containerNameInNS(_NS->BuildContainerNameForNS(params,theMachine));
   CORBA::Object_var obj = _NS->Resolve(containerNameInNS.c_str());
@@ -141,14 +195,19 @@ Engines::Container_ptr SALOME_ContainerManager::FindContainer(const Engines::Mac
     return Engines::Container::_nil();
 }
 
-Engines::Container_ptr SALOME_ContainerManager::FindContainer(const Engines::MachineParameters& params,const Engines::MachineList& possibleComputers)
+Engines::Container_ptr
+SALOME_ContainerManager::
+FindContainer(const Engines::MachineParameters& params,
+             const Engines::MachineList& possibleComputers)
 {
   MESSAGE("FindContainer "<<possibleComputers.length());
   for(unsigned int i=0;i<possibleComputers.length();i++)
     {
-      Engines::Container_ptr cont=FindContainer(params,possibleComputers[i]);
+      MESSAGE("FindContainer possible " << possibleComputers[i]);
+      Engines::Container_ptr cont = FindContainer(params,possibleComputers[i]);
       if( !CORBA::is_nil(cont) )
        return cont;
     }
+  MESSAGE("FindContainer: not found");
   return Engines::Container::_nil();
 }
index eed96b9eb960edc3e4da2cc747a4df351d6c76d6..f8ee7c8cd0f329ec976b13870b49fcd7408168d2 100644 (file)
@@ -25,24 +25,39 @@ class SALOME_NamingService;
 #endif
 #endif
 
-class CONTAINER_EXPORT SALOME_ContainerManager: public POA_Engines::ContainerManager,
-                              public PortableServer::RefCountServantBase {
-private:
-  SALOME_ResourcesManager *_ResManager;
-  SALOME_NamingService *_NS;
+class CONTAINER_EXPORT SALOME_ContainerManager:
+  public POA_Engines::ContainerManager,
+  public PortableServer::RefCountServantBase
+{
 public:
   SALOME_ContainerManager(CORBA::ORB_ptr orb);
   ~SALOME_ContainerManager();
-  Engines::Container_ptr FindOrStartContainer(const Engines::MachineParameters& params, const Engines::MachineList& possibleComputer);
-  Engines::MachineList *GetFittingResources(const Engines::MachineParameters& params, const char *componentName);
+
+  Engines::Container_ptr
+  FindOrStartContainer(const Engines::MachineParameters& params,
+                      const Engines::MachineList& possibleComputer);
+  Engines::MachineList *
+  GetFittingResources(const Engines::MachineParameters& params,
+                     const char *componentName);
+
   char* FindBest(const Engines::MachineList& possibleComputers);
+
   void Shutdown();
   void ShutdownContainers();
 
   static const char *_ContainerManagerNameInNS;
+
 private:
-  Engines::Container_ptr FindContainer(const Engines::MachineParameters& params,const Engines::MachineList& possibleComputers);
-  Engines::Container_ptr FindContainer(const Engines::MachineParameters& params,const char *theMachine);
+  Engines::Container_ptr
+  FindContainer(const Engines::MachineParameters& params,
+               const Engines::MachineList& possibleComputers);
+
+  Engines::Container_ptr
+  FindContainer(const Engines::MachineParameters& params,
+               const char *theMachine);
+
+  SALOME_ResourcesManager *_ResManager;
+  SALOME_NamingService *_NS;
 };
 
 #endif
index 7c575b9299f3d37d2aba85e5c756adeb9e8f0c47..23ac0195ace0477af9dbb4b8d7e5b19e7096f68e 100755 (executable)
@@ -60,12 +60,14 @@ class SALOME_ContainerPy_i (Engines__POA.Container):
         MESSAGE( "SALOME_ContainerPy_i::__init__" )
         self._orb = orb
         self._poa = poa
-        self._containerName = containerName
-
         myMachine=getShortHostName()
+        Container_path = "/Containers/" + myMachine + "/" + containerName
+        #self._containerName = containerName
+        self._containerName = Container_path
+        print "container name ",self._containerName
+
         naming_service = SALOME_NamingServicePy_i(self._orb)
         self._naming_service = naming_service
-        Container_path = "/Containers/" + myMachine + "/" + self._containerName
         MESSAGE( str(Container_path) )
         naming_service.Register(self._this(), Container_path)
             
@@ -188,24 +190,25 @@ class SALOME_ContainerPy_i (Engines__POA.Container):
         ret = 0
         instanceName = componentName + "_inst_" + `self._numInstance`
         interfaceName = componentName
-        the_command = "import " + componentName + "\n"
-        the_command = the_command + "comp_i = " + componentName + "." + componentName
-        the_command = the_command + "(self._orb, self._poa, self._this(), self._containerName, instanceName, interfaceName)\n"
-        MESSAGE( "SALOME_ContainerPy_i::load_component_Library :" + str (the_command) )
-        exec the_command
-        comp_o = comp_i._this()
-        if comp_o is not None:
-            ret = 1
-        else:
+        #the_command = "import " + componentName + "\n"
+        #the_command = the_command + "comp_i = " + componentName + "." + componentName
+        #the_command = the_command + "(self._orb, self._poa, self._this(), self._containerName, instanceName, interfaceName)\n"
+        #MESSAGE( "SALOME_ContainerPy_i::load_component_Library :" + str (the_command) )
+        #exec the_command
+        #comp_o = comp_i._this()
+        #if comp_o is not None:
+        #    ret = 1
+        #else:
             # --- try to import Python component
-            retImpl = self.import_component(componentName)
-            if retImpl == 1:
+        #    retImpl = self.import_component(componentName)
+        #    if retImpl == 1:
                 #import is possible
-                ret = 1
-            else:
+        #        ret = 1
+        #    else:
                 #import isn't possible
-                ret = 0
-        return ret
+        #        ret = 0
+        #return ret
+        return self.import_component(componentName)
     
     #-------------------------------------------------------------------------
 
index 8692181f86a2b71a151335b64b03c53ee7ce04ba..863b997559faff2a35c7ecad873516d0bf366e35 100644 (file)
@@ -60,8 +60,9 @@ class SALOME_NamingService;
 #endif
 #endif
 
-class CONTAINER_EXPORT Engines_Container_i: public virtual POA_Engines::Container,
-                          public virtual PortableServer::RefCountServantBase
+class CONTAINER_EXPORT Engines_Container_i:
+  public virtual POA_Engines::Container,
+  public virtual PortableServer::RefCountServantBase
 {
 public:
   Engines_Container_i();
@@ -93,12 +94,11 @@ public:
   void remove_impl(Engines::Component_ptr component_i);
   void finalize_removal();
 
-  char* getHostName();
-  CORBA::Long getPID();
-  char* name();
-  char* machineName();
   virtual void ping();
+  char* name();
   virtual void Shutdown();
+  char* getHostName();
+  CORBA::Long getPID();
   //! Kill current container
   bool Kill_impl() ;
 
@@ -118,11 +118,12 @@ public:
 
   static bool isPythonContainer(const char* ContainerName);
   static void decInstanceCnt(std::string genericRegisterName);
+  //??? char* machineName();
 
 protected:
 
-  int getArgc() { return _argc; }
-  char **getArgv() { return _argv; }
+  //??? int getArgc() { return _argc; }
+  //??? char **getArgv() { return _argv; }
 
   static std::map<std::string, int> _cntInstances_map;
   static std::map<std::string, void *> _library_map; // library names, loaded
@@ -131,7 +132,7 @@ protected:
 
   bool _isSupervContainer;
 
-   SALOME_NamingService *_NS ;
+  SALOME_NamingService *_NS ;
   std::string _library_path;
   std::string _containerName;
   CORBA::ORB_var _orb;
@@ -150,4 +151,3 @@ protected:
 
 #endif
 
-
index d71544c64bb273c38a5b05a7c864295793bba3e2..ee33b92235e8825cb22d3eef69d55434c8bbc47f 100644 (file)
@@ -50,7 +50,7 @@ LIB_SRC = \
 # in fact client is a test ! So it may go away BIN !
 BIN = SALOME_DataTypeCatalog_Server SALOME_DataTypeCatalog_Client
 BIN_SRC = 
-BIN_SERVER_IDL = SALOME_DataTypeCatalog.idl
+BIN_SERVER_IDL = SALOME_DataTypeCatalog.idl SALOME_Exception.idl
 
 CPPFLAGS+= $(QT_MT_INCLUDES) 
 CXXFLAGS+= 
index b23e0d50ac11b8fcfb29b5c98c1525923a6ecc61..786299949e0bfa9f122183754d003f9f23cb1161 100644 (file)
@@ -43,7 +43,7 @@ EXPORT_PYSCRIPTS = Launchers.py
 LIB = libSalomeLifeCycleCORBA.la
 LIB_SRC = SALOME_LifeCycleCORBA.cxx Launchers.cxx
 LIB_CLIENT_IDL = SALOME_Component.idl SALOME_TestComponent.idl \
-                SALOME_ModuleCatalog.idl SALOME_ContainerManager.idl
+                SALOME_ModuleCatalog.idl SALOME_ContainerManager.idl SALOME_Exception.idl
 
 # Executables targets
 BIN = TestLifeCycleCORBA
index 0efb425e5e2abb93a5e54b039ceca5bd5e282d30..e378550ad36ba31b05fdcf6be20042914eb623a6 100644 (file)
@@ -2,7 +2,7 @@
 //
 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
-//
+// 
 //  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 
 #include "SALOME_NamingService.hxx"
 using namespace std;
 
-IncompatibleComponent::IncompatibleComponent( void ): SALOME_Exception( "IncompatibleComponent" )
+IncompatibleComponent::IncompatibleComponent( void ):
+  SALOME_Exception( "IncompatibleComponent" )
 {
-       ;
 }
-IncompatibleComponent::IncompatibleComponent( const IncompatibleComponent &ex  ): SALOME_Exception( ex ) 
+
+IncompatibleComponent::IncompatibleComponent(const IncompatibleComponent &ex):
+  SALOME_Exception( ex ) 
 {
-       ;
 }
 
 //=============================================================================
@@ -97,19 +98,103 @@ SALOME_LifeCycleCORBA::~SALOME_LifeCycleCORBA()
 {
 }
 
+//=============================================================================
+/*! Public - 
+ *  Find and aready existing and registered component instance.
+ *  \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 not found
+ */
+//=============================================================================
+
 Engines::Component_ptr
-SALOME_LifeCycleCORBA::FindOrLoad_Component(const Engines::MachineParameters& params, 
-                                            const char *componentName,
-                                            int studyId)
+SALOME_LifeCycleCORBA::FindComponent(const Engines::MachineParameters& params,
+                                    const char *componentName,
+                                    int studyId)
 {
-  if (! isKnownComponentClass(componentName)) return Engines::Component::_nil();
+  if (! isKnownComponentClass(componentName))
+    return Engines::Component::_nil();
 
-  Engines::MachineList_var listOfMachine=_ContManager->GetFittingResources(params,componentName);
-  Engines::Component_ptr ret=FindComponent(params,componentName,listOfMachine);
-  if(CORBA::is_nil(ret))
-    return LoadComponent(params,componentName,listOfMachine);
-  else
-    return ret;
+  Engines::MachineList_var listOfMachines =
+    _ContManager->GetFittingResources(params, componentName);
+
+  Engines::Component_var compo = _FindComponent(params,
+                                               componentName,
+                                               studyId,
+                                               listOfMachines);
+
+  return compo._retn();
+}
+
+//=============================================================================
+/*! Public - 
+ *  Load a component instance on a container defined by machine parameters
+ *  \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::Component_ptr
+SALOME_LifeCycleCORBA::LoadComponent(const Engines::MachineParameters& params,
+                                    const char *componentName,
+                                    int studyId)
+{
+  // --- Check if Component Name is known in ModuleCatalog
+
+  if (! isKnownComponentClass(componentName))
+    return Engines::Component::_nil();
+
+  Engines::MachineList_var listOfMachines =
+    _ContManager->GetFittingResources(params, componentName);
+
+  Engines::Component_var compo = _LoadComponent(params,
+                                               componentName,
+                                               studyId,
+                                               listOfMachines);
+
+  return compo._retn();
+}
+
+//=============================================================================
+/*! Public - 
+ *  Find and aready existing and registered component instance or load a new
+ *  component instance on a container defined by machine parameters.
+ *  \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::Component_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::Component::_nil();
+
+  Engines::MachineList_var listOfMachines =
+    _ContManager->GetFittingResources(params,componentName);
+
+  Engines::Component_var compo = _FindComponent(params,
+                                               componentName,
+                                               studyId,
+                                               listOfMachines);
+
+  if(CORBA::is_nil(compo))
+    compo = _LoadComponent(params,
+                          componentName,
+                          studyId,
+                          listOfMachines);
+
+  return compo._retn();
 }
 
 //=============================================================================
@@ -117,11 +202,8 @@ SALOME_LifeCycleCORBA::FindOrLoad_Component(const Engines::MachineParameters& pa
  *  Find and aready existing and registered component instance or load a new
  *  component instance on a container defined by name
  *  \param containerName  the name of container, under one of the forms
- *           - 1 localhost/aContainer
- *           - 2 aContainer
- *           - 3 /machine/aContainer
- *     (not the same rules as FindContainer() method based on protected method
- *      ContainerName() -- MUST BE CORRECTED --)
+ *           - 1 aContainer (local container)
+ *           - 2 /machine/aContainer (container on hostnme = machine)
  *  \param componentName  the name of component class
  *  \return a CORBA reference of the component instance, or _nil if problem
  */
@@ -131,25 +213,39 @@ Engines::Component_ptr
 SALOME_LifeCycleCORBA::FindOrLoad_Component(const char *containerName,
                                            const char *componentName)
 {
-  // Check if Component Name is known
-  if (! isKnownComponentClass(componentName)) return Engines::Component::_nil();
+  // --- Check if Component Name is known in ModuleCatalog
+
+  if (! isKnownComponentClass(componentName))
+    return Engines::Component::_nil();
+
+  // --- Check if containerName contains machine name (if yes: rg>0)
 
-  // Chack if containerName contains machine name (if yes: rg>0)
   char *stContainer=strdup(containerName);
   string st2Container(stContainer);
   int rg=st2Container.find("/");
 
   Engines::MachineParameters_var params=new Engines::MachineParameters;
-  if(rg<0) {
-    params->container_name=CORBA::string_dup(stContainer);
-    params->hostname=CORBA::string_dup(GetHostname().c_str());
-  }
-  else {
-    stContainer[rg]='\0';
-    params->container_name=CORBA::string_dup(stContainer+rg+1);
-    params->hostname=CORBA::string_dup(stContainer);
-  }
+  if (rg<0)
+    {
+      //containerName doesn't contain "/" => Local container
+      params->container_name=CORBA::string_dup(stContainer);
+      params->hostname=CORBA::string_dup(GetHostname().c_str());
+    }
+  else 
+    {
+      stContainer[rg]='\0';
+      params->container_name=CORBA::string_dup(stContainer+rg+1);
+      params->hostname=CORBA::string_dup(stContainer);
+    }
   params->isMPI = false;
+  SCRUTE(params->container_name);
+  SCRUTE(params->hostname);
+  SCRUTE(params->OS);
+  SCRUTE(params->mem_mb);
+  SCRUTE(params->cpu_clock);
+  SCRUTE(params->nb_proc_per_node);
+  SCRUTE(params->nb_node);
+  SCRUTE(params->isMPI);
   free(stContainer);
   return FindOrLoad_Component(params,componentName);
   
@@ -191,29 +287,28 @@ bool SALOME_LifeCycleCORBA::isKnownComponentClass(const char *componentName)
   return false;
 }
 
-bool SALOME_LifeCycleCORBA::isMpiContainer(const Engines::MachineParameters& params) throw(IncompatibleComponent)
+//=============================================================================
+/*! Public -
+ *  Not so complex... useful ?
+ */
+//=============================================================================
+
+bool 
+SALOME_LifeCycleCORBA::isMpiContainer(const Engines::MachineParameters& params)
+  throw(IncompatibleComponent)
 {
-//   MESSAGE(params.container_name)
-//   if( strstr(params.container_name,"MPI") ){
-//     if( !params.isMPI ){
-//       cerr << "IncompatibleComponent" << endl;
-//       throw IncompatibleComponent();
-//     }
-//     return true;
-//   }
-//   else{
-//     if( params.isMPI ){
-//       cerr << "IncompatibleComponent" << endl;
-//       throw IncompatibleComponent();
-//     }
-//     return false;
-//   }
   if( params.isMPI )
     return true;
   else
     return false;
 }
 
+//=============================================================================
+/*! Public -
+ *  \return a number of processors not 0, only for MPI containers
+ */
+//=============================================================================
+
 int SALOME_LifeCycleCORBA::NbProc(const Engines::MachineParameters& params)
 {
   if( !isMpiContainer(params) )
@@ -228,52 +323,103 @@ int SALOME_LifeCycleCORBA::NbProc(const Engines::MachineParameters& params)
     return params.nb_node * params.nb_proc_per_node;
 }
 
+//=============================================================================
+/*! Protected -
+ *  Find and aready existing and registered component instance.
+ *  \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
+ * - build a list of machines on which an instance of the component is running,
+ * - find the best machine among the list
+ */
+//=============================================================================
+
 Engines::Component_ptr
-SALOME_LifeCycleCORBA::FindComponent(const Engines::MachineParameters& params, 
-                                     const char *componentName, 
-                                     const Engines::MachineList& listOfMachines)
+SALOME_LifeCycleCORBA::
+_FindComponent(const Engines::MachineParameters& params,
+              const char *componentName,
+              int studyId,
+              const Engines::MachineList& listOfMachines)
 {
+  // --- build the list of machines on which the component is already running
+
   const char *containerName = params.container_name;
   int nbproc = NbProc(params);
+  MESSAGE("_FindComponent, required " << containerName <<
+         " " << componentName << " " << nbproc);
 
-  if (! isKnownComponentClass(componentName)) return Engines::Component::_nil();
+  Engines::MachineList_var machinesOK = new Engines::MachineList;
 
-  // find list of machines which have component
-  Engines::MachineList_var machinesOK=new Engines::MachineList;
-  unsigned int lghtOfmachinesOK=0;
+  unsigned int lghtOfmachinesOK = 0;
   machinesOK->length(listOfMachines.length());
-  for(unsigned int i=0;i<listOfMachines.length();i++) {
-    const char *currentMachine=listOfMachines[i];
-    
-    CORBA::Object_var obj = _NS->ResolveComponent(currentMachine,containerName,componentName,nbproc);
-    if(!CORBA::is_nil(obj))
-      machinesOK[lghtOfmachinesOK++]=CORBA::string_dup(currentMachine);
-  }
-
-  // find the best machine among the list which have component
-  if(lghtOfmachinesOK!=0) {
-    machinesOK->length(lghtOfmachinesOK);
-    CORBA::String_var bestMachine=_ContManager->FindBest(machinesOK);
-    CORBA::Object_var obj = _NS->ResolveComponent(bestMachine,containerName,componentName,nbproc);
-    return Engines::Component::_narrow(obj);
-  }
+
+  for(unsigned int i=0; i<listOfMachines.length(); i++)
+    {
+      const char *currentMachine=listOfMachines[i];
+      MESSAGE("_FindComponent, look at " << currentMachine);
+      CORBA::Object_var obj = _NS->ResolveComponent(currentMachine,
+                                                   containerName,
+                                                   componentName,
+                                                   nbproc);
+      if (!CORBA::is_nil(obj))
+       machinesOK[lghtOfmachinesOK++] = CORBA::string_dup(currentMachine);
+    }
+
+  // --- find the best machine among the list
+
+  if(lghtOfmachinesOK != 0)
+    {
+      machinesOK->length(lghtOfmachinesOK);
+      CORBA::String_var bestMachine = _ContManager->FindBest(machinesOK);
+      CORBA::Object_var obj = _NS->ResolveComponent(bestMachine,
+                                                   containerName,
+                                                   componentName,
+                                                   nbproc);
+      return Engines::Component::_narrow(obj);
+    }
   else
     return Engines::Component::_nil();
 }
 
+//=============================================================================
+/*! Protected -
+ *  Load a component instance.
+ *  \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 problem
+ *  - Finds a container in the list of machine or start one.
+ *  - Try to load the component library in the container,
+ *  - then create an instance of the component.
+ */
+//=============================================================================
+
 Engines::Component_ptr 
-SALOME_LifeCycleCORBA::LoadComponent(const Engines::MachineParameters& params, 
-                                     const char *componentName, 
-                                     const Engines::MachineList& listOfMachines)
+SALOME_LifeCycleCORBA::
+_LoadComponent(const Engines::MachineParameters& params, 
+             const char *componentName,
+             int studyId,
+             const Engines::MachineList& listOfMachines)
 {
-  Engines::Container_var cont=_ContManager->FindOrStartContainer(params,listOfMachines);
+  const char *containerName = params.container_name;
+  int nbproc = NbProc(params);
+
+  MESSAGE("_LoadComponent, required " << containerName <<
+         " " << componentName << " " << nbproc);
+
+  Engines::Container_var cont =
+    _ContManager->FindOrStartContainer(params,
+                                      listOfMachines);
   if (CORBA::is_nil(cont)) return Engines::Component::_nil();
 
   bool isLoadable = cont->load_component_Library(componentName);
   if (!isLoadable) return Engines::Component::_nil();
 
   Engines::Component_var myInstance =
-    cont->create_component_instance(componentName, 0);
+    cont->create_component_instance(componentName, studyId);
   return myInstance._retn();
 }
 
index f5d55912b9794eb34b3a303727ab686cf16d631c..8ed343c3c78b8e58fbb4841a9a3bedd8a4aaa726 100644 (file)
@@ -60,9 +60,9 @@ class SALOME_NamingService;
 class LIFECYCLECORBA_EXPORT IncompatibleComponent : public SALOME_Exception
 {
 public :
-       IncompatibleComponent( void );
-       IncompatibleComponent( const IncompatibleComponent &ex  );
-} ;
+  IncompatibleComponent(void);
+  IncompatibleComponent(const IncompatibleComponent &ex);
+};
 
 class LIFECYCLECORBA_EXPORT SALOME_LifeCycleCORBA
 {
@@ -72,13 +72,13 @@ public:
 
   Engines::Component_ptr 
   FindComponent(const Engines::MachineParameters& params,
-               const char *componentName, 
-               const Engines::MachineList& listOfMachines);
+               const char *componentName,
+               int studyId=0);
 
-  Engines::Component_ptr 
-  LoadComponent(const Engines::MachineParameters& params, 
-               const char *componentName, 
-               const Engines::MachineList& listOfMachines);
+  Engines::Component_ptr
+  LoadComponent(const Engines::MachineParameters& params,
+               const char *componentName,
+               int studyId=0);
 
   Engines::Component_ptr 
   FindOrLoad_Component(const Engines::MachineParameters& params,
@@ -90,10 +90,11 @@ public:
                       const char *componentName); // for compatibility
   
   bool isKnownComponentClass(const char *componentName);
-  bool isMpiContainer(const Engines::MachineParameters& params) throw(IncompatibleComponent);
+
+  bool isMpiContainer(const Engines::MachineParameters& params)
+    throw(IncompatibleComponent);
+
   int NbProc(const Engines::MachineParameters& params);
-  //! Establish if a component called "componentName" in a container called "containerName" exists among the list of resources
-  //! in "listOfMachines". This method uses Naming Service to find the component.
 
 protected:
 
@@ -102,15 +103,16 @@ protected:
    *  exists among the list of resources in "listOfMachines".
    *  This method uses Naming Service to find the component.
    */
-
   Engines::Component_ptr 
-  _FindComponent(const char *containerName,
+  _FindComponent(const Engines::MachineParameters& params,
                 const char *componentName,
+                int studyId,
                 const Engines::MachineList& listOfMachines);
 
   Engines::Component_ptr
-  _LoadComponent(const char *containerName,
+  _LoadComponent(const Engines::MachineParameters& params,
                 const char *componentName,
+                int studyId,
                 const Engines::MachineList& listOfMachines);
   
   SALOME_NamingService *_NS;
@@ -119,4 +121,3 @@ protected:
 } ;
 
 #endif
-
index 48fa79e784ca7c84cae506b1505d5415161cc1ba..20b6d64596f144fa0be1f891cd33330a7b4996bf 100644 (file)
@@ -37,7 +37,7 @@ VPATH=.:@srcdir@:@top_srcdir@/idl
 LIB = libSALOME_LifeCycleCORBAcmodule.la
 LIB_SRC = 
 
-LIB_CLIENT_IDL = SALOME_Component.idl SALOME_ContainerManager.idl
+LIB_CLIENT_IDL = SALOME_Component.idl SALOME_ContainerManager.idl SALOME_Exception.idl
 
 SWIG_DEF = libSALOME_LifeCycleCORBA.i
 
index 479bc930a80d9497cd7a419ea06141678f32edea..147e072d4882a284736a1cd16e025aaceac31b3a 100644 (file)
@@ -9,10 +9,10 @@ lcc = LifeCycleCORBA.LifeCycleCORBA()
 #comp.Coucou(1)
 
 param={}
-param['hostname']='cli76ce'
+param['hostname']='cli76cc'
 param['container_name']='myContainer'
-smesh=lcc.FindOrLoad_Component(param,'SMESH')
+smesh=lcc.FindOrLoad_Component(param,'PYHELLO')
 
 container=lcc.FindContainer('myContainer')
-engine=lcc.FindComponent(param,'SMESH')
+engine=lcc.FindComponent(param,'HELLO')
 geom=lcc.LoadComponent(param,'GEOM')
index 91d31f1d215753f957c8e7ac567d0cb85a02b920..0fd5174650d70c310a67a927e5f10470bce1006c 100644 (file)
@@ -58,7 +58,7 @@ CXXFLAGS+=-ftemplate-depth-32
 # in fact client is a test ! So it may go away BIN !
 BIN = SALOME_ModuleCatalog_Server SALOME_ModuleCatalog_Client
 BIN_SRC = 
-BIN_SERVER_IDL = SALOME_ModuleCatalog.idl
+BIN_SERVER_IDL = SALOME_ModuleCatalog.idl SALOME_Exception.idl
 
 CPPFLAGS+= $(QT_MT_INCLUDES) 
 LDFLAGS+= $(QT_MT_LIBS) -lSalomeNS -lSALOMELocalTrace -lSALOMETraceCollector -lOpUtil
index 2951501b1a9ec9f1c8d6b5334cb6eb5a04eebc44..13281780cd83f01f676df7f57a5877fd9f151135 100644 (file)
@@ -48,6 +48,7 @@ LIB_SRC = \
        SALOME_NamingService.cxx \
        ServiceUnreachable.cxx \
        NamingService_WaitForServerReadiness.cxx
+LIB_SERVER_IDL = SALOME_Exception.idl
 
 LDFLAGS+= -lOpUtil
 
index b84b8daf0fa54bac831fa539082f8cef630e6afa..0692af4951adff1b1bccbef8bac49de6fba397ff 100644 (file)
@@ -438,6 +438,8 @@ CORBA::Object_ptr SALOME_NamingService::ResolveFirst(const char* Path)
 
 CORBA::Object_ptr SALOME_NamingService::ResolveComponent(const char* hostname, const char* containerName, const char* componentName, const int nbproc)
 {
+  MESSAGE("ResolveComponent");
+  Utils_Locker lock(&_myMutex);
 
   string name="/Containers/";
   name += hostname;
index 789b2ddf9c466017ac05bdc80e7caf101e0c1cdc..05c7defa56642a1601f1d310e59acd7d37f6b1f7 100644 (file)
@@ -46,7 +46,7 @@ LIB = libRegistry.la
 LIB_SRC = \
        RegistryConnexion.cxx \
        RegistryService.cxx
-LIB_CLIENT_IDL = SALOME_Registry.idl
+LIB_CLIENT_IDL = SALOME_Registry.idl SALOME_Exception.idl
 
 # Executables targets
 BIN = SALOME_Registry_Server
index ac30999d74563d39cf1bc1625ba6c71973dc3c3e..750e933a669682da8831996d14965bd5b426101e 100755 (executable)
@@ -53,7 +53,7 @@ LIB_SRC = \
 # in fact client is a test ! So it may go away BIN !
 #BIN = test_rc2
 #SALOME_RessourcesCatalog_Server SALOME_RessourcesCatalog_Client test
-LIB_CLIENT_IDL = SALOME_ContainerManager.idl SALOME_Component.idl
+LIB_CLIENT_IDL = SALOME_ContainerManager.idl SALOME_Component.idl SALOME_Exception.idl
 BIN_SRC = 
 BIN_SERVER_IDL = SALOME_ContainerManager.idl
 
index ab5aa4d88554f66909c83dc8c0b34dfeec365f70..be27ac8e7adbedb3486d3fc8054be2c881eb402b 100644 (file)
@@ -1,9 +1,12 @@
 #include "SALOME_LoadRateManager.hxx"
+#include <iostream>
 
 using namespace std;
 
 string SALOME_LoadRateManager::FindBest(const Engines::MachineList& hosts)
 {
   // for the moment then "maui" will be used for dynamic selection ...
+  cout << "SALOME_LoadRateManager::FindBest" << endl;
+  if(hosts.length() == 0)return string("");
   return string(hosts[0]);
 }
index d63c122c7a29849903f891fbcbbe0c0628a97fb0..7f01d24d8d8e95953dbd036255ee80880d7a2826 100644 (file)
@@ -52,16 +52,24 @@ vector<string> SALOME_ResourcesManager::GetFittingResources(const Engines::Machi
   //To be sure that we search in a correct list.
   ParseXmlFile();
   const char *hostname=(const char *)params.hostname;
+  MESSAGE("ResourcesManager::GetFittingResources" << hostname << GetHostname().c_str());
   if(hostname[0]!='\0')
     {
-      if( strcmp(hostname,"localhost") == 0 || strcmp(hostname,GetHostname().c_str()) == 0 )
+  MESSAGE("ResourcesManager::GetFittingResources : hostname specified" );
+  cout << "hostname specified" << endl;
+      if( strcmp(hostname,"localhost") == 0 || strcmp(hostname,GetHostname().c_str()) == 0 ){
+        MESSAGE("ResourcesManager::GetFittingResources : localhost" );
        ret.push_back(GetHostname().c_str());
-      else if(_resourcesList.find(hostname)!=_resourcesList.end())
+        MESSAGE("ResourcesManager::GetFittingResources : " << ret.size());
+      }
+      else if(_resourcesList.find(hostname)!=_resourcesList.end()){
        // params.hostame is in the list of resources so return it.
        ret.push_back(hostname);
-      else
+      } else{
        //user specified an unknown hostame so notify to him.
+        MESSAGE("ResourcesManager::GetFittingResources : SALOME_Exception");
        throw SALOME_Exception("unknown host");
+      }
     }
   else
     // Search for available resources sorted by priority
@@ -82,6 +90,7 @@ vector<string> SALOME_ResourcesManager::GetFittingResources(const Engines::Machi
       for(list<ResourceDataToSort>::iterator iter2=li.begin();iter2!=li.end();iter2++)
        ret[i++]=(*iter2)._hostName;
     }
+  MESSAGE("ResourcesManager::GetFittingResources : return" << ret.size());
   return ret;
 }
 
@@ -401,21 +410,28 @@ void SALOME_ResourcesManager::KeepOnlyResourcesWithModule(vector<string>& hosts,
 
 void SALOME_ResourcesManager::AddOmninamesParams(string& command) const
 {
-  string omniORBcfg( getenv( "OMNIORB_CONFIG" ) ) ;
-  ifstream omniORBfile( omniORBcfg.c_str() ) ;
-  char ORBInitRef[11] ;
-  char egal[3] ;
-  char nameservice[132] ;
-  omniORBfile >> ORBInitRef ;
-  command += "ORBInitRef " ;
-  omniORBfile >> egal ;
-  omniORBfile >> nameservice ;
-  omniORBfile.close() ;
-  char * bsn = strchr( nameservice , '\n' ) ;
-  if ( bsn ) {
-    bsn[ 0 ] = '\0' ;
-  }
-  command += nameservice ;
+  // If env variable OMNIORB_CONFIG is not defined or the file is more complex than one line
+  // does not work
+  // Even if we use it we have to check if env variable exists
+  //string omniORBcfg( getenv( "OMNIORB_CONFIG" ) ) ;
+  //ifstream omniORBfile( omniORBcfg.c_str() ) ;
+  //char ORBInitRef[11] ;
+  //char egal[3] ;
+  //char nameservice[132] ;
+  //omniORBfile >> ORBInitRef ;
+  //command += "ORBInitRef " ;
+  //omniORBfile >> egal ;
+  //omniORBfile >> nameservice ;
+  //omniORBfile.close() ;
+  //char * bsn = strchr( nameservice , '\n' ) ;
+  //if ( bsn ) {
+    //bsn[ 0 ] = '\0' ;
+  //}
+  //command += nameservice ;
+
+  char *iorstr = _NS->getIORaddr();
+  command += "ORBInitRef NameService=";
+  command += iorstr;
 }
 
 void SALOME_ResourcesManager::AddOmninamesParams(ofstream& fileStream) const
index 74e66a1359b1950535cfa5a69cb9235b8c312df6..0122db2a22ccd15207187fec87c8fdf8f060b933 100644 (file)
@@ -50,7 +50,7 @@ LIB_SRC = \
 # in fact client is a test ! So it may go away BIN !
 BIN = SALOME_RessourcesCatalog_Server SALOME_RessourcesCatalog_Client
 BIN_SRC = 
-BIN_SERVER_IDL = SALOME_RessourcesCatalog.idl
+BIN_SERVER_IDL = SALOME_RessourcesCatalog.idl SALOME_Exception.idl
 
 CPPFLAGS+= $(QT_MT_INCLUDES) 
 CXXFLAGS+= 
index a1183af7a0867536111e922561398ae64e3c5426..39c69251b684f6dc7d2567d2460bae808d2e0325 100644 (file)
@@ -39,7 +39,7 @@ EXPORT_PYSCRIPTS = SALOME_TestComponentPy.py TestComponentPy.py
 
 LIB = libSalomeTestComponentEngine.la 
 LIB_SRC = SALOME_TestComponent_i.cxx
-LIB_CLIENT_IDL = SALOME_Component.idl SALOME_TestComponent.idl
+LIB_CLIENT_IDL = SALOME_Component.idl SALOME_TestComponent.idl SALOME_Exception.idl
 
 # Executables targets
 BIN = TestContainer TestLogger