]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
On the fly
authorAnthony GEAY <anthony.geay@edf.fr>
Fri, 19 Feb 2021 22:30:21 +0000 (23:30 +0100)
committerAnthony GEAY <anthony.geay@edf.fr>
Fri, 19 Feb 2021 22:30:21 +0000 (23:30 +0100)
src/Container/Container_i.cxx
src/Container/SALOME_Container_i.hxx
src/NamingService/CMakeLists.txt
src/NamingService/SALOME_Fake_NamingService.cxx
src/NamingService/SALOME_Fake_NamingService.hxx
src/NamingService/SALOME_NamingService.cxx
src/NamingService/SALOME_NamingService.hxx
src/NamingService/SALOME_NamingService_Abstract.cxx [new file with mode: 0644]
src/NamingService/SALOME_NamingService_Abstract.hxx
src/NamingService/Test/NamingServiceTest.cxx

index 32c36072071671ec70ea973e9d1dffdd25821a95..0b1447c355444c7a4e6450c7c7d36c184f4a5a5c 100644 (file)
@@ -54,6 +54,7 @@ int SIGUSR1 = 1000;
 #include "SALOME_FileTransfer_i.hxx"
 #include "Salome_file_i.hxx"
 #include "SALOME_NamingService.hxx"
+#include "SALOME_Fake_NamingService.hxx"
 #include "Basics_Utils.hxx"
 
 #ifdef _XOPEN_SOURCE
