From f4fd1701433a617d0a8789cf5e90c78029842d4c Mon Sep 17 00:00:00 2001 From: Anthony Geay Date: Tue, 17 Aug 2021 14:58:01 +0200 Subject: [PATCH] DataServerManager is now available in SSL mode --- src/SALOMESDS/CMakeLists.txt | 26 ++++++++++ src/SALOMESDS/KernelSDS.cxx | 50 +++++++++++++++++++ src/SALOMESDS/KernelSDS.hxx | 24 +++++++++ src/SALOMESDS/KernelSDS.i | 39 +++++++++++++++ src/SALOMESDS/SALOMESDS_DataScopeServer.cxx | 19 ++++--- src/SALOMESDS/SALOMESDS_DataScopeServer.hxx | 9 ++-- src/SALOMESDS/SALOMESDS_DataServerManager.cxx | 47 +++++++++-------- src/SALOMESDS/SALOMESDS_DataServerManager.hxx | 9 ++-- src/SALOMESDS/SALOME_DataScopeServer.cxx | 4 +- 9 files changed, 185 insertions(+), 42 deletions(-) create mode 100644 src/SALOMESDS/KernelSDS.cxx create mode 100644 src/SALOMESDS/KernelSDS.hxx create mode 100644 src/SALOMESDS/KernelSDS.i diff --git a/src/SALOMESDS/CMakeLists.txt b/src/SALOMESDS/CMakeLists.txt index 8c2f7c5b9..c3195be20 100644 --- a/src/SALOMESDS/CMakeLists.txt +++ b/src/SALOMESDS/CMakeLists.txt @@ -18,6 +18,8 @@ # # Author : Anthony GEAY (EDF R&D) +include(${SWIG_USE_FILE}) + INCLUDE_DIRECTORIES( ${OMNIORB_INCLUDE_DIR} ${PTHREAD_INCLUDE_DIR} @@ -29,6 +31,8 @@ INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR}/../Launcher ${CMAKE_CURRENT_SOURCE_DIR}/../Container ${CMAKE_CURRENT_SOURCE_DIR}/../ResourcesManager + ${CMAKE_CURRENT_SOURCE_DIR}/../KernelHelpers + ${CMAKE_CURRENT_SOURCE_DIR} ) ADD_DEFINITIONS(${OMNIORB_DEFINITIONS} ${PYTHON_DEFINITIONS}) @@ -62,6 +66,28 @@ INSTALL(TARGETS SALOME_DataScopeServer DESTINATION ${SALOME_INSTALL_BINS}) INSTALL(FILES SalomeSDSClt.py SALOMEWrappedStdType.py DESTINATION ${SALOME_INSTALL_BINS}) FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${SALOME_INSTALL_HEADERS}) + +# + +SET(KernelSDS_HEADERS KernelSDS.hxx KernelSDS.i) +SET(KernelSDS_SOURCES KernelSDS.cxx ${KernelSDS_HEADERS}) +SET_SOURCE_FILES_PROPERTIES(KernelSDS.i PROPERTIES CPLUSPLUS ON) +SET_SOURCE_FILES_PROPERTIES(KernelSDS.i PROPERTIES SWIG_FLAGS "-py3") +SET_SOURCE_FILES_PROPERTIES(KernelSDS_wrap.cpp PROPERTIES COMPILE_FLAGS "-DHAVE_CONFIG_H") +SET(_swig_SCRIPTS ${CMAKE_CURRENT_BINARY_DIR}/KernelSDS.py ) +IF(${CMAKE_VERSION} VERSION_LESS "3.8.0") + SWIG_ADD_MODULE(KernelSDS python ${KernelSDS_SOURCES}) +ELSE() + SWIG_ADD_LIBRARY(KernelSDS LANGUAGE python SOURCES ${KernelSDS_SOURCES}) +ENDIF() +IF(${MACHINE} STREQUAL WINDOWS) + SET_TARGET_PROPERTIES(_KernelSDS PROPERTIES DEBUG_OUTPUT_NAME _KernelSDS_d) +ENDIF(${MACHINE} STREQUAL WINDOWS) +SWIG_LINK_LIBRARIES(KernelSDS ${PYTHON_LIBRARIES} ${PLATFORM_LIBS} SalomeSDS) +install(TARGETS _KernelSDS DESTINATION ${SALOME_INSTALL_LIBS}) +install(FILES ${KernelSDS_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS}) +SALOME_INSTALL_SCRIPTS("${_swig_SCRIPTS}" ${SALOME_INSTALL_BINS} EXTRA_DPYS "${SWIG_MODULE_KernelSDS_REAL_NAME}") + # tests part SET(LOCAL_TEST_DIR ${KERNEL_TEST_DIR}/SALOMESDS) INSTALL(FILES TestSalomeSDS.py TestSalomeSDSHelper0.py DESTINATION ${LOCAL_TEST_DIR}) diff --git a/src/SALOMESDS/KernelSDS.cxx b/src/SALOMESDS/KernelSDS.cxx new file mode 100644 index 000000000..3c21b267a --- /dev/null +++ b/src/SALOMESDS/KernelSDS.cxx @@ -0,0 +1,50 @@ +// 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 "KernelSDS.hxx" +#include "SALOMESDS_DataServerManager.hxx" +#include "SALOME_Fake_NamingService.hxx" +#include "SALOME_KernelORB.hxx" + +static SALOME::DataServerManager_var _dsm_singleton; + +std::string GetDSMInstanceInternal() +{ + CORBA::ORB_ptr orb = KERNEL::getORB(); + if( CORBA::is_nil(_dsm_singleton) ) + { + PortableServer::POA_var root_poa; + CORBA::Object_var obj = orb->resolve_initial_references("RootPOA"); + if(!CORBA::is_nil(obj)) + root_poa = PortableServer::POA::_narrow(obj); + SALOME_CPythonHelper cPyh; + { + int argc(1); + char *argv[2] = {"oops",nullptr}; + cPyh.initializePython(argc,argv); + } + SALOME_Fake_NamingService *ns(new SALOME_Fake_NamingService); + SALOMESDS::DataServerManager *dsm(new SALOMESDS::DataServerManager(&cPyh,orb,root_poa,ns)); + dsm->_remove_ref(); + CORBA::Object_var objRef = ns->Resolve(SALOMESDS::DataServerManager::NAME_IN_NS); + _dsm_singleton = SALOME::DataServerManager::_narrow(objRef); + } + CORBA::String_var ior = orb->object_to_string(_dsm_singleton); + return std::string(ior.in()); +} diff --git a/src/SALOMESDS/KernelSDS.hxx b/src/SALOMESDS/KernelSDS.hxx new file mode 100644 index 000000000..3f1eb0475 --- /dev/null +++ b/src/SALOMESDS/KernelSDS.hxx @@ -0,0 +1,24 @@ +// 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 +// + +#pragma once + +#include + +std::string GetDSMInstanceInternal(); diff --git a/src/SALOMESDS/KernelSDS.i b/src/SALOMESDS/KernelSDS.i new file mode 100644 index 000000000..cc1e46e09 --- /dev/null +++ b/src/SALOMESDS/KernelSDS.i @@ -0,0 +1,39 @@ +// 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 +// + +%module KernelSDS + +%include "std_string.i" + +%{ +#include "KernelSDS.hxx" +%} + +%inline +{ + std::string GetDSMInstanceInternal(); +} + +%pythoncode %{ +def GetDSMInstance(): + import SALOME + import CORBA + orb=CORBA.ORB_init(['']) + return orb.string_to_object(GetDSMInstanceInternal()) +%} diff --git a/src/SALOMESDS/SALOMESDS_DataScopeServer.cxx b/src/SALOMESDS/SALOMESDS_DataScopeServer.cxx index 3fdd6924f..b6c961a27 100644 --- a/src/SALOMESDS/SALOMESDS_DataScopeServer.cxx +++ b/src/SALOMESDS/SALOMESDS_DataScopeServer.cxx @@ -27,7 +27,7 @@ #include "SALOMESDS_TrustTransaction.hxx" #include "SALOMESDS_KeyWaiter.hxx" #include "SALOMESDS_Transaction.hxx" -#include "SALOME_NamingService.hxx" +#include "SALOME_NamingService_Abstract.hxx" #include "SALOMESDS_Exception.hxx" #include @@ -71,11 +71,11 @@ void RequestSwitcher::fetchAndGetAccessOfVar(const char *varName, CORBA::String_ return _ds->fetchAndGetAccessOfVar(varName,access,data); } -DataScopeServerBase::DataScopeServerBase(const SALOME_CPythonHelper *pyHelper, CORBA::ORB_ptr orb, SALOME::DataScopeKiller_var killer, const std::string& scopeName):_pyHelper(pyHelper),_orb(CORBA::ORB::_duplicate(orb)),_name(scopeName),_killer(killer) +DataScopeServerBase::DataScopeServerBase(const SALOME_CPythonHelper *pyHelper, CORBA::ORB_ptr orb, SALOME::DataScopeKiller_var killer, const std::string& scopeName, SALOME_NamingService_Abstract *ns):_ns(ns),_pyHelper(pyHelper),_orb(CORBA::ORB::_duplicate(orb)),_name(scopeName),_killer(killer) { } -DataScopeServerBase::DataScopeServerBase(const DataScopeServerBase& other):omniServant(other),ServantBase(other),_pyHelper(other._pyHelper),_name(other._name),_vars(other._vars),_killer(other._killer) +DataScopeServerBase::DataScopeServerBase(const DataScopeServerBase& other):omniServant(other),ServantBase(other),_ns(other._ns->cloneCoVar()),_pyHelper(other._pyHelper),_name(other._name),_vars(other._vars),_killer(other._killer) { } @@ -89,6 +89,7 @@ DataScopeServerBase::~DataScopeServerBase() obj->decrRef(); } } + delete _ns; } /*! @@ -165,14 +166,13 @@ void DataScopeServerBase::deleteVar(const char *varName) CORBA::Boolean DataScopeServerBase::shutdownIfNotHostedByDSM(SALOME::DataScopeKiller_out killer) { - SALOME_NamingService ns(_orb); - CORBA::Object_var obj(ns.Resolve(DataServerManager::NAME_IN_NS)); + CORBA::Object_var obj(_ns->Resolve(DataServerManager::NAME_IN_NS)); SALOME::DataServerManager_var dsm(SALOME::DataServerManager::_narrow(obj)); if(CORBA::is_nil(dsm)) throw Exception("Unable to reach in the NS the unique DataServerManager instance of the Session !"); // destroy ref in the naming service std::string fullScopeName(SALOMESDS::DataServerManager::CreateAbsNameInNSFromScopeName(_name)); - ns.Destroy_Name(fullScopeName.c_str()); + _ns->Destroy_Name(fullScopeName.c_str()); // establish if dsm and this shared the same POA. If yes dsm and this are collocated ! PortableServer::ServantBase *ret(0); try @@ -302,8 +302,7 @@ void DataScopeServerBase::setPOA(PortableServer::POA_var poa) void DataScopeServerBase::registerInNS(SALOME::DataScopeServerBase_ptr ptr) { std::string fullScopeName(SALOMESDS::DataServerManager::CreateAbsNameInNSFromScopeName(_name)); - SALOME_NamingService ns(_orb); - ns.Register(ptr,fullScopeName.c_str()); + _ns->Register(ptr,fullScopeName.c_str()); } std::string DataScopeServerBase::BuildTmpVarNameFrom(const std::string& varName) @@ -474,7 +473,7 @@ std::list< std::pair< SALOME::BasicDataServer_var, BasicDataServer * > >::iterat /////// -DataScopeServer::DataScopeServer(const SALOME_CPythonHelper *pyHelper, CORBA::ORB_ptr orb, SALOME::DataScopeKiller_var killer, const std::string& scopeName):DataScopeServerBase(pyHelper,orb,killer,scopeName) +DataScopeServer::DataScopeServer(const SALOME_CPythonHelper *pyHelper, CORBA::ORB_ptr orb, SALOME::DataScopeKiller_var killer, const std::string& scopeName, SALOME_NamingService_Abstract *ns):DataScopeServerBase(pyHelper,orb,killer,scopeName,ns) { } @@ -521,7 +520,7 @@ DataScopeServer::~DataScopeServer() //////// -DataScopeServerTransaction::DataScopeServerTransaction(const SALOME_CPythonHelper *pyHelper, CORBA::ORB_ptr orb, SALOME::DataScopeKiller_var killer, const std::string& scopeName):DataScopeServerBase(pyHelper,orb,killer,scopeName) +DataScopeServerTransaction::DataScopeServerTransaction(const SALOME_CPythonHelper *pyHelper, CORBA::ORB_ptr orb, SALOME::DataScopeKiller_var killer, const std::string& scopeName, SALOME_NamingService_Abstract *ns):DataScopeServerBase(pyHelper,orb,killer,scopeName,ns) { CORBA::Object_var obj(_orb->resolve_initial_references("RootPOA")); PortableServer::POA_var poa(PortableServer::POA::_narrow(obj)); diff --git a/src/SALOMESDS/SALOMESDS_DataScopeServer.hxx b/src/SALOMESDS/SALOMESDS_DataScopeServer.hxx index 6119cc981..a705946a1 100644 --- a/src/SALOMESDS/SALOMESDS_DataScopeServer.hxx +++ b/src/SALOMESDS/SALOMESDS_DataScopeServer.hxx @@ -38,6 +38,8 @@ #include #include +class SALOME_NamingService_Abstract; + namespace SALOMESDS { class SALOMESDS_EXPORT DataScopeKiller : public POA_SALOME::DataScopeKiller @@ -73,7 +75,7 @@ namespace SALOMESDS class SALOMESDS_EXPORT DataScopeServerBase : public virtual POA_SALOME::DataScopeServerBase, public POAHolder { public: - DataScopeServerBase(const SALOME_CPythonHelper *pyHelper, CORBA::ORB_ptr orb, SALOME::DataScopeKiller_var killer, const std::string& scopeName); + DataScopeServerBase(const SALOME_CPythonHelper *pyHelper, CORBA::ORB_ptr orb, SALOME::DataScopeKiller_var killer, const std::string& scopeName, SALOME_NamingService_Abstract *ns); DataScopeServerBase(const DataScopeServerBase& other); public: // remote access methods void ping(); @@ -115,6 +117,7 @@ namespace SALOMESDS std::list< std::pair< SALOME::BasicDataServer_var, BasicDataServer * > >::const_iterator retrieveVarInternal3(const std::string& varName) const; std::list< std::pair< SALOME::BasicDataServer_var, BasicDataServer * > >::iterator retrieveVarInternal4(const std::string& varName); protected: + SALOME_NamingService_Abstract *_ns = nullptr; const SALOME_CPythonHelper *_pyHelper = nullptr; PortableServer::POA_var _poa; CORBA::ORB_var _orb; @@ -127,7 +130,7 @@ namespace SALOMESDS class SALOMESDS_EXPORT DataScopeServer : public DataScopeServerBase, public virtual POA_SALOME::DataScopeServer { public: - DataScopeServer(const SALOME_CPythonHelper *pyHelper, CORBA::ORB_ptr orb, SALOME::DataScopeKiller_var killer, const std::string& scopeName); + DataScopeServer(const SALOME_CPythonHelper *pyHelper, CORBA::ORB_ptr orb, SALOME::DataScopeKiller_var killer, const std::string& scopeName, SALOME_NamingService_Abstract *ns); DataScopeServer(const DataScopeServer& other); SALOME::BasicDataServer_ptr retrieveVar(const char *varName) { return retrieveVarInternal(varName); } SALOME::PickelizedPyObjRdOnlyServer_ptr createRdOnlyVar(const char *varName, const SALOME::ByteVec& constValue); @@ -139,7 +142,7 @@ namespace SALOMESDS class SALOMESDS_EXPORT DataScopeServerTransaction : public DataScopeServerBase, public virtual POA_SALOME::DataScopeServerTransaction { public://not remotely callable - DataScopeServerTransaction(const SALOME_CPythonHelper *pyHelper, CORBA::ORB_ptr orb, SALOME::DataScopeKiller_var killer, const std::string& scopeName); + DataScopeServerTransaction(const SALOME_CPythonHelper *pyHelper, CORBA::ORB_ptr orb, SALOME::DataScopeKiller_var killer, const std::string& scopeName, SALOME_NamingService_Abstract *ns); DataScopeServerTransaction(const DataScopeServerTransaction& other); ~DataScopeServerTransaction(); void createRdOnlyVarInternal(const std::string& varName, const SALOME::ByteVec& constValue); diff --git a/src/SALOMESDS/SALOMESDS_DataServerManager.cxx b/src/SALOMESDS/SALOMESDS_DataServerManager.cxx index 4f2a0d0fe..2c2d9b277 100644 --- a/src/SALOMESDS/SALOMESDS_DataServerManager.cxx +++ b/src/SALOMESDS/SALOMESDS_DataServerManager.cxx @@ -43,9 +43,10 @@ SALOME::DataScopeServerTransaction_ptr RequestSwitcherDSM::giveADataScopeTransac return _dsm->giveADataScopeTransactionCalled(scopeName,isCreated); } -DataServerManager::DataServerManager(const SALOME_CPythonHelper *pyHelper, CORBA::ORB_ptr orb, PortableServer::POA_ptr poa):_orb(CORBA::ORB::_duplicate(orb)) +DataServerManager::DataServerManager(const SALOME_CPythonHelper *pyHelper, CORBA::ORB_ptr orb, PortableServer::POA_ptr poa, SALOME_NamingService_Abstract *ns):_orb(CORBA::ORB::_duplicate(orb)) { - DataScopeServer *dftScope(new DataScopeServer(pyHelper,orb,SALOME::DataScopeKiller::_nil(),DFT_SCOPE_NAME_IN_NS));//_remove_ref will be call by DataScopeServer::shutdownIfNotHostedByDSM + _ns = ns==nullptr?new SALOME_NamingService(_orb):ns; + DataScopeServer *dftScope(new DataScopeServer(pyHelper,orb,SALOME::DataScopeKiller::_nil(),DFT_SCOPE_NAME_IN_NS,_ns->cloneCoVar()));//_remove_ref will be call by DataScopeServer::shutdownIfNotHostedByDSM PortableServer::POAManager_var pman(poa->the_POAManager()); CORBA::PolicyList policies; policies.length(1); @@ -58,8 +59,7 @@ DataServerManager::DataServerManager(const SALOME_CPythonHelper *pyHelper, CORBA CORBA::Object_var obj(_poa->id_to_reference(id)); SALOME::DataServerManager_var obj2(SALOME::DataServerManager::_narrow(obj)); // publish Data server manager in NS - SALOME_NamingService ns(orb); - ns.Register(obj2,NAME_IN_NS); + _ns->Register(obj2,NAME_IN_NS); // the default DataScopeServer object is the only one hosted by the current process dftScope->setPOA(_poa); obj=dftScope->activate(); @@ -67,6 +67,12 @@ DataServerManager::DataServerManager(const SALOME_CPythonHelper *pyHelper, CORBA dftScope->registerInNS(dftScopePtr);// agy : Very important ! invoke this method BEFORE activation ! Because this method initializes Python ! } +DataServerManager::~DataServerManager() +{ + //_ns is owned by DataServerManager + delete _ns; +} + SALOME::StringVec *DataServerManager::listScopes() { std::vector scopes(listOfScopesCpp()); @@ -115,7 +121,7 @@ CORBA::Boolean DataServerManager::isAliveAndKicking(const char *scopeName) } template -typename T::PtrType CreateDataScope(const std::string& scopeName, const std::vector& scopes, SALOME_NamingService& ns) +typename T::PtrType CreateDataScope(const std::string& scopeName, const std::vector& scopes, SALOME_NamingService_Abstract& ns) { int isTransactionInt(T::IsTransaction); if(std::find(scopes.begin(),scopes.end(),scopeName)!=scopes.end()) @@ -148,7 +154,7 @@ typename T::PtrType CreateDataScope(const std::string& scopeName, const std::vec } template -typename T::PtrType GiveADataScopeCalled(const std::string& scopeName, const std::vector& scopes, SALOME_NamingService& ns, CORBA::Boolean& isCreated) +typename T::PtrType GiveADataScopeCalled(const std::string& scopeName, const std::vector& scopes, SALOME_NamingService_Abstract& ns, CORBA::Boolean& isCreated) { if(std::find(scopes.begin(),scopes.end(),scopeName)==scopes.end()) { @@ -157,7 +163,7 @@ typename T::PtrType GiveADataScopeCalled(const std::string& scopeName, const std } else { - SALOME::DataScopeServerBase_var ret(SALOMESDS::DataServerManager::GetScopePtrGivenName(scopeName,scopes,ns)); + SALOME::DataScopeServerBase_var ret(SALOMESDS::DataServerManager::GetScopePtrGivenName(scopeName,scopes,&ns)); if(SALOMESDS::DataServerManager::IsAliveAndKicking(ret)) { isCreated=false; @@ -207,26 +213,22 @@ public: SALOME::DataScopeServer_ptr DataServerManager::createDataScope(const char *scopeName) { - SALOME_NamingService ns(_orb); - return CreateDataScope(scopeName,listOfScopesCpp(),ns); + return CreateDataScope(scopeName,listOfScopesCpp(),*_ns); } SALOME::DataScopeServer_ptr DataServerManager::giveADataScopeCalled(const char *scopeName, CORBA::Boolean& isCreated) { - SALOME_NamingService ns(_orb); - return GiveADataScopeCalled(scopeName,listOfScopesCpp(),ns,isCreated); + return GiveADataScopeCalled(scopeName,listOfScopesCpp(),*_ns,isCreated); } SALOME::DataScopeServerTransaction_ptr DataServerManager::createDataScopeTransaction(const char *scopeName) { - SALOME_NamingService ns(_orb); - return CreateDataScope(scopeName,listOfScopesCpp(),ns); + return CreateDataScope(scopeName,listOfScopesCpp(),*_ns); } SALOME::DataScopeServerTransaction_ptr DataServerManager::giveADataScopeTransactionCalled(const char *scopeName, CORBA::Boolean& isCreated) { - SALOME_NamingService ns(_orb); - return GiveADataScopeCalled(scopeName,listOfScopesCpp(),ns,isCreated); + return GiveADataScopeCalled(scopeName,listOfScopesCpp(),*_ns,isCreated); } SALOME::DataScopeServerBase_ptr DataServerManager::retriveDataScope(const char *scopeName) @@ -246,14 +248,13 @@ void DataServerManager::removeDataScope(const char *scopeName) void DataServerManager::cleanScopesInNS() { - SALOME_NamingService ns(_orb); std::vector scopes(listOfScopesCpp()); for(std::vector::const_iterator it=scopes.begin();it!=scopes.end();it++) { if(!isAliveAndKicking((*it).c_str())) { std::string fullScopeName(SALOMESDS::DataServerManager::CreateAbsNameInNSFromScopeName(*it)); - ns.Destroy_Name(fullScopeName.c_str()); + _ns->Destroy_Name(fullScopeName.c_str()); } } } @@ -291,13 +292,12 @@ CORBA::Boolean DataServerManager::IsAliveAndKicking(SALOME::DataScopeServerBase_ std::vector DataServerManager::listOfScopesCpp() { - SALOME_NamingService ns(_orb); - ns.Change_Directory(NAME_IN_NS); - std::vector ret(ns.list_directory()); + _ns->Change_Directory(NAME_IN_NS); + std::vector ret(_ns->list_directory()); return ret; } -SALOME::DataScopeServerBase_var DataServerManager::GetScopePtrGivenName(const std::string& scopeName, const std::vector& scopes, SALOME_NamingService& ns) +SALOME::DataScopeServerBase_var DataServerManager::GetScopePtrGivenName(const std::string& scopeName, const std::vector& scopes, SALOME_NamingService_Abstract *ns) { if(std::find(scopes.begin(),scopes.end(),scopeName)==scopes.end()) { @@ -305,15 +305,14 @@ SALOME::DataScopeServerBase_var DataServerManager::GetScopePtrGivenName(const st throw Exception(oss.str()); } std::string fullScopeName(CreateAbsNameInNSFromScopeName(scopeName)); - CORBA::Object_var obj(ns.Resolve(fullScopeName.c_str())); + CORBA::Object_var obj(ns->Resolve(fullScopeName.c_str())); SALOME::DataScopeServerBase_var ret(SALOME::DataScopeServerBase::_narrow(obj)); return ret; } SALOME::DataScopeServerBase_var DataServerManager::getScopePtrGivenName(const std::string& scopeName) { - SALOME_NamingService ns(_orb); - return GetScopePtrGivenName(scopeName,listOfScopesCpp(),ns); + return GetScopePtrGivenName(scopeName,listOfScopesCpp(),_ns); } SALOME::RequestSwitcherDSM_ptr DataServerManager::getRequestSwitcher() diff --git a/src/SALOMESDS/SALOMESDS_DataServerManager.hxx b/src/SALOMESDS/SALOMESDS_DataServerManager.hxx index 0f2429c93..b7594e944 100644 --- a/src/SALOMESDS/SALOMESDS_DataServerManager.hxx +++ b/src/SALOMESDS/SALOMESDS_DataServerManager.hxx @@ -32,7 +32,7 @@ #include -class SALOME_NamingService; +class SALOME_NamingService_Abstract; namespace SALOMESDS { @@ -53,7 +53,8 @@ namespace SALOMESDS class SALOMESDS_EXPORT DataServerManager : public virtual POA_SALOME::DataServerManager { public: - DataServerManager(const SALOME_CPythonHelper *pyHelper, CORBA::ORB_ptr orb, PortableServer::POA_ptr poa); + DataServerManager(const SALOME_CPythonHelper *pyHelper, CORBA::ORB_ptr orb, PortableServer::POA_ptr poa, SALOME_NamingService_Abstract *ns = nullptr); + ~DataServerManager(); SALOME::StringVec *listScopes(); SALOME::StringVec *listAliveAndKickingScopes(); SALOME::DataScopeServer_ptr getDefaultScope(); @@ -74,7 +75,7 @@ namespace SALOMESDS CORBA::ORB_var getORB() { return _orb; } static std::string CreateAbsNameInNSFromScopeName(const std::string& scopeName); static CORBA::Boolean IsAliveAndKicking(SALOME::DataScopeServerBase_ptr scopePtr); - static SALOME::DataScopeServerBase_var GetScopePtrGivenName(const std::string& scopeName, const std::vector& scopes, SALOME_NamingService& ns); + static SALOME::DataScopeServerBase_var GetScopePtrGivenName(const std::string& scopeName, const std::vector& scopes, SALOME_NamingService_Abstract *ns); public: static const char NAME_IN_NS[]; static const char DFT_SCOPE_NAME_IN_NS[]; @@ -82,6 +83,8 @@ namespace SALOMESDS std::vector listOfScopesCpp(); SALOME::DataScopeServerBase_var getScopePtrGivenName(const std::string& scopeName); private: + //! naming service object is owned + SALOME_NamingService_Abstract *_ns = nullptr; CORBA::ORB_var _orb; //! single thread poa PortableServer::POA_var _poa; diff --git a/src/SALOMESDS/SALOME_DataScopeServer.cxx b/src/SALOMESDS/SALOME_DataScopeServer.cxx index 3c6a1f6e6..e2daee44a 100644 --- a/src/SALOMESDS/SALOME_DataScopeServer.cxx +++ b/src/SALOMESDS/SALOME_DataScopeServer.cxx @@ -62,9 +62,9 @@ int main(int argc, char *argv[]) // SALOMESDS::DataScopeServerBase *server(nullptr); if(!isTransac) - server=new SALOMESDS::DataScopeServer(&cPyHelper,orb,killerObj,scopeName); + server=new SALOMESDS::DataScopeServer(&cPyHelper,orb,killerObj,scopeName,new SALOME_NamingService(orb)); else - server=new SALOMESDS::DataScopeServerTransaction(&cPyHelper,orb,killerObj,scopeName); + server=new SALOMESDS::DataScopeServerTransaction(&cPyHelper,orb,killerObj,scopeName,new SALOME_NamingService(orb)); // CORBA::PolicyList policies; policies.length(3); -- 2.39.2