X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FContainer%2FSALOME_Container.cxx;h=02b2acce44006dfa262a76052d749ad8d235602e;hb=89d8cdd476c5f4d65bc3fd1089f092af42e2841c;hp=ce8c05628e828dd287590121683474295a4cec21;hpb=b9114b43aa01d06f55dcf3f0a62df984e0cfc556;p=modules%2Fkernel.git diff --git a/src/Container/SALOME_Container.cxx b/src/Container/SALOME_Container.cxx index ce8c05628..02b2acce4 100644 --- a/src/Container/SALOME_Container.cxx +++ b/src/Container/SALOME_Container.cxx @@ -26,46 +26,50 @@ // 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 "SALOME_NamingService.hxx" #include "SALOME_Container_i.hxx" -#include -#include #include "utilities.h" +#include "LocalTraceCollector.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 = init( argc , argv ) ; + LocalTraceCollector *myThreadTrace = LocalTraceCollector::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 // @@ -83,20 +87,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() ; 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,44 +111,41 @@ 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; - } - - // + } + } + 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) ; + root_poa->create_thread_policy(PortableServer::ORB_CTRL_MODEL); // default = ORB_CTRL_MODEL, other choice SINGLE_THREAD_MODEL // create policy list @@ -153,36 +153,35 @@ int main(int argc, char* argv[]) 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 + //with nil_mgr instead of pman, a new POA manager is created with the new POA // 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, factory_poa, containerName , argc , argv ); + + // Engines_Container_i * myContainer + // = new Engines_Container_i(string(argv[1]),string(argv[2]), orb, factory_poa); + // use naming service -// myContainer->_NS.init_orb(orb); -// Engines::Container_ptr pCont = Engines::Container::_narrow(myContainer->_this()); -// myContainer->_NS.Register(pCont, argv[2]); + // 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 +189,28 @@ int main(int argc, char* argv[]) MESSAGE("SALOME_Registry_Server.cxx - orb->run()"); timer.ShowAbsolute(); #endif - orb->run(); - + + HandleServerSideSignals(orb); + 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(std::exception& exc){ + INFOS("Caught std::exception - "<