Salome HOME
PR : merge branch V1_2c dans branche principale pour V1_3_0_b1
[modules/kernel.git] / src / DataTypeCatalog / SALOME_DataTypeCatalog_Server.cxx
index e9b4de72f8d758721143625f406bd13c89f90e1b..95c4ce6a1fb1e47842998e0ce8e1a79de28d1fbf 100644 (file)
@@ -31,23 +31,86 @@ using namespace std;
 #include "SALOME_NamingService.hxx"
 #include "SALOME_DataTypeCatalog_impl.hxx"
 #include "utilities.h"
-
+# include "Utils_SINGLETON.hxx"
 int main(int argc,char **argv)
 {
   try {
   CosNaming::NamingContext_var _rootContext, catalogContext;
-
   // initialize the ORB
-
   CORBA::ORB_ptr orb = CORBA::ORB_init (argc, argv);
-
   // initialize POA
+  //
+  long TIMESleep = 250000000;
+  int NumberOfTries = 40;
+  int a;
+  timespec ts_req;
+  ts_req.tv_nsec=TIMESleep;
+  ts_req.tv_sec=0;
+  timespec ts_rem;
+  ts_rem.tv_nsec=0;
+  ts_rem.tv_sec=0;
+  CosNaming::NamingContext_var inc;
+  PortableServer::POA_var poa;
+  CORBA::Object_var theObj;
+  CORBA::Object_var obj;
+  CORBA::Object_var object;
+  SALOME_Logger::Logger_var log;
+  int DATA_TYPE_CATALOG=0;
+  const char * Env = getenv("USE_LOGGER"); 
+  int EnvL =0;
+  if ((Env!=NULL) && (strlen(Env)))
+    EnvL=1;  
+  CosNaming::Name name;
+  name.length(1);
+  name[0].id=CORBA::string_dup("Logger");    
+  PortableServer::POAManager_var mgr; 
+  for (int i = 1; i<=NumberOfTries; i++){
+    if (i!=1) 
+      a=nanosleep(&ts_req,&ts_rem);
+    try{ 
+      obj = orb->resolve_initial_references("RootPOA");
+      if(!CORBA::is_nil(obj))
+       poa = PortableServer::POA::_narrow(obj);
+      if(!CORBA::is_nil(poa))
+       mgr = 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::COMM_FAILURE& )
+      {
+       MESSAGE( "Data Type Catalog: CORBA::COMM_FAILURE: Unable to contact the Naming Service" )
+         }
+    if(!CORBA::is_nil(inc)) {
+      MESSAGE( "Data Type Catalog: Naming Service was found" )
+       if(EnvL==1){
+         CORBA::ORB_var orb1 = CORBA::ORB_init(argc,argv) ;
+         SALOME_NamingService &NS = *SINGLETON_<SALOME_NamingService>::Instance() ;
+         NS.init_orb( orb1 ) ;
+         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( "Data Type Catalog: Logger Server wasn't found" ) }
+           catch(...){ MESSAGE( "Data Type Catalog: Unknown exception" ) }
+           if (!CORBA::is_nil(object))
+             log = SALOME_Logger::Logger::_narrow(object);
+           if (!CORBA::is_nil(log)){
+             MESSAGE( "Data Type Catalog: Logger Server was found" )
+               log->ping();
+             DATA_TYPE_CATALOG=1;
+                 break;
+           }
+           
+         }}
+    }
+    if ((DATA_TYPE_CATALOG==1)||((EnvL==0)&&(!CORBA::is_nil(inc))))
+      break;
+           }
 
-  CORBA::Object_var poaobj = orb->resolve_initial_references ("RootPOA");
-
-  PortableServer::POA_var poa = PortableServer::POA::_narrow (poaobj);
-  PortableServer::POAManager_var mgr = poa->the_POAManager(); 
-
+  //
   // Active catalog
 
   SALOME_DataTypeCatalogImpl* Catalogue_i = new SALOME_DataTypeCatalogImpl(argc, argv);
@@ -70,7 +133,7 @@ int main(int argc,char **argv)
  
   poa->destroy(1,1);
  
 }
+ }
     catch(CORBA::SystemException&) {
     INFOS("Caught CORBA::SystemException.")
   }