X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FRegistry%2FSALOME_Registry_Server.cxx;h=7627bd33ecee8333ac13ca4fbbbcd5b124eadb02;hb=f6120c1bdb84ed1cc827ffab8284c0ac2709189f;hp=7dc1b6817b319a9fd59c64d53d2acca251723e52;hpb=e6bfea36374791cd31c274a2f97df90dc60ddaf3;p=modules%2Fkernel.git diff --git a/src/Registry/SALOME_Registry_Server.cxx b/src/Registry/SALOME_Registry_Server.cxx index 7dc1b6817..7627bd33e 100644 --- a/src/Registry/SALOME_Registry_Server.cxx +++ b/src/Registry/SALOME_Registry_Server.cxx @@ -1,31 +1,31 @@ -// SALOME Registry : Registry server implementation +// Copyright (C) 2007-2021 CEA/DEN, EDF R&D, OPEN CASCADE // -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// 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. -// -// 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 +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// 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 // + +// SALOME Registry : Registry server implementation // File : SALOME_Registry_Server.cxx // Author : Pascale NOYRET - Antoine YESSAYAN, EDF // Module : SALOME // $Header$ - +// #include #include #include @@ -47,7 +47,6 @@ extern "C" #ifdef CHECKTIME #include #endif -using namespace std; int main( int argc , char **argv ) { @@ -59,8 +58,8 @@ int main( int argc , char **argv ) SCRUTE(argc) if( argc<3 ) { - MESSAGE("you must provide the Salome session name when you call SALOME_Registry_Server") ; - throw CommException("you must provide the Salome session name when you call SALOME_Registry_Server") ; + MESSAGE("you must provide the Salome session name when you call SALOME_Registry_Server") ; + throw CommException("you must provide the Salome session name when you call SALOME_Registry_Server") ; } const char *ptrSessionName=0 ; @@ -68,17 +67,16 @@ int main( int argc , char **argv ) for ( k=1 ; k0) ; const char *registryName = "Registry" ; long TIMESleep = 250000000; int NumberOfTries = 40; - int a; timespec ts_req; ts_req.tv_nsec=TIMESleep; ts_req.tv_sec=0; @@ -104,63 +102,63 @@ int main( int argc , char **argv ) for (int i = 1; i<=NumberOfTries; i++) { if (i!=1) -#ifndef WNT - a=nanosleep(&ts_req,&ts_rem); +#ifndef WIN32 + nanosleep(&ts_req,&ts_rem); #else Sleep(TIMESleep/1000000); #endif try - { - obj = orb->resolve_initial_references("RootPOA"); - if(!CORBA::is_nil(obj)) - poa = PortableServer::POA::_narrow(obj); - if(!CORBA::is_nil(poa)) - manager = poa->the_POAManager(); - if(!CORBA::is_nil(orb)) - theObj = orb->resolve_initial_references("NameService"); - if (!CORBA::is_nil(theObj)) - inc = CosNaming::NamingContext::_narrow(theObj); - } + { + obj = orb->resolve_initial_references("RootPOA"); + if(!CORBA::is_nil(obj)) + poa = PortableServer::POA::_narrow(obj); + if(!CORBA::is_nil(poa)) + manager = poa->the_POAManager(); + if(!CORBA::is_nil(orb)) + theObj = orb->resolve_initial_references("NameService"); + if (!CORBA::is_nil(theObj)) + inc = CosNaming::NamingContext::_narrow(theObj); + } catch( CORBA::SystemException& ) - { - MESSAGE( "Registry Server: CORBA::SystemException: Unable to contact the Naming Service" ); - } + { + MESSAGE( "Registry Server: CORBA::SystemException: Unable to contact the Naming Service" ); + } if(!CORBA::is_nil(inc)) - { - MESSAGE( "Registry Server: Naming Service was found" ); - if(EnvL==1) - { - for(int j=1; j<=NumberOfTries; j++) - { - if (j!=1) -#ifndef WNT - a=nanosleep(&ts_req, &ts_rem); + { + MESSAGE( "Registry Server: Naming Service was found" ); + if(EnvL==1) + { + for(int j=1; j<=NumberOfTries; j++) + { + if (j!=1) +#ifndef WIN32 + nanosleep(&ts_req, &ts_rem); #else - Sleep(TIMESleep/1000000); + Sleep(TIMESleep/1000000); #endif - try - { - object = inc->resolve(name); - } - catch(CosNaming::NamingContext::NotFound) - { - MESSAGE( "Registry Server: Logger Server wasn't found" ); - } - catch(...) - { - MESSAGE( "Registry Server: Unknown exception" ); - } - if (!CORBA::is_nil(object)) - { - MESSAGE( "Module Catalog Server: Logger Server was found" ); - REGISTRY=1; - break; - } - } - } - } + try + { + object = inc->resolve(name); + } + catch(CosNaming::NamingContext::NotFound&) + { + MESSAGE( "Registry Server: Logger Server wasn't found" ); + } + catch(...) + { + MESSAGE( "Registry Server: Unknown exception" ); + } + if (!CORBA::is_nil(object)) + { + MESSAGE( "Module Catalog Server: Logger Server was found" ); + REGISTRY=1; + break; + } + } + } + } if ((REGISTRY==1)||((EnvL==0)&&(!CORBA::is_nil(inc)))) - break; + break; } try @@ -168,55 +166,67 @@ int main( int argc , char **argv ) naming.init_orb( orb ) ; RegistryService *ptrRegistry = SINGLETON_::Instance() ; ptrRegistry->SessionName( ptrSessionName ) ; - varComponents = ptrRegistry->_this() ; + ptrRegistry->SetOrb(orb); + // + CORBA::PolicyList policies; + policies.length(1); + PortableServer::ThreadPolicy_var threadPol(poa->create_thread_policy(PortableServer::SINGLE_THREAD_MODEL)); + policies[0]=PortableServer::ThreadPolicy::_duplicate(threadPol); + PortableServer::POA_var poa2(poa->create_POA("SingleThreadPOA4RegistryStandalone",manager,policies)); + threadPol->destroy(); + // + PortableServer::ObjectId_var id(poa2->activate_object(ptrRegistry)); + CORBA::Object_var pipo=poa2->id_to_reference(id); + varComponents = Registry::Components::_narrow(pipo) ; + ptrRegistry->_remove_ref(); //let poa manage registryservice deletion // The RegistryService must not already exist. - + try - { - CORBA::Object_var pipo = naming.Resolve( registryName ) ; - if (CORBA::is_nil(pipo) ) throw ServiceUnreachable() ; - MESSAGE("RegistryService servant already existing" ) ; - exit( EXIT_FAILURE ) ; - } - catch( const ServiceUnreachable &ex ) - { - } - catch( const CORBA::Exception &exx ) - { - } - string absoluteName = string("/") + registryName; + { + CORBA::Object_var pipo = naming.Resolve( registryName ) ; + if (CORBA::is_nil(pipo) ) throw ServiceUnreachable() ; + MESSAGE("RegistryService servant already existing" ) ; + exit( EXIT_FAILURE ) ; + } + catch( const ServiceUnreachable & ) + { + } + catch( const CORBA::Exception & ) + { + } + std::string absoluteName = std::string("/") + registryName; naming.Register( varComponents , absoluteName.c_str() ) ; - MESSAGE("On attend les requetes des clients") ; + MESSAGE("Wait client requests") ; try - { - // Activation du POA - MESSAGE("Activation du POA") ; - manager->activate() ; - - // Lancement de l'ORB - MESSAGE("Lancement de l'ORB") ; + { + // Activation du POA + MESSAGE("POA activation") ; + manager->activate() ; + + // Lancement de l'ORB + MESSAGE("ORB launching") ; #ifdef CHECKTIME - Utils_Timer timer; - timer.Start(); - timer.Stop(); - MESSAGE("SALOME_Registry_Server.cxx - orb->run()"); - timer.ShowAbsolute(); + Utils_Timer timer; + timer.Start(); + timer.Stop(); + MESSAGE("SALOME_Registry_Server.cxx - orb->run()"); + timer.ShowAbsolute(); #endif - orb->run() ; - } - catch( const CORBA::Exception &ex ) - { - MESSAGE("Erreur systeme") ; - return EXIT_FAILURE ; - } - + orb->run() ; + } + catch( const CORBA::Exception & ) + { + MESSAGE("System error") ; + return EXIT_FAILURE ; + } + } catch( const SALOME_Exception &ex ) { MESSAGE( "Communication Error : " << ex.what() ) - return EXIT_FAILURE ; + return EXIT_FAILURE ; } - + END_OF( argv[0] ) ; // delete myThreadTrace; return 0 ;