Salome HOME
add method NameChanged to update title name
[modules/kernel.git] / src / LifeCycleCORBA / SALOME_LifeCycleCORBA.cxx
index e6ba9ee6cdad814a59c8554782bea784b0683cc8..ecc25b84ed4eca8e248526efafea0beb1cfaf579 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -6,7 +6,7 @@
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 #include <ServiceUnreachable.hxx>
 
 #include "SALOME_LifeCycleCORBA.hxx"
+#include "SALOME_ResourcesManager.hxx"
+#include "SALOMESDS_DataServerManager.hxx"
+
 #include CORBA_CLIENT_HEADER(SALOME_ModuleCatalog)
 #include CORBA_CLIENT_HEADER(SALOME_Session)
 #include CORBA_CLIENT_HEADER(DSC_Engines)
 #include CORBA_CLIENT_HEADER(SALOME_Registry)
 #include CORBA_CLIENT_HEADER(SALOMEDS)
+#include CORBA_CLIENT_HEADER(SALOME_SDS)
 #include CORBA_CLIENT_HEADER(Logger)
 #include CORBA_CLIENT_HEADER(SALOME_Launcher)
 
+#include "SALOME_ResourcesManager.hxx"
 #include "SALOME_ContainerManager.hxx"
 #include "SALOME_Component_i.hxx"
 #include "SALOME_NamingService.hxx"
@@ -127,14 +132,12 @@ SALOME_LifeCycleCORBA::~SALOME_LifeCycleCORBA()
  *
  *  \param params         container parameters like type or name...
  *  \param componentName  the name of component class