@@ -133,14 +134,14 @@ Engines_Container_i::Engines_Container_i (CORBA::ORB_ptr orb,
                                           PortableServer::POA_ptr poa,
                                           char *containerName ,
                                           int argc , char* argv[],
-                                          bool activAndRegist,
+                                          SALOME_NamingService_Abstract *ns,
                                           bool isServantAloneInProcess
                                           ) :
   _NS(0),_id(0),_numInstance(0),_isServantAloneInProcess(isServantAloneInProcess)
 {
   _pid = (long)getpid();
 
-  if(activAndRegist)
+  if(ns)
     ActSigIntHandler() ;
 
   _argc = argc ;
@@ -177,10 +178,9 @@ Engines_Container_i::Engines_Container_i (CORBA::ORB_ptr orb,
   // Pour les containers paralleles: il ne faut pas enregistrer et activer
   // le container generique, mais le container specialise
 
-  if(activAndRegist)
   {
     _id = _poa->activate_object(this);
-    _NS = new SALOME_NamingService();
+    _NS = ns==nullptr ? new SALOME_NamingService : ns->clone();
     _NS->init_orb( _orb ) ;
     CORBA::Object_var obj=_poa->id_to_reference(*_id);
     Engines::Container_var pCont 
@@ -1920,7 +1920,8 @@ Engines_Container_i *KERNEL::getContainerSA()
     PortableServer::ObjectId_var conId;
     //
     char *argv[4] = {"Container","FactoryServer","toto",nullptr};
-    _container_singleton_ssl = new Engines_Container_i(orb,poa,"FactoryServer",2,argv,false,false);
+    SALOME_Fake_NamingService ns;
+    _container_singleton_ssl = new Engines_Container_i(orb,poa,"FactoryServer",2,argv,&ns,false);
     _container_id_singleton_ssl = poa->activate_object(_container_singleton_ssl);
     //
     CORBA::Object_var zeRef = poa->id_to_reference(_container_id_singleton_ssl);
index 42564975be9f172b96d2d4081787cccec65431f7..1fd8845e763f67f47aabeb73348b7e5d0725eeeb 100644 (file)
@@ -48,7 +48,7 @@
 #include <list>
 #include <string>
 
-class SALOME_NamingService;
+class SALOME_NamingService_Abstract;
 
 class CONTAINER_EXPORT Engines_Container_i:
   public virtual POA_Engines::Container,
@@ -60,7 +60,7 @@ public:
                       PortableServer::POA_ptr poa,
                       char * containerName ,
                       int argc, char* argv[],
-                      bool activAndRegist = true,
+                      SALOME_NamingService_Abstract *ns = nullptr,
                       bool isServantAloneInProcess = true);
   virtual ~Engines_Container_i();
 
@@ -150,7 +150,7 @@ protected:
 
   bool _isSupervContainer;
 
-  SALOME_NamingService *_NS ;
+  SALOME_NamingService_Abstract *_NS ;
   std::string _library_path;
   std::string _containerName;
   std::string _logfilename;
index 82f0ce4f0d013362cc73161b2a5cb59272e7820c..42f433d7dd2d17f499a66a9929bd79809bb7aa1e 100644 (file)
@@ -32,6 +32,7 @@ SET(SalomeNS_SOURCES
   ServiceUnreachable.cxx
   NamingService_WaitForServerReadiness.cxx
   SALOME_Fake_NamingService.cxx
+  SALOME_NamingService_Abstract.cxx
 )
 
 
index 430dc6d06a1ada51267bcb5fd02b54a6c3f71dd8..f521034a2a98fa6286b21d76a520860d92532246 100644 (file)
@@ -27,6 +27,10 @@ SALOME_Fake_NamingService::SALOME_Fake_NamingService(CORBA::ORB_ptr orb)
 {
 }
 
+void SALOME_Fake_NamingService::init_orb(CORBA::ORB_ptr orb)
+{
+}
+
 void SALOME_Fake_NamingService::Register(CORBA::Object_ptr ObjRef, const char* Path)
 {
   std::lock_guard<std::mutex> g(_mutex);
@@ -42,6 +46,10 @@ void SALOME_Fake_NamingService::Destroy_Directory(const char* Path)
 {
 }
 
+void SALOME_Fake_NamingService::Destroy_FullDirectory(const char* Path)
+{
+}
+
 bool SALOME_Fake_NamingService::Change_Directory(const char* Path)
 {
   return true;
@@ -66,6 +74,11 @@ CORBA::Object_ptr SALOME_Fake_NamingService::Resolve(const char* Path)
   return CORBA::Object::_nil();
 }
 
+CORBA::Object_ptr SALOME_Fake_NamingService::ResolveFirst(const char* Path)
+{
+  return CORBA::Object::_nil();
+}
+
 SALOME_NamingService_Abstract *SALOME_Fake_NamingService::clone()
 {
   return new SALOME_Fake_NamingService;
index 77aad7a1fc252e99b8181e32a392b75b1eae880e..f60e1480e66cb95df04bb6252080da4ea9e4d494 100644 (file)
@@ -32,10 +32,13 @@ class NAMINGSERVICE_EXPORT SALOME_Fake_NamingService : public SALOME_NamingServi
 public:
     SALOME_Fake_NamingService(CORBA::ORB_ptr orb);
     SALOME_Fake_NamingService() = default;
+    void init_orb(CORBA::ORB_ptr orb=0) override;
     void Register(CORBA::Object_ptr ObjRef, const char* Path) override;
     CORBA::Object_ptr Resolve(const char* Path) override;
+    CORBA::Object_ptr ResolveFirst(const char* Path) override;
     void Destroy_Name(const char* Path) override;
     void Destroy_Directory(const char* Path) override;
+    void Destroy_FullDirectory(const char* Path) override;
     bool Change_Directory(const char* Path) override;
     std::vector<std::string> list_subdirs() override;
     std::vector<std::string> list_directory() override;
index 12b0a0000fbea3d63b393990a5fcbe5cf106ccd0..4268406c0d74e7d61eb171fc9104f5371281ddd3 100644 (file)
@@ -559,29 +559,6 @@ SALOME_NamingService::ResolveComponent(const char* hostname,
     }
 }
 
-// ============================================================================
-/*! \brief provide a default container name if empty.
- *
- *  the given container name is returned unchanged, unless it is empty.
- * \param  containerName
- * \return container name, where empty input is replaced by "FactoryServer",
- *         without the path.
- * \sa BuildContainerNameForNS(const char *containerName, const char *hostname)
- */
-// ============================================================================
-
-std::string SALOME_NamingService::ContainerName(const char *containerName)
-{
-  std::string ret,containerNameCpp(containerName);
-
-  if (containerNameCpp.empty())
-    ret = "FactoryServer";
-  else
-    ret = containerName;
-
-  return ret;
-}
-
 // ============================================================================
 /*! \brief build a container name, given a ContainerParameters struct.
  *
@@ -606,7 +583,7 @@ std::string SALOME_NamingService::ContainerName(const Engines::ContainerParamete
   else
     nbproc = params.nb_proc;
 
-  std::string ret(ContainerName(params.container_name));
+  std::string ret(SALOME_NamingService_Abstract::ContainerName(params.container_name));
 
   if ( nbproc >= 1 )
     {
@@ -618,30 +595,6 @@ std::string SALOME_NamingService::ContainerName(const Engines::ContainerParamete
   return ret;
 }
 
-// ============================================================================
-/*! \brief build a string representing a container in Naming Service.
- *
- *  Build a string representing the absolute pathname of a container in
- *  SALOME_NamingService. This form gives a suffixed containerName in case of
- *  multi processor machine.
- * \param containerName name of the container in which the component is
-                        instantiated.
- * \param hostname name of the host of the container, without domain names.
- * \return the path under the form /Containers/hostname/containerName
- * \sa ContainerName(const Engines::MachineParameters& params)
- */
-// ============================================================================
-
-std::string SALOME_NamingService::BuildContainerNameForNS(const char *containerName, const char *hostname)
-{
-  std::string ret("/Containers/");
-  ret += hostname;
-  ret += "/";
-  ret += ContainerName(containerName);
-
-  return ret;
-}
-
 // ============================================================================
 /*! \brief build a string representing a container in Naming Service.
  *
index 293bb68f608b14ad9df72a00ef8b77dd1983244a..9bd9dc0b15e280e675f52a13edfd3d6ca40e57b1 100644 (file)
@@ -54,7 +54,7 @@ public:
   
   static SALOME_NamingService *GetTraditionalNS(SALOME_NamingService_Abstract *ns);
 
-  void init_orb(CORBA::ORB_ptr orb=0);
+  void init_orb(CORBA::ORB_ptr orb=0) override;
   void Register(CORBA::Object_ptr ObjRef, const char* Path) override;
   CORBA::Object_ptr Resolve(const char* Path) override; 
   CORBA::Object_ptr ResolveFirst(const char* Path) ; 
@@ -62,9 +62,7 @@ public:
                                      const char* containerName,
                                      const char* componentName,
                                      const int nbproc=0) override;
-  std::string ContainerName(const char *ContainerName);
   std::string ContainerName(const Engines::ContainerParameters& params);
-  std::string BuildContainerNameForNS(const char *ContainerName, const char *hostname);
   std::string BuildContainerNameForNS(const Engines::ContainerParameters& params, const char *hostname);
 
   int Find(const char* name) ;
@@ -76,8 +74,8 @@ public:
   std::vector<std::string> list_subdirs() override;
   std::vector<std::string> list_directory_recurs() ;
   void Destroy_Name(const char* Path) override;
-  virtual void Destroy_Directory(const char* Path) override;
-  virtual void Destroy_FullDirectory(const char* Path) ;
+  void Destroy_Directory(const char* Path) override;
+  void Destroy_FullDirectory(const char* Path) override;
   char *getIORaddr();
   CORBA::ORB_ptr orb();
   SALOME_NamingService_Abstract *clone() override;
diff --git a/src/NamingService/SALOME_NamingService_Abstract.cxx b/src/NamingService/SALOME_NamingService_Abstract.cxx
new file mode 100644 (file)
index 0000000..4469dfe
--- /dev/null
@@ -0,0 +1,67 @@
+// 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_NamingService_Abstract.hxx"
+
+// ============================================================================
+/*! \brief provide a default container name if empty.
+ *
+ *  the given container name is returned unchanged, unless it is empty.
+ * \param  containerName
+ * \return container name, where empty input is replaced by "FactoryServer",
+ *         without the path.
+ * \sa BuildContainerNameForNS(const char *containerName, const char *hostname)
+ */
+// ============================================================================
+
+std::string SALOME_NamingService_Abstract::ContainerName(const char *containerName)
+{
+  std::string ret,containerNameCpp(containerName);
+
+  if (containerNameCpp.empty())
+    ret = "FactoryServer";
+  else
+    ret = containerName;
+
+  return ret;
+}
+
+// ============================================================================
+/*! \brief build a string representing a container in Naming Service.
+ *
+ *  Build a string representing the absolute pathname of a container in
+ *  SALOME_NamingService. This form gives a suffixed containerName in case of
+ *  multi processor machine.
+ * \param containerName name of the container in which the component is
+                        instantiated.
+ * \param hostname name of the host of the container, without domain names.
+ * \return the path under the form /Containers/hostname/containerName
+ * \sa ContainerName(const Engines::MachineParameters& params)
+ */
+// ============================================================================
+
+std::string SALOME_NamingService_Abstract::BuildContainerNameForNS(const char *containerName, const char *hostname)
+{
+  std::string ret("/Containers/");
+  ret += hostname;
+  ret += "/";
+  ret += ContainerName(containerName);
+
+  return ret;
+}
index d6603fd7863e24ddebe9f782fb52f3cebadcd97a..ce7301c7909ad9e3baa7a5c06a7457c88c26c614 100644 (file)
 class NAMINGSERVICE_EXPORT SALOME_NamingService_Abstract
 {
 public:
+  virtual void init_orb(CORBA::ORB_ptr orb=0) = 0;
   virtual void Register(CORBA::Object_ptr ObjRef, const char* Path) = 0;
   virtual CORBA::Object_ptr Resolve(const char* Path) = 0;
+  virtual CORBA::Object_ptr ResolveFirst(const char* Path) = 0; 
   virtual void Destroy_Name(const char* Path) = 0;
   virtual void Destroy_Directory(const char* Path) = 0;
+  virtual void Destroy_FullDirectory(const char* Path) = 0;
   virtual bool Change_Directory(const char* Path) = 0;
   virtual std::vector<std::string> list_subdirs() = 0;
   virtual std::vector<std::string> list_directory() = 0;
   virtual SALOME_NamingService_Abstract *clone() = 0;
   virtual CORBA::Object_ptr ResolveComponent(const char* hostname, const char* containerName, const char* componentName, const int nbproc=0) = 0;
   virtual ~SALOME_NamingService_Abstract() { }
+  static std::string ContainerName(const char *ContainerName);
+  static std::string BuildContainerNameForNS(const char *ContainerName, const char *hostname);
 };
index 79f168fad47c1546264a07131c63f218292db3b8..ef99a79d1c8e6e5302d4bed9e193acc561537e29 100644 (file)
@@ -815,11 +815,11 @@ void
 NamingServiceTest::testContainerName()
 {
   std::string ref0 = "FactoryServer";
-  std::string ret = _NS.ContainerName("");
+  std::string ret = SALOME_NamingService_Abstract::ContainerName("");
   CPPUNIT_ASSERT(ret == ref0);
 
   ref0 = "MyContainerName";
-  ret = _NS.ContainerName(ref0.c_str());
+  ret = SALOME_NamingService_Abstract::ContainerName(ref0.c_str());
   CPPUNIT_ASSERT(ret == ref0);
 }
 
@@ -855,11 +855,11 @@ void
 NamingServiceTest::testBuildContainerNameForNS()
 {
   std::string ref0 = "/Containers/theHostName/theContainerName";
-  std::string ret = _NS.BuildContainerNameForNS("theContainerName","theHostName");
+  std::string ret = SALOME_NamingService_Abstract::BuildContainerNameForNS("theContainerName","theHostName");
   CPPUNIT_ASSERT(ret == ref0);
 
   ref0 = "/Containers/theHostName/FactoryServer";
-  ret = _NS.BuildContainerNameForNS("","theHostName");
+  ret = SALOME_NamingService_Abstract::BuildContainerNameForNS("","theHostName");
   CPPUNIT_ASSERT(ret == ref0);
 }