]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
Implementation d un servant embarque de FakeNS pour que le container lancé puisse...
authorAnthony Geay <anthony.geay@edf.fr>
Thu, 15 Apr 2021 14:27:01 +0000 (16:27 +0200)
committerAnthony Geay <anthony.geay@edf.fr>
Thu, 15 Apr 2021 14:27:01 +0000 (16:27 +0200)
16 files changed:
CMakeLists.txt
SalomeKERNELConfig.cmake.in
idl/CMakeLists.txt
idl/SALOME_Embedded_NamingService.idl [new file with mode: 0644]
src/Container/SALOME_ContainerManager.hxx
src/KernelHelpers/CMakeLists.txt
src/KernelHelpers/SALOME_KernelORB.cxx [new file with mode: 0644]
src/KernelHelpers/SALOME_KernelORB.hxx [new file with mode: 0644]
src/KernelHelpers/SALOME_KernelServices.cxx
src/KernelHelpers/SALOME_KernelServices.hxx
src/Launcher/SALOME_Launcher.cxx
src/Launcher/SALOME_Launcher.hxx
src/Launcher/SALOME_LauncherServer.cxx
src/NamingService/CMakeLists.txt
src/NamingService/SALOME_Embedded_NamingService.cxx [new file with mode: 0644]
src/NamingService/SALOME_Embedded_NamingService.hxx [new file with mode: 0644]

index 652b7c175c00bf8999f751e9f19c17eadd9562d6..1c523d38deab845370f48ab204cc779ff49583a1 100755 (executable)
@@ -217,7 +217,7 @@ IF(NOT SALOME_LIGHT_ONLY)
     DF SalomeLoggerServer with_loggerTraceCollector SalomeNS SalomeGenericObj
     Registry SalomeCatalog ResourcesManager SalomeResourcesManager
     SalomeNotification SalomeContainer SalomeSDS Launcher SalomeLauncher
-    SalomeLifeCycleCORBA SalomeDSClient TOOLSDS SalomeKernelHelpers
+    SalomeLifeCycleCORBA SalomeDSClient TOOLSDS SalomeKernelHelpers SalomeORB
     SalomeDSImpl SalomeDS SalomeCommunication SalomeDSCContainer)
   # Temporary solution for package src\DSC on windows
   IF(NOT WIN32)
index 13c0d81c986fb3318e04c159565098f2c971c586..34de7a3679201cafd6aee697b0c829a56b72cd19 100644 (file)
@@ -186,3 +186,4 @@ SET(KERNEL_TOOLSDS TOOLSDS)
 SET(KERNEL_UtilsTest UtilsTest)
 SET(KERNEL_with_loggerTraceCollector with_loggerTraceCollector)
 SET(KERNEL_SalomeKernelHelpers SalomeKernelHelpers)
+SET(KERNEL_SalomeORB SalomeORB)
index 2ca550e40b99cfd74952fc418f1f60d65ac319b1..de7f9d9ee63adc76396469107c548064ad7b3cea 100644 (file)
@@ -55,6 +55,7 @@ SET(SalomeIDLKernel_IDLSOURCES
   SALOME_TestModuleCatalog.idl
   SALOME_CommonTypes.idl
   SALOME_ExternalServerLauncher.idl
+  SALOME_Embedded_NamingService.idl
   ${CMAKE_CURRENT_BINARY_DIR}/Calcium_Ports.idl
 )
 