- *  \param studyId        default = 0  : multistudy instance
  *  \return a CORBA reference of the component instance, or _nil if not found
  */
 //=============================================================================
 Engines::EngineComponent_ptr
 SALOME_LifeCycleCORBA::FindComponent(const Engines::ContainerParameters& params,
-                                     const char *componentName,
-                                     int studyId)
+                                     const char *componentName)
 {
   if (! isKnownComponentClass(componentName))
     return Engines::EngineComponent::_nil();
@@ -155,7 +158,6 @@ SALOME_LifeCycleCORBA::FindComponent(const Engines::ContainerParameters& params,
 
   Engines::EngineComponent_var compo = _FindComponent(new_params,
                                                 componentName,
-                                                studyId,
                                                 listOfResources);
 
   return compo._retn();
@@ -166,15 +168,13 @@ SALOME_LifeCycleCORBA::FindComponent(const Engines::ContainerParameters& params,
  *
  *  \param params         container parameters like type or name...
  *  \param componentName  the name of component class
- *  \param studyId        default = 0  : multistudy instance
  *  \return a CORBA reference of the component instance, or _nil if problem
  */
 //=============================================================================
 
 Engines::EngineComponent_ptr
 SALOME_LifeCycleCORBA::LoadComponent(const Engines::ContainerParameters& params,
-                                     const char *componentName,
-                                     int studyId)
+                                     const char *componentName)
 {
   // --- Check if Component Name is known in ModuleCatalog
 
@@ -198,8 +198,7 @@ SALOME_LifeCycleCORBA::LoadComponent(const Engines::ContainerParameters& params,
   new_params.resource_params.resList = listOfResources;
 
   Engines::EngineComponent_var compo = _LoadComponent(new_params,
-                                                componentName,
-                                                studyId);
+                                                      componentName);
 
   return compo._retn();
 }
@@ -210,7 +209,6 @@ SALOME_LifeCycleCORBA::LoadComponent(const Engines::ContainerParameters& params,
  *
  *  \param params         container parameters like type or name...
  *  \param componentName  the name of component class
- *  \param studyId        default = 0  : multistudy instance
  *  \return a CORBA reference of the component instance, or _nil if problem
  */
 //=============================================================================
@@ -218,8 +216,7 @@ SALOME_LifeCycleCORBA::LoadComponent(const Engines::ContainerParameters& params,
 Engines::EngineComponent_ptr
 SALOME_LifeCycleCORBA::
 FindOrLoad_Component(const Engines::ContainerParameters& params,
-                     const char *componentName,
-                     int studyId)
+                     const char *componentName)
 {
   // --- Check if Component Name is known in ModuleCatalog
 
@@ -242,16 +239,14 @@ FindOrLoad_Component(const Engines::ContainerParameters& params,
     }
 
   Engines::EngineComponent_var compo = _FindComponent(new_params,
-                                                componentName,
-                                                studyId,
-                                                listOfResources);
+                                                      componentName,
+                                                      listOfResources);
 
   if(CORBA::is_nil(compo))
   {
     new_params.resource_params.resList = listOfResources;
     compo = _LoadComponent(new_params,
-                           componentName,
-                           studyId);
+                           componentName);
   }
 
   return compo._retn();
@@ -421,7 +416,7 @@ Engines::ResourcesManager_ptr SALOME_LifeCycleCORBA::getResourcesManager()
 }
 
 //=============================================================================
-/*! \brief shutdown all the SALOME servers except SALOME_Session_Server, omniNames and notifd
+/*! \brief shutdown all the SALOME servers except SALOME_Session_Server and omniNames
  */
 //=============================================================================
 
@@ -470,10 +465,10 @@ void SALOME_LifeCycleCORBA::shutdownServers()
   // 2) SALOMEDS
   try
     {
-      CORBA::Object_var objSDS = _NS->Resolve("/myStudyManager");
-      SALOMEDS::StudyManager_var studyManager = SALOMEDS::StudyManager::_narrow(objSDS) ;
-      if ( !CORBA::is_nil(studyManager) && ( pid != studyManager->getPID() ) )
-        studyManager->Shutdown();
+      CORBA::Object_var objSDS = _NS->Resolve("/Study");
+      SALOMEDS::Study_var study = SALOMEDS::Study::_narrow(objSDS) ;
+      if ( !CORBA::is_nil(study) && ( pid != study->getPID() ) )
+        study->Shutdown();
     }
   catch(const CORBA::Exception& e)
     {
@@ -502,8 +497,20 @@ void SALOME_LifeCycleCORBA::shutdownServers()
 #ifndef WIN32
   nanosleep(&ts_req,0);
 #endif
+  // 4 ) Remote ScopeServer (the DataServer is hosted by SalomeLauncher shutdown right after)
+  try
+    {
+      CORBA::Object_var objDSM(_NS->Resolve(SALOMESDS::DataServerManager::NAME_IN_NS));
+      SALOME::DataServerManager_var dsm(SALOME::DataServerManager::_narrow(objDSM));
+      if ( !CORBA::is_nil(dsm) )
+        dsm->shutdownScopes();
+    }
+  catch(const CORBA::Exception& e)
+    {
+       // ignore and continue
+    }
 
-  // 4) SalomeLauncher
+  // 5) SalomeLauncher
   try
     {
       CORBA::Object_var objSL = _NS->Resolve("/SalomeLauncher");
@@ -521,7 +528,7 @@ void SALOME_LifeCycleCORBA::shutdownServers()
   nanosleep(&ts_req,0);
 #endif
 
-  // 5) Registry
+  // 6) Registry
   try
     {
       CORBA::Object_var objR = _NS->Resolve("/Registry");
@@ -534,20 +541,6 @@ void SALOME_LifeCycleCORBA::shutdownServers()
        // ignore and continue
     }
 
-  /*
-  // 6) Session
-  if ( !CORBA::is_nil( session ) ) {
-    try
-    {
-      session->Shutdown();
-    }
-    catch(const CORBA::Exception& e)
-    {
-      // ignore and continue
-    }
-  }
-  */
-
   // 7) Logger
   int argc = 0;
   char *xargv = (char*)"";
@@ -587,61 +580,45 @@ void SALOME_LifeCycleCORBA::shutdownServers()
 }
 
 //=============================================================================
-/*! \brief shutdown  omniNames and notifd
+/*! \brief shutdown  omniNames
  */
 //=============================================================================
 
 void SALOME_LifeCycleCORBA::killOmniNames()
 {
   std::string portNumber (::getenv ("NSPORT") );
-  if ( !portNumber.empty() )
-  {
-#ifdef WIN32
-#else
-    std::string cmd ;
-    cmd = std::string( "ps -eo pid,command | grep -v grep | grep -E \"omniNames.*")
-      + portNumber
-      + std::string("\" | awk '{cmd=sprintf(\"kill -9 %s\",$1); system(cmd)}'" );
-    MESSAGE(cmd);
-    try {
-      system ( cmd.c_str() );
-    }
-    catch ( ... ) {
-    }
-#endif
-  }
-
-  // NPAL 18309  (Kill Notifd)
-
   std::string python_exe;
 
   python_exe = std::string("python");
-#ifdef WIN32
-  #ifdef _DEBUG_
-    python_exe += std::string("_d");
-  #endif
-#endif
 
   if ( !portNumber.empty() )
   {
-    std::string cmd = ("from killSalomeWithPort import killNotifdAndClean; ");
-    cmd += std::string("killNotifdAndClean(") + portNumber + "); ";
-    cmd  = python_exe + std::string(" -c \"") + cmd +"\" > /dev/null 2> /dev/null";
+    std::string cmd;
+
+    cmd  = std::string("from salome_utils import killOmniNames; ");
+    cmd += std::string("killOmniNames(") + portNumber + "); ";
+    cmd  = python_exe + std::string(" -c \"") + cmd +"\"";
+    MESSAGE(cmd);
+    system( cmd.c_str() );
+
+    cmd  = std::string("from killSalomeWithPort import cleanApplication; ");
+    cmd += std::string("cleanApplication(") + portNumber + "); ";
+    cmd  = python_exe + std::string(" -c \"") + cmd +"\"";
     MESSAGE(cmd);
     system( cmd.c_str() );
   }
 
-#ifdef WITH_PORTMANAGER
   // shutdown portmanager
   if ( !portNumber.empty() )
   {
-    std::string cmd = ("from PortManager import releasePort; ");
+    std::string cmd;
+
+    cmd  = std::string("from PortManager import releasePort; ");
     cmd += std::string("releasePort(") + portNumber + "); ";
-    cmd  = python_exe + std::string(" -c \"") + cmd +"\" > /dev/null 2> /dev/null";
+    cmd  = python_exe + std::string(" -c \"") + cmd +"\"";
     MESSAGE(cmd);
     system( cmd.c_str() );
   }
-#endif
 }
 
 //=============================================================================
@@ -652,7 +629,6 @@ void SALOME_LifeCycleCORBA::killOmniNames()
  *
  *  \param params         machine parameters like type or name...
  *  \param componentName  the name of component class
- *  \param studyId        default = 0  : multistudy instance
  *  \param listOfMachines list of machine address
  *  \return a CORBA reference of the component instance, or _nil if not found
  */
@@ -662,7 +638,6 @@ Engines::EngineComponent_ptr
 SALOME_LifeCycleCORBA::
 _FindComponent(const Engines::ContainerParameters& params,
                const char *componentName,
-               int studyId,
                const Engines::ResourceList& listOfResources)
 {
   // --- build the list of machines on which the component is already running
@@ -713,7 +688,6 @@ _FindComponent(const Engines::ContainerParameters& params,
  *
  *  \param params         machine parameters like type or name...
  *  \param componentName  the name of component class
- *  \param studyId        default = 0  : multistudy instance
  *  \return a CORBA reference of the component instance, or _nil if problem
  */
 //=============================================================================
@@ -721,8 +695,7 @@ _FindComponent(const Engines::ContainerParameters& params,
 Engines::EngineComponent_ptr
 SALOME_LifeCycleCORBA::
 _LoadComponent(const Engines::ContainerParameters& params,
-              const char *componentName,
-              int studyId)
+              const char *componentName)
 {
   MESSAGE("_LoadComponent, required " << params.container_name <<
           " " << componentName << " " << NbProc(params));
@@ -743,7 +716,7 @@ _LoadComponent(const Engines::ContainerParameters& params,
   CORBA::string_free(reason);
 
   Engines::EngineComponent_var myInstance =
-    cont->create_component_instance(componentName, studyId);
+    cont->create_component_instance(componentName);
   return myInstance._retn();
 }
 
@@ -752,14 +725,12 @@ _LoadComponent(const Engines::ContainerParameters& params,
  *
  *  \param params         machine parameters like type or name...
  *  \param componentName  the name of component class
- *  \param studyId        default = 0  : multistudy instance
  *  \return a CORBA reference of the parallel component instance, or _nil if problem
  */
 //=============================================================================
 Engines::EngineComponent_ptr
 SALOME_LifeCycleCORBA::Load_ParallelComponent(const Engines::ContainerParameters& params,
-                                              const char *componentName,
-                                              int studyId)
+                                              const char *componentName)
 {
   MESSAGE("Entering LoadParallelComponent");
 
@@ -795,7 +766,7 @@ SALOME_LifeCycleCORBA::Load_ParallelComponent(const Engines::ContainerParameters
   // @PARALLEL@ permits to identify that the component requested
   // is a parallel component.
   std::string name = std::string(componentName);
-  Engines::EngineComponent_var myInstance = cont->create_component_instance(name.c_str(), studyId);
+  Engines::EngineComponent_var myInstance = cont->create_component_instance(name.c_str());
   if (CORBA::is_nil(myInstance))
     INFOS("create_component_instance returns a NULL component !");
   return myInstance._retn();