X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=inline;f=src%2FSession%2FSession_ServerThread.cxx;h=7a7d0475eeb26cc1e7fa9d7de9612eed36a6dcac;hb=56e6a5bca66e8c1a239b4a9eb02bc4f1a5e00c57;hp=c29a4807dd94e90a3fa8aafa67891514331a41ac;hpb=f830c97c748d8f8a6a7eccc8e3a58e19066a1181;p=modules%2Fgui.git diff --git a/src/Session/Session_ServerThread.cxx b/src/Session/Session_ServerThread.cxx index c29a4807d..7a7d0475e 100755 --- a/src/Session/Session_ServerThread.cxx +++ b/src/Session/Session_ServerThread.cxx @@ -1,68 +1,62 @@ -// SALOME Session : implementation of Session_ServerThread.cxx +// Copyright (C) 2007-2014 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 +// 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. +// 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. +// 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 +// 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 Session : implementation of Session_ServerThread.cxx // File : Session_ServerThread.cxx // Author : Paul RASCLE, EDF -// Module : SALOME -// $Header$ - -// #include -// #include CORBA_SERVER_HEADER(SALOME_Session) -// #include CORBA_SERVER_HEADER(SALOMEDS) #include "Session_ServerThread.hxx" -#include "SALOME_Container_i.hxx" -#include "SALOME_Launcher.hxx" -#include +#include +#include +#include #include -#include "SALOME_ModuleCatalog_impl.hxx" -#include "RegistryService.hxx" +#include +#include + #include "Session_Session_i.hxx" -#include "SalomeApp_Engine_i.hxx" -#include "Utils_ORB_INIT.hxx" -#include "Utils_SINGLETON.hxx" -#include "Utils_SALOME_Exception.hxx" -#include "OpUtil.hxx" -#include "NamingService_WaitForServerReadiness.hxx" -#include "utilities.h" +#include +#include +#include +#include +#include +#include #include #include -using namespace std; +#include +#include -const int Session_ServerThread::NB_SRV_TYP = 7; +const int Session_ServerThread::NB_SRV_TYP = 6; const char* Session_ServerThread::_serverTypes[NB_SRV_TYP] = {"Container", "ModuleCatalog", "Registry", "SALOMEDS", "Session", - "SalomeAppEngine", "ContainerManager"}; -/*! +/*! default constructor not for use */ Session_ServerThread::Session_ServerThread() @@ -70,12 +64,12 @@ Session_ServerThread::Session_ServerThread() ASSERT(0); // must not be called } -/*! +/*! constructor */ Session_ServerThread::Session_ServerThread(int argc, - char ** argv, - CORBA::ORB_ptr orb, + char ** argv, + CORBA::ORB_ptr orb, PortableServer::POA_ptr poa) { //MESSAGE("Session_ServerThread Constructor " << argv[0]); @@ -90,10 +84,11 @@ Session_ServerThread::Session_ServerThread(int argc, _servType =-1; _NS = new SALOME_NamingService(_orb); // one instance per server to limit // multi thread coherence problems + _container = 0; // embedded container } -/*! - destructor +/*! + destructor */ Session_ServerThread::~Session_ServerThread() { @@ -104,353 +99,286 @@ Session_ServerThread::~Session_ServerThread() delete[] _argv; } -/*! +/*! run the thread : activate one servant, the servant type is given by argument _argv[0] */ void Session_ServerThread::Init() { - MESSAGE("Session_ServerThread::Init "<< _argv[0]); + MESSAGE("Session_ServerThread::Init "<< _argv[0]); - for (int i=0; i<_argc; i++) SCRUTE(_argv[i]); -#ifndef WNT - for (int i=0; iShutdown(); } void Session_ServerThread::ActivateModuleCatalog(int argc, char ** argv) { - try - { - MESSAGE("ModuleCatalog thread started"); - // allocation on heap to allow destruction by POA - - SALOME_ModuleCatalogImpl* Catalogue_i - = new SALOME_ModuleCatalogImpl(argc, argv); - - // Tell the POA that the objects are ready to accept requests. - - PortableServer::ObjectId_var id= _root_poa->activate_object (Catalogue_i); - Catalogue_i->_remove_ref(); - - CORBA::Object_var myCata = Catalogue_i->_this(); - _NS->Register(myCata ,"/Kernel/ModulCatalog"); - } - catch(CORBA::SystemException&) - { - INFOS( "Caught CORBA::SystemException." ); - } - catch(CORBA::Exception&) - { - INFOS( "Caught CORBA::Exception." ); - } - catch(omniORB::fatalException& fe) - { - INFOS( "Caught omniORB::fatalException:" ); - INFOS( " file: " << fe.file() ); - INFOS( " line: " << fe.line() ); - INFOS( " mesg: " << fe.errmsg() ); - } - catch(...) - { - INFOS( "Caught unknown exception." ); - } + try { + MESSAGE("ModuleCatalog thread started"); + // allocation on heap to allow destruction by POA + + SALOME_ModuleCatalogImpl* Catalogue_i + = new SALOME_ModuleCatalogImpl(argc, argv); + + // Tell the POA that the objects are ready to accept requests. + + PortableServer::ObjectId_var id = _root_poa->activate_object (Catalogue_i); + Catalogue_i->_remove_ref(); + + CORBA::Object_var myCata = Catalogue_i->_this(); + _NS->Register(myCata ,"/Kernel/ModulCatalog"); + } + catch(CORBA::SystemException&) { + INFOS( "Caught CORBA::SystemException." ); + } + catch(CORBA::Exception&) { + INFOS( "Caught CORBA::Exception." ); + } + catch(omniORB::fatalException& fe) { + INFOS( "Caught omniORB::fatalException:" ); + INFOS( " file: " << fe.file() ); + INFOS( " line: " << fe.line() ); + INFOS( " mesg: " << fe.errmsg() ); + } + catch(...) { + INFOS( "Caught unknown exception." ); + } } void Session_ServerThread::ActivateSALOMEDS(int argc, char ** argv) { - try - { - MESSAGE("SALOMEDS thread started"); - // We allocate the objects on the heap. Since these are reference - // counted objects, they will be deleted by the POA when they are no - // longer needed. - - ClientFactory::createStudyManager(_orb,_root_poa); - } - catch(CORBA::SystemException&) - { - INFOS( "Caught CORBA::SystemException." ); - } - catch(CORBA::Exception&) - { - INFOS( "Caught CORBA::Exception." ); - } - catch(omniORB::fatalException& fe) - { - INFOS( "Caught omniORB::fatalException:" ); - INFOS( " file: " << fe.file() ); - INFOS( " line: " << fe.line() ); - INFOS( " mesg: " << fe.errmsg() ); - } - catch(...) - { - INFOS( "Caught unknown exception." ); - } + try { + MESSAGE("SALOMEDS thread started"); + // We allocate the objects on the heap. Since these are reference + // counted objects, they will be deleted by the POA when they are no + // longer needed. + + ClientFactory::createStudyManager(_orb,_root_poa); + } + catch(CORBA::SystemException&) { + INFOS( "Caught CORBA::SystemException." ); + } + catch(CORBA::Exception&) { + INFOS( "Caught CORBA::Exception." ); + } + catch(omniORB::fatalException& fe) { + INFOS( "Caught omniORB::fatalException:" ); + INFOS( " file: " << fe.file() ); + INFOS( " line: " << fe.line() ); + INFOS( " mesg: " << fe.errmsg() ); + } + catch(...) { + INFOS( "Caught unknown exception." ); + } } void Session_ServerThread::ActivateRegistry(int argc, char ** argv) { MESSAGE("Registry thread started"); - SCRUTE(argc); - if( argc<3 ) - { - INFOS("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"); - } + SCRUTE(argc); + if ( argc<3 ) { + INFOS("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; int k=0 ; - for ( k=1 ; k0); const char *registryName = "Registry"; Registry::Components_var varComponents; - try - { - RegistryService *ptrRegistry = SINGLETON_::Instance(); - ptrRegistry->SessionName( ptrSessionName ); - ptrRegistry->SetOrb(_orb); - varComponents = ptrRegistry->_this(); - // The RegistryService must not already exist. - - try - { - CORBA::Object_var pipo = _NS->Resolve( registryName ); - if (CORBA::is_nil(pipo) ) throw ServiceUnreachable(); - INFOS("RegistryService servant already existing" ); - ASSERT(0); - } - catch( const ServiceUnreachable &/*ex*/ ) - { - } - catch( const CORBA::Exception &/*exx*/ ) - { - } - string absoluteName = string("/") + registryName; - _NS->Register( varComponents , absoluteName.c_str() ); - MESSAGE("On attend les requetes des clients"); - } - catch( const SALOME_Exception &ex ) - { - INFOS( "Communication Error : " << ex.what() ); + try { + RegistryService *ptrRegistry = new RegistryService; + ptrRegistry->SessionName( ptrSessionName ); + ptrRegistry->SetOrb(_orb); + varComponents = ptrRegistry->_this(); + ptrRegistry->_remove_ref(); //let poa manage registry service deletion + // The RegistryService must not already exist. + + try { + CORBA::Object_var pipo = _NS->Resolve( registryName ); + if (CORBA::is_nil(pipo) ) throw ServiceUnreachable(); + INFOS("RegistryService servant already existing" ); ASSERT(0); } -} - -void Session_ServerThread::ActivateContainerManager(int argc, - char ** argv) -{ - try - { - PortableServer::POA_var root_poa=PortableServer::POA::_the_root_poa(); - cout << "ActivateSalomeLauncher ......!!!! " << endl; - SALOME_Launcher * myContainer = new SALOME_Launcher(_orb,root_poa); - } - catch(CORBA::SystemException&) - { - INFOS("Caught CORBA::SystemException."); - } - catch(PortableServer::POA::WrongPolicy&) - { - INFOS("Caught CORBA::WrongPolicyException."); + catch( const ServiceUnreachable &/*ex*/ ) { } - catch(PortableServer::POA::ServantAlreadyActive&) - { - INFOS("Caught CORBA::ServantAlreadyActiveException"); - } - catch(CORBA::Exception&) - { - INFOS("Caught CORBA::Exception."); - } - catch(...) - { - INFOS("Caught unknown exception."); + catch( const CORBA::Exception &/*exx*/ ) { } + std::string absoluteName = std::string("/") + registryName; + _NS->Register( varComponents , absoluteName.c_str() ); + } + catch( const SALOME_Exception &ex ) { + INFOS( "Communication Error : " << ex.what() ); + ASSERT(0); + } } -void Session_ServerThread::ActivateContainer(int argc, +void Session_ServerThread::ActivateContainerManager(int argc, char ** argv) { - try - { - MESSAGE("Container thread started"); - - // get or create the child POA - - PortableServer::POA_var factory_poa; - try - { - factory_poa = _root_poa->find_POA("factory_poa",0); - // 0 = no activation (already done if exists) - } - catch (PortableServer::POA::AdapterNonExistent&) - { - MESSAGE("factory_poa does not exists, create..."); - // define policy objects - PortableServer::ImplicitActivationPolicy_var implicitActivation = - _root_poa->create_implicit_activation_policy( - PortableServer::NO_IMPLICIT_ACTIVATION); - // default = NO_IMPLICIT_ACTIVATION - PortableServer::ThreadPolicy_var threadPolicy = - _root_poa->create_thread_policy(PortableServer::ORB_CTRL_MODEL); - // default = ORB_CTRL_MODEL, other choice SINGLE_THREAD_MODEL - - // create policy list - CORBA::PolicyList policyList; - policyList.length(2); - policyList[0] = PortableServer::ImplicitActivationPolicy:: - _duplicate(implicitActivation); - policyList[1] = PortableServer::ThreadPolicy:: - _duplicate(threadPolicy); - - PortableServer::POAManager_var nil_mgr - = PortableServer::POAManager::_nil(); - factory_poa = _root_poa->create_POA("factory_poa", - nil_mgr, - policyList); - //with nil_mgr instead of pman, - //a new POA manager is created with the new POA - - // destroy policy objects - implicitActivation->destroy(); - threadPolicy->destroy(); - - // obtain the factory poa manager - PortableServer::POAManager_var pmanfac = factory_poa->the_POAManager(); - pmanfac->activate(); - MESSAGE("pmanfac->activate()"); - } - - char *containerName = ""; - if (argc >1) - { - containerName = argv[1]; - } - - Engines_Container_i * myContainer - = new Engines_Container_i(_orb, _root_poa, containerName , argc , argv , true , false); - } - catch(CORBA::SystemException&) - { - INFOS("Caught CORBA::SystemException."); - } - catch(PortableServer::POA::WrongPolicy&) - { - INFOS("Caught CORBA::WrongPolicyException."); - } - catch(PortableServer::POA::ServantAlreadyActive&) - { - INFOS("Caught CORBA::ServantAlreadyActiveException"); - } - catch(CORBA::Exception&) - { - INFOS("Caught CORBA::Exception."); - } - catch(...) - { - INFOS("Caught unknown exception."); - } + try { + PortableServer::POA_var root_poa=PortableServer::POA::_the_root_poa(); + std::cout << "Activate SalomeLauncher ......!!!! " << std::endl; + new SALOME_Launcher(_orb,root_poa); + } + catch(CORBA::SystemException&) { + INFOS("Caught CORBA::SystemException."); + } + catch(PortableServer::POA::WrongPolicy&) { + INFOS("Caught CORBA::WrongPolicyException."); + } + catch(PortableServer::POA::ServantAlreadyActive&) { + INFOS("Caught CORBA::ServantAlreadyActiveException"); + } + catch(CORBA::Exception&) { + INFOS("Caught CORBA::Exception."); + } + catch(...) { + INFOS("Caught unknown exception."); + } } -void Session_ServerThread::ActivateEngine(int /*argc*/, char ** /*argv*/) +void Session_ServerThread::ActivateContainer(int argc, + char ** argv) { - try - { - MESSAGE("SalomeApp_Engine thread started"); - SalomeApp_Engine_i* anEngine = new SalomeApp_Engine_i(); - PortableServer::ObjectId_var id =_root_poa->activate_object( anEngine ); - MESSAGE("poa->activate_object( SalomeApp_Engine )"); - - CORBA::Object_var obj = anEngine->_this(); - anEngine->_remove_ref(); - _NS->Register( obj ,"/SalomeAppEngine"); - - } - catch (CORBA::SystemException&) - { - INFOS("Caught CORBA::SystemException."); - } - catch (CORBA::Exception&) - { - INFOS("Caught CORBA::Exception."); - } - catch (...) - { - INFOS("Caught unknown exception."); - } + try { + MESSAGE("Container thread started"); + + // get or create the child POA + + PortableServer::POA_var factory_poa; + try { + factory_poa = _root_poa->find_POA("factory_poa",0); + // 0 = no activation (already done if exists) + } + catch (PortableServer::POA::AdapterNonExistent&) { + MESSAGE("factory_poa does not exists, create..."); + // define policy objects + PortableServer::ImplicitActivationPolicy_var implicitActivation = + _root_poa->create_implicit_activation_policy(PortableServer::NO_IMPLICIT_ACTIVATION); + // default = NO_IMPLICIT_ACTIVATION + PortableServer::ThreadPolicy_var threadPolicy = + _root_poa->create_thread_policy(PortableServer::ORB_CTRL_MODEL); + // default = ORB_CTRL_MODEL, other choice SINGLE_THREAD_MODEL + + // create policy list + CORBA::PolicyList policyList; + policyList.length(2); + policyList[0] = PortableServer::ImplicitActivationPolicy:: + _duplicate(implicitActivation); + policyList[1] = PortableServer::ThreadPolicy:: + _duplicate(threadPolicy); + + PortableServer::POAManager_var nil_mgr + = PortableServer::POAManager::_nil(); + factory_poa = _root_poa->create_POA("factory_poa", + nil_mgr, + policyList); + //with nil_mgr instead of pman, + //a new POA manager is created with the new POA + + // destroy policy objects + implicitActivation->destroy(); + threadPolicy->destroy(); + + // obtain the factory poa manager + PortableServer::POAManager_var pmanfac = factory_poa->the_POAManager(); + pmanfac->activate(); + MESSAGE("pmanfac->activate()"); + } + + char *containerName = (char*)""; + if (argc >1) { + containerName = argv[1]; + } + + _container = new Engines_Container_i(_orb, _root_poa, containerName , argc , argv , true , false); + } + catch(CORBA::SystemException&) { + INFOS("Caught CORBA::SystemException."); + } + catch(PortableServer::POA::WrongPolicy&) { + INFOS("Caught CORBA::WrongPolicyException."); + } + catch(PortableServer::POA::ServantAlreadyActive&) { + INFOS("Caught CORBA::ServantAlreadyActiveException"); + } + catch(CORBA::Exception&) { + INFOS("Caught CORBA::Exception."); + } + catch(...) { + INFOS("Caught unknown exception."); + } } void Session_ServerThread::ActivateSession(int argc, @@ -459,23 +387,23 @@ void Session_ServerThread::ActivateSession(int argc, MESSAGE("Session_ServerThread::ActivateSession() not implemented!"); } -/*! - constructor +/*! + constructor */ Session_SessionThread::Session_SessionThread(int argc, - char** argv, - CORBA::ORB_ptr orb, + char** argv, + CORBA::ORB_ptr orb, PortableServer::POA_ptr poa, QMutex* GUIMutex, QWaitCondition* GUILauncher) - : Session_ServerThread(argc, argv, orb, poa), - _GUIMutex( GUIMutex ), - _GUILauncher( GUILauncher ) +: Session_ServerThread(argc, argv, orb, poa), + _GUIMutex( GUIMutex ), + _GUILauncher( GUILauncher ) { } -/*! - destructor +/*! + destructor */ Session_SessionThread::~Session_SessionThread() { @@ -484,31 +412,27 @@ Session_SessionThread::~Session_SessionThread() void Session_SessionThread::ActivateSession(int argc, char ** argv) { - try - { - MESSAGE("Session thread started"); - SALOME_Session_i * mySALOME_Session - = new SALOME_Session_i(argc, argv, _orb, _root_poa, _GUIMutex, _GUILauncher) ; - PortableServer::ObjectId_var mySALOME_Sessionid - = _root_poa->activate_object(mySALOME_Session); - MESSAGE("poa->activate_object(mySALOME_Session)"); - - CORBA::Object_var obj = mySALOME_Session->_this(); - CORBA::String_var sior(_orb->object_to_string(obj)); - mySALOME_Session->_remove_ref(); - - mySALOME_Session->NSregister(); - } - catch (CORBA::SystemException&) - { - INFOS("Caught CORBA::SystemException."); - } - catch (CORBA::Exception&) - { - INFOS("Caught CORBA::Exception."); - } - catch (...) - { - INFOS("Caught unknown exception."); - } + try { + MESSAGE("Session thread started"); + SALOME_Session_i * mySALOME_Session + = new SALOME_Session_i(argc, argv, _orb, _root_poa, _GUIMutex, _GUILauncher) ; + PortableServer::ObjectId_var mySALOME_Sessionid + = _root_poa->activate_object(mySALOME_Session); + MESSAGE("poa->activate_object(mySALOME_Session)"); + + CORBA::Object_var obj = mySALOME_Session->_this(); + CORBA::String_var sior(_orb->object_to_string(obj)); + mySALOME_Session->_remove_ref(); + + mySALOME_Session->NSregister(); + } + catch (CORBA::SystemException&) { + INFOS("Caught CORBA::SystemException."); + } + catch (CORBA::Exception&) { + INFOS("Caught CORBA::Exception."); + } + catch (...) { + INFOS("Caught unknown exception."); + } }