Salome HOME
PR: mergefrom_BR_CCRT_11Nov04
[modules/kernel.git] / src / Container / SALOME_Container.cxx
index ce8c05628e828dd287590121683474295a4cec21..02b2acce44006dfa262a76052d749ad8d235602e 100644 (file)
 //  Module : SALOME
 //  $Header$
 
-using namespace std;
-using namespace std;
+#include <iostream>
+#include <string>
 #include <stdio.h>
 
-# 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 <iostream>
-#include <string>
 #include "utilities.h"
+#include "LocalTraceCollector.hxx"
 
-//#define CHECKTIME
 #ifdef CHECKTIME
 #include <Utils_Timer.hxx>
 #endif
 
+#ifdef HAVE_MPI2
+#include <mpi.h>
+#endif
+
 #include <Python.h>
 
-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_<ORB_INIT>::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_<ORB_INIT>::Instance() ;
-    ASSERT(SINGLETON_<ORB_INIT>::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_<SALOME_NamingService>::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 - "<<exc.what()); 
+  }catch(...){
+    INFOS("Caught unknown exception.");
   }
-  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.")
-  }
+#ifdef HAVE_MPI2
+  MPI_Finalize();
+#endif
   END_OF(argv[0]);
+  delete myThreadTrace;
+  return 0 ;
 }