Salome HOME
updated copyright message
[modules/kernel.git] / src / Launcher / SALOME_Launcher.cxx
index 41d0b850c94d0644da5e8bd951c5d24eab4bf859..5f19212fe0b88a05b710e2a01369bafff5df8c3f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2019  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2023  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -58,10 +58,21 @@ const char *SALOME_Launcher::_LauncherNameInNS = "/SalomeLauncher";
  *  \param orb
  */
 //=============================================================================
-SALOME_Launcher::SALOME_Launcher(CORBA::ORB_ptr orb, PortableServer::POA_var poa) : _l()
+SALOME_Launcher::SALOME_Launcher(CORBA::ORB_ptr orb, PortableServer::POA_var poa)
 {
   MESSAGE("SALOME_Launcher constructor");
   _NS = new SALOME_NamingService(orb);
+  init(orb,poa);
+  MESSAGE("SALOME_Launcher constructor end");
+}
+
+SALOME_Launcher::SALOME_Launcher(CORBA::ORB_ptr orb, PortableServer::POA_var poa, SALOME_NamingService_Abstract *externalNS):_NS(externalNS)
+{
+  init(orb,poa);
+}
+
+void SALOME_Launcher::init(CORBA::ORB_ptr orb, PortableServer::POA_var poa)
+{
   _ResManager = new SALOME_ResourcesManager(orb,poa,_NS);
   _l.SetResourcesManager(_ResManager->GetImpl());
   _ContManager = new SALOME_ContainerManager(orb,poa,_NS);
@@ -73,9 +84,7 @@ SALOME_Launcher::SALOME_Launcher(CORBA::ORB_ptr orb, PortableServer::POA_var poa
   PortableServer::ObjectId_var id = _poa->activate_object(this);
   CORBA::Object_var obj = _poa->id_to_reference(id);
   Engines::SalomeLauncher_var refContMan = Engines::SalomeLauncher::_narrow(obj);
-
   _NS->Register(refContMan,_LauncherNameInNS);
-  MESSAGE("SALOME_Launcher constructor end");
 }
 
 //=============================================================================
@@ -158,6 +167,20 @@ SALOME_Launcher::getAssignedHostnames(CORBA::Long job_id)
   return CORBA::string_dup(result.c_str());
 }
 
+void
+SALOME_Launcher::exportInputFiles(CORBA::Long job_id)
+{
+  try
+  {
+    _l.exportInputFiles(job_id);
+  }
+  catch(const LauncherException &ex)
+  {
+    INFOS(ex.msg.c_str());
+    THROW_SALOME_CORBA_EXCEPTION(ex.msg.c_str(),SALOME::BAD_PARAM);
+  }
+}
+
 void
 SALOME_Launcher::getJobResults(CORBA::Long job_id, const char * directory)
 {
@@ -218,6 +241,11 @@ SALOME_Launcher::getJobWorkFile(CORBA::Long job_id, const char * work_file, cons
   return rtn;
 }
 
+void SALOME_Launcher::DeclareUsingSalomeSession()
+{
+  this->_ContManager->DeclareUsingSalomeSession();
+}
+
 void
 SALOME_Launcher::removeJob(CORBA::Long job_id)
 {
@@ -359,6 +387,8 @@ SALOME_Launcher::testBatch(const Engines::ResourceParameters& params)
 void SALOME_Launcher::Shutdown()
 {
   MESSAGE("Shutdown");
+  if(!_NS)
+    return;
   _NS->Destroy_Name(_LauncherNameInNS);
   _ContManager->Shutdown();
   _ResManager->Shutdown();
@@ -627,7 +657,7 @@ SALOME_Launcher::JobParameters_CPP2CORBA(const JobParameters_cpp& job_parameters
   result->job_file = CORBA::string_dup(job_parameters.job_file.c_str());
   result->pre_command = CORBA::string_dup(job_parameters.pre_command.c_str());
   result->env_file = CORBA::string_dup(job_parameters.env_file.c_str());
-  result->in_files.length(job_parameters.in_files.size());
+  result->in_files.length((CORBA::ULong)job_parameters.in_files.size()); //!< TODO: conversion from size_t to CORBA::ULong
 
   int i = 0;
   for(const std::string& it : job_parameters.in_files)
@@ -635,7 +665,7 @@ SALOME_Launcher::JobParameters_CPP2CORBA(const JobParameters_cpp& job_parameters
     result->in_files[i] = CORBA::string_dup(it.c_str());
     i++;
   }
-  result->out_files.length(job_parameters.out_files.size());
+  result->out_files.length((CORBA::ULong)job_parameters.out_files.size()); //!< TODO: conversion from size_t to CORBA::ULong
   i = 0;
   for(const std::string& it : job_parameters.out_files)
   {
@@ -661,7 +691,7 @@ SALOME_Launcher::JobParameters_CPP2CORBA(const JobParameters_cpp& job_parameters
                                        = job_parameters.specific_parameters;
   if (!specific_parameters.empty())
   {
-    result->specific_parameters.length(specific_parameters.size());
+    result->specific_parameters.length((CORBA::ULong)specific_parameters.size()); //!< TODO: conversion from size_t to CORBA::ULong
     CORBA::ULong i = 0;
     for (const auto& it_specific : specific_parameters)
     {
@@ -677,3 +707,29 @@ SALOME_Launcher::JobParameters_CPP2CORBA(const JobParameters_cpp& job_parameters
   result->launcher_args = CORBA::string_dup(job_parameters.launcher_args.c_str());
   return result;
 }
+
+static SALOME_Launcher *_launcher_singleton_ssl = nullptr;
+
+#include "SALOME_Fake_NamingService.hxx"
+
+SALOME_Launcher *KERNEL::getLauncherSA()
+{
+  if(!_launcher_singleton_ssl)
+  {
+    CORBA::ORB_var orb = KERNEL::GetRefToORB();
+    //[EDF26673] : do not release the POA object returned by _the_root_poa.
+    PortableServer::POA_ptr root_poa = PortableServer::POA::_the_root_poa();
+    PortableServer::POAManager_var pman = root_poa->the_POAManager();
+    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);
+    PortableServer::POA_var safePOA = root_poa->create_POA("SingleThreadPOA",
+                                                           pman,
+                                                           policies);
+    threadPol->destroy();
+    SALOME_Fake_NamingService *ns=new SALOME_Fake_NamingService(orb);
+    _launcher_singleton_ssl = new SALOME_Launcher(orb,safePOA,ns);//3rd arg is important to skip NS !
+  }
+  return _launcher_singleton_ssl;
+}