Salome HOME
Shutdown data servers scopes in driver command.
authorOvidiu Mircescu <ovidiu.mircescu@edf.fr>
Thu, 2 Sep 2021 09:29:36 +0000 (11:29 +0200)
committerOvidiu Mircescu <ovidiu.mircescu@edf.fr>
Thu, 2 Sep 2021 09:29:36 +0000 (11:29 +0200)
src/yacsloader/driver.cxx

index c03dfcd2dfbef46ffd32a5a90a879e148fffb527..95f0e4de67035ac0b07e5b6df04a61f94328a5d6 100644 (file)
 #include "LinkInfo.hxx"
 #include "ObserverAsPlugin.hxx"
 
-#ifdef SALOME_KERNEL
-
 #include "KernelBasis.hxx"
 #include "SALOME_Launcher.hxx"
 #include "ServiceUnreachable.hxx"
 #include "SALOME_NamingService_Wrapper.hxx"
 #include "SALOME_NamingService.hxx"
 #include "SALOME_ModuleCatalog.hh"
+#include "SALOMESDS_DataServerManager.hxx"
 #include "Basics_Utils.hxx"
-#endif
 
 #include <iostream>
 #include <fstream>
@@ -305,6 +303,33 @@ void InitializeSSL()
   KERNEL::getLauncherSA();
 }
 
+void shutdownServers()
+{
+  // shutdown data server scopes
+  try
+    {
+      YACS::ENGINE::RuntimeSALOME* runTime = YACS::ENGINE::getSALOMERuntime();
+      runTime->loadModulCatalog();
+      CORBA::ORB_ptr orb = runTime->getOrb();
+      if (orb)
+      {
+        SALOME_NamingService_Wrapper namingService(orb);
+        CORBA::Object_var objDSM(namingService.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& )
+    {
+       // ignore and continue
+    }
+  catch(ServiceUnreachable& e)
+    {
+       // ignore and continue
+    }
+}
+
 int main (int argc, char* argv[])
 {
      
@@ -366,7 +391,6 @@ int main (int argc, char* argv[])
       if (orb)
         {
           SALOME_NamingService_Wrapper namingService(orb);
-          //SALOME_NamingService namingService(orb);
           CORBA::Object_var obj = namingService.Resolve("/Kernel/ModulCatalog");
           SALOME_ModuleCatalog::ModuleCatalog_var aModuleCatalog = SALOME_ModuleCatalog::ModuleCatalog::_narrow(obj);
           if (! CORBA::is_nil(aModuleCatalog))
@@ -502,11 +526,12 @@ int main (int argc, char* argv[])
         }
 
       if (myArgs.stop)
+      {
         if (strlen(myArgs.dumpErrorFile) >0)
           executor.setStopOnError(true, myArgs.dumpErrorFile);
         else
           executor.setStopOnError(false, myArgs.dumpErrorFile);
-
+      }
       if(myArgs.display>0)
         {
           std::ofstream f("toto");
@@ -568,6 +593,7 @@ int main (int argc, char* argv[])
       if(myArgs.shutdown < 999)
         {
           p->shutdown(myArgs.shutdown);
+          shutdownServers();
         }
       delete p;
       Runtime* r=YACS::ENGINE::getRuntime();