diff --git a/idl/SALOME_Embedded_NamingService.idl b/idl/SALOME_Embedded_NamingService.idl
new file mode 100644 (file)
index 0000000..c8c4020
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright (C) 2007-2021  CEA/DEN, EDF R&D
+//
+// 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, 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
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef _SALOME_EMBEDDED_NAMINGSERVICE_IDL_
+#define _SALOME_EMBEDDED_NAMINGSERVICE_IDL_
+
+module Engines
+{
+  typedef sequence<octet> IORType;
+
+  interface EmbeddedNamingService
+  {
+    void Register(in IORType ObjRef, in string Path);
+    void Destroy_FullDirectory(in string Path);
+    void Destroy_Name(in string Path);
+    IORType Resolve(in string Path);
+    IORType ResolveFirst(in string Path);
+  };
+};
+
+#endif
index 0a5fd143f7c31a34d307cf03519a5ecf4710c972..bc8587ce36454af41a1b65deca30f6f4326d0dbe 100644 (file)
@@ -53,6 +53,8 @@ public:
   // C++ Methods
   void Shutdown();
 
+  void DeclareUsingSalomeSession() { _isSSL = false; }
+
   static const char *_ContainerManagerNameInNS;
 
 protected:
@@ -114,6 +116,9 @@ protected:
   //! attribute that contains the number of processes used in batch mode by MPI containers
   int _nbprocUsed;
 
+  //! attribute that specifies the launch mode.
+  bool _isSSL = true;
+
   static omni_mutex _numInstanceMutex ; // lib and instance protection
 
   //! attributes to allow concurrency for // GiveContainer
index 9c8ce0461d2fa38fd7de53484b4a890a0feb2b05..f03b04cd7e70207d3346983e70dfff4178141f7e 100644 (file)
@@ -36,8 +36,16 @@ INCLUDE_DIRECTORIES(
   ${PROJECT_BINARY_DIR}/idl
 )
 
+SET(SalomeORB_SOURCES
+  SALOME_KernelORB.cxx
+)
+
+ADD_LIBRARY(SalomeORB ${SalomeORB_SOURCES})
+TARGET_LINK_LIBRARIES(SalomeORB ${OMNIORB_LIBRARIES})
+INSTALL(TARGETS SalomeORB EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS})
+
 SET(SalomeKernelHelpers_LIBS
-  ${OMNIORB_LIBRARIES}
+  SalomeORB
   SalomeNS
   SALOMELocalTrace
   SALOMEBasics
diff --git a/src/KernelHelpers/SALOME_KernelORB.cxx b/src/KernelHelpers/SALOME_KernelORB.cxx
new file mode 100644 (file)
index 0000000..ed8b9da
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright (C) 2021  CEA/DEN, EDF R&D
+//
+// 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, 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
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "SALOME_KernelORB.hxx"
+
+namespace KERNEL {
+  /**
+   * This function returns a static reference to the orb. The orb can
+   * be used for example to initialize CORBA variables or to serialize
+   * and unserialize the CORBA objet to/from an IOR string.
+   */
+  CORBA::ORB_ptr getORB() {
+    static CORBA::ORB_ptr orb;
+    if(CORBA::is_nil(orb)){
+      int argc=0;
+      orb = CORBA::ORB_init(argc,0);
+    }
+    return orb;
+  }
+}
diff --git a/src/KernelHelpers/SALOME_KernelORB.hxx b/src/KernelHelpers/SALOME_KernelORB.hxx
new file mode 100644 (file)
index 0000000..4c09809
--- /dev/null
@@ -0,0 +1,31 @@
+// Copyright (C) 2007-2021  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// 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, 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
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+// Author: Guillaume Boulant (EDF/R&D) 
+
+#pragma once
+
+#include "KernelHelpers.hxx"
+
+#include <omniORB4/CORBA.h>
+
+namespace KERNEL
+{
+  KERNELHELPERS_EXPORT CORBA::ORB_ptr getORB();
+}
index 61e59350bbe43c9d579094175d2d5e1cb1fbc76b..efc9bf85e2a708816763c10c3dd0be1a3e7780b9 100644 (file)
@@ -31,20 +31,6 @@ std::unique_ptr<SALOME_NamingService_Abstract> _naming_service;
 
 namespace KERNEL {
   
-  /**
-   * This function returns a static reference to the orb. The orb can
-   * be used for example to initialize CORBA variables or to serialize
-   * and unserialize the CORBA objet to/from an IOR string.
-   */
-  CORBA::ORB_ptr getORB() {
-    static CORBA::ORB_ptr orb;
-    if(CORBA::is_nil(orb)){
-      int argc=0;
-      orb = CORBA::ORB_init(argc,0);
-    }
-    return orb;
-  }
-  
   void assignNamingServiceSL()
   {
     if ( !_naming_service.get() )
index decc6fd17225b16f01237ac3a9208ea9b0b70ca1..42f8dc63868037cdb90e55d332095b11f54015e9 100644 (file)
 #include "SALOME_NamingService.hxx"
 #include "SALOME_LifeCycleCORBA.hxx"
 
+#include "SALOME_KernelORB.hxx"
+
 namespace KERNEL {
 
   // ---------------------------------------------
   // SALOME KERNEL main services
-  KERNELHELPERS_EXPORT CORBA::ORB_ptr                getORB();
   KERNELHELPERS_EXPORT SALOME_NamingService_Abstract *getNamingService();
   KERNELHELPERS_EXPORT void assignNamingServiceSL();
   KERNELHELPERS_EXPORT SALOME_LifeCycleCORBA *       getLifeCycleCORBA();
index e17bca3cda9602aab99b0db7b5a1e24949d5f17a..11d16abac88d8c318034719f6e118bd37b7cf43b 100644 (file)
@@ -241,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)
 {
index 2e9b975698c5a3b4490d8c3ec5d5a5393a28baa8..9fcbc2023bdd0d8fcd1b0cf5f7e7270d189415ff 100644 (file)
@@ -77,6 +77,8 @@ public:
   // Save and load methods
   virtual void loadJobs(const char* jobs_file);
   virtual void saveJobs(const char* jobs_file);
+  
+  void DeclareUsingSalomeSession();
 
   static const char *_LauncherNameInNS;
 
index 34d6e55418e0dc50abbbed9be5a44600643a91f4..4692f5e2b8638790b68d98fa08fcb14b0f0b4270 100644 (file)
@@ -118,6 +118,7 @@ int main(int argc, char* argv[])
       SALOME_CPythonHelper cPyh;
       cPyh.initializePython(argc,argv);
       SALOME_Launcher *lServ(new SALOME_Launcher(orb,safePOA));
+      lServ->DeclareUsingSalomeSession();
       lServ->_remove_ref();
       //
       SALOMESDS::DataServerManager *dsm(new SALOMESDS::DataServerManager(&cPyh,orb,root_poa));
index 7009bac9aeb03a101b5a38d1ba10896c2460983a..b9a6fc4ed34a2029cebd9994c5f1b743a32180c9 100644 (file)
@@ -24,6 +24,9 @@ INCLUDE_DIRECTORIES(
   ${CMAKE_CURRENT_SOURCE_DIR}/../Basics
   ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace
   ${CMAKE_CURRENT_SOURCE_DIR}/../Utils
+  ${CMAKE_CURRENT_SOURCE_DIR}/../KernelHelpers
+  ${CMAKE_CURRENT_SOURCE_DIR}/../LifeCycleCORBA
+  ${CMAKE_CURRENT_SOURCE_DIR}
   ${PROJECT_BINARY_DIR}/idl
   )
 
@@ -33,13 +36,13 @@ SET(SalomeNS_SOURCES
   NamingService_WaitForServerReadiness.cxx
   SALOME_Fake_NamingService.cxx
   SALOME_NamingService_Abstract.cxx
+  SALOME_Embedded_NamingService.cxx
 )
 
-
 ADD_DEFINITIONS(${OMNIORB_DEFINITIONS})
 ADD_LIBRARY(SalomeNS ${SalomeNS_SOURCES})
 ADD_DEPENDENCIES(SalomeNS SalomeIDLKernel)
-TARGET_LINK_LIBRARIES(SalomeNS OpUtil)
+TARGET_LINK_LIBRARIES(SalomeNS OpUtil SalomeORB)
 
 INSTALL(TARGETS SalomeNS EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS})
 
diff --git a/src/NamingService/SALOME_Embedded_NamingService.cxx b/src/NamingService/SALOME_Embedded_NamingService.cxx
new file mode 100644 (file)
index 0000000..3eca13b
--- /dev/null
@@ -0,0 +1,81 @@
+// Copyright (C) 2021  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// 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, 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
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "SALOME_Embedded_NamingService.hxx"
+#include "SALOME_Fake_NamingService.hxx"
+#include "SALOME_KernelORB.hxx"
+
+#include <memory>
+#include <cstring>
+
+CORBA::Object_var IORToObject(const Engines::IORType& ObjRef)
+{
+  CORBA::ORB_ptr orb(KERNEL::getORB());
+  CORBA::ULong size(ObjRef.length());
+  std::unique_ptr<char[]> pt(new char[size+1]);
+  pt[size] = '\0';
+  for(CORBA::ULong i = 0 ; i < size ; ++i)
+    pt[i] = ObjRef[i];
+  CORBA::Object_var obj = orb->string_to_object(pt.get());
+  return obj;
+}
+
+Engines::IORType *ObjectToIOR(CORBA::Object_ptr obj)
+{
+  std::unique_ptr<Engines::IORType> ret(new Engines::IORType);
+  CORBA::ORB_ptr orb(KERNEL::getORB());
+  CORBA::String_var ior = orb->object_to_string(obj);
+  auto len( strlen(ior) );
+  ret->length( len );
+  for(std::size_t i = 0 ; i < len ; ++i)
+    (*ret)[i] = ior[i];
+  return ret.release();
+}
+
+void SALOME_Embedded_NamingService::Register(const Engines::IORType& ObjRef, const char *Path)
+{
+  SALOME_Fake_NamingService ns;
+  ns.Register(IORToObject(ObjRef),Path);
+}
+
+void SALOME_Embedded_NamingService::Destroy_FullDirectory(const char *Path)
+{
+  SALOME_Fake_NamingService ns;
+  ns.Destroy_FullDirectory(Path);
+}
+
+void SALOME_Embedded_NamingService::Destroy_Name(const char *Path)
+{
+  SALOME_Fake_NamingService ns;
+  ns.Destroy_Name(Path);
+}
+
+Engines::IORType *SALOME_Embedded_NamingService::Resolve(const char *Path)
+{
+  SALOME_Fake_NamingService ns;
+  CORBA::Object_var obj = ns.Resolve(Path);
+  return ObjectToIOR(obj);
+}
+
+Engines::IORType *SALOME_Embedded_NamingService::ResolveFirst(const char *Path)
+{
+  SALOME_Fake_NamingService ns;
+  CORBA::Object_var obj = ns.ResolveFirst(Path);
+  return ObjectToIOR(obj);
+}
diff --git a/src/NamingService/SALOME_Embedded_NamingService.hxx b/src/NamingService/SALOME_Embedded_NamingService.hxx
new file mode 100644 (file)
index 0000000..38f76c7
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright (C) 2021  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// 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, 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
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#pragma once
+
+#include "SALOME_NamingService_defs.hxx"
+
+#include <SALOMEconfig.h>
+#include CORBA_CLIENT_HEADER(SALOME_Embedded_NamingService)
+
+class NAMINGSERVICE_EXPORT SALOME_Embedded_NamingService : public virtual POA_Engines::EmbeddedNamingService
+{
+public:
+  void Register(const Engines::IORType& ObjRef, const char *Path) override;
+  void Destroy_FullDirectory(const char *Path) override;
+  void Destroy_Name(const char *Path) override;
+  Engines::IORType *Resolve(const char *Path) override;
+  Engines::IORType *ResolveFirst(const char *Path) override;
+};