X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FContainer%2FSALOME_Container.cxx;h=dfd501e9ff11bc86d1c7747f82808b5c728d1a76;hb=36610c94806b9840c3045be757bb10df91034f90;hp=ce8c05628e828dd287590121683474295a4cec21;hpb=b9114b43aa01d06f55dcf3f0a62df984e0cfc556;p=modules%2Fkernel.git diff --git a/src/Container/SALOME_Container.cxx b/src/Container/SALOME_Container.cxx index ce8c05628..dfd501e9f 100644 --- a/src/Container/SALOME_Container.cxx +++ b/src/Container/SALOME_Container.cxx @@ -26,50 +26,55 @@ // Module : SALOME // $Header$ -using namespace std; -using namespace std; +#include +#include #include -# include "Utils_ORB_INIT.hxx" -# include "Utils_SINGLETON.hxx" +//#include "Utils_ORB_INIT.hxx" +//#include "Utils_SINGLETON.hxx" +#include #include "SALOME_NamingService.hxx" #include "SALOME_Container_i.hxx" -#include -#include #include "utilities.h" +#include "SALOMETraceCollector.hxx" -//#define CHECKTIME #ifdef CHECKTIME #include #endif +#ifdef HAVE_MPI2 +#include +#endif + #include -static PyMethodDef MethodPyVoidMethod[] = { - { NULL, NULL } -}; +using namespace std; + +extern "C" void HandleServerSideSignals(CORBA::ORB_ptr theORB); + +static PyMethodDef MethodPyVoidMethod[] = {{ NULL, NULL }}; int main(int argc, char* argv[]) { +#ifdef HAVE_MPI2 + MPI_Init(&argc,&argv); +#endif + // Initialise the ORB. + //ORB_INIT &init = *SINGLETON_::Instance() ; + CORBA::ORB_var orb = CORBA::ORB_init( argc , argv ) ; + SALOMETraceCollector *myThreadTrace = SALOMETraceCollector::instance(orb); INFOS_COMPILATION; - BEGIN_OF(argv[0]) - + BEGIN_OF(argv[0]); + Py_Initialize() ; PySys_SetArgv( argc , argv ) ; Py_InitModule( "InitPyRunMethod" , MethodPyVoidMethod ) ; - - try { - - // Initialise the ORB. -// CORBA::ORB_var orb = CORBA::ORB_init(argc, argv); - ORB_INIT &init = *SINGLETON_::Instance() ; - ASSERT(SINGLETON_::IsAlreadyExisting()) ; - CORBA::ORB_var &orb = init( argc , argv ) ; - + + try{ // Obtain a reference to the root POA. // obtain the root poa manager // - long TIMESleep = 250000000; + long TIMESleep = 500000000; int NumberOfTries = 40; int a; timespec ts_req; @@ -83,20 +88,19 @@ int main(int argc, char* argv[]) CORBA::Object_var theObj; CORBA::Object_var obj; CORBA::Object_var object; - SALOME_Logger::Logger_var log; - SALOME_NamingService &naming = *SINGLETON_::Instance() ; + //SALOME_NamingService &naming = *SINGLETON_::Instance() ; int CONTAINER=0; const char * Env = getenv("USE_LOGGER"); int EnvL =0; - if ((Env!=NULL) && (strlen(Env))) + if(Env != NULL && strlen(Env)) EnvL=1; - + CosNaming::Name name; name.length(1); name[0].id=CORBA::string_dup("Logger"); PortableServer::POAManager_var pman; - for (int i = 1; i<=NumberOfTries; i++){ - if (i!=1) + for(int i = 1; i <= NumberOfTries; i++){ + if(i != 1) a=nanosleep(&ts_req,&ts_rem); try{ obj = orb->resolve_initial_references("RootPOA"); @@ -108,81 +112,44 @@ int main(int argc, char* argv[]) theObj = orb->resolve_initial_references("NameService"); if (!CORBA::is_nil(theObj)) inc = CosNaming::NamingContext::_narrow(theObj); + }catch(CORBA::COMM_FAILURE&){ + MESSAGE( "Container: CORBA::COMM_FAILURE: Unable to contact the Naming Service" ); } - catch( CORBA::COMM_FAILURE& ) - { - MESSAGE( "Container: CORBA::COMM_FAILURE: Unable to contact the Naming Service" ) + if(!CORBA::is_nil(inc)){ + MESSAGE( "Container: Naming Service was found" ); + if(EnvL == 1){ + for(int j = 1; j <= NumberOfTries; j++){ + if(j != 1) + a=nanosleep(&ts_req, &ts_rem); + try{ + object = inc->resolve(name); + }catch(CosNaming::NamingContext::NotFound){ + MESSAGE( "Container: Logger Server wasn't found" ); + }catch(...){ + MESSAGE( "Container: Unknown exception" ); + } + if(!CORBA::is_nil(object)){ + MESSAGE( "Container: Logger Server was found" ); + CONTAINER = 1; + break; } - if(!CORBA::is_nil(inc)) { - MESSAGE( "Container: Naming Service was found" ) - if(EnvL==1){ - for(int j=1; j<=NumberOfTries; j++){ - if (j!=1) - a=nanosleep(&ts_req, &ts_rem); - try{ - object = inc->resolve(name); - } - catch(CosNaming::NamingContext::NotFound){ MESSAGE( "Container: Logger Server wasn't found" ) } - catch(...){ MESSAGE( "Container: Unknown exception" ) } - if (!CORBA::is_nil(object)) - log = SALOME_Logger::Logger::_narrow(object); - if (!CORBA::is_nil(log)){ - MESSAGE( "Container: Logger Server was found" ) - log->ping(); - CONTAINER=1; - break; - } - }} } - if ((CONTAINER==1)||((EnvL==0)&&(!CORBA::is_nil(inc)))) - break; - } - - // - // 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) ; - - // create the child POA - PortableServer::POAManager_var nil_mgr = PortableServer::POAManager::_nil() ; - PortableServer::POA_var factory_poa = - root_poa->create_POA("factory_poa", pman, policyList) ; - //with nil_mgr instead of pman, a new POA manager is created with the new POA + } + } + if(CONTAINER == 1 || (EnvL == 0 && !CORBA::is_nil(inc))) + break; + } - // destroy policy objects - implicitActivation->destroy() ; - threadPolicy->destroy() ; - char *containerName = ""; - if (argc >1) - { - containerName = argv[1] ; + if(argc > 1){ + containerName = argv[1] ; } Engines_Container_i * myContainer - = new Engines_Container_i(orb, factory_poa, containerName , argc , argv ); - -// Engines_Container_i * myContainer -// = new Engines_Container_i(string(argv[1]),string(argv[2]), orb, factory_poa); + = new Engines_Container_i(orb, root_poa, containerName , argc , argv ); - // use naming service -// myContainer->_NS.init_orb(orb); -// Engines::Container_ptr pCont = Engines::Container::_narrow(myContainer->_this()); -// myContainer->_NS.Register(pCont, argv[2]); - pman->activate(); - + #ifdef CHECKTIME Utils_Timer timer; timer.Start(); @@ -190,30 +157,26 @@ int main(int argc, char* argv[]) MESSAGE("SALOME_Registry_Server.cxx - orb->run()"); timer.ShowAbsolute(); #endif - orb->run(); - - orb->destroy(); - } - 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.") + + HandleServerSideSignals(orb); + }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(std::exception& exc){ + INFOS("Caught std::exception - "<