ORBInitializer_Registry.cpp

Go to the documentation of this file.
00001 #include "tao/ORBInitializer_Registry.h"
00002 #include "tao/ORBInitializer_Registry_Adapter.h"
00003 #include "tao/PortableInterceptorC.h"
00004 #include "tao/ORB.h"
00005 #include "tao/ORB_Constants.h"
00006 #include "tao/TAO_Singleton_Manager.h"
00007 #include "tao/SystemException.h"
00008 
00009 #include "ace/Service_Config.h"
00010 #include "ace/Dynamic_Service.h"
00011 #include "ace/Static_Object_Lock.h"
00012 #include "ace/Recursive_Thread_Mutex.h"
00013 #include "ace/Log_Msg.h"
00014 
00015 ACE_RCSID (tao,
00016            ORBInitializer_Registry,
00017            "$Id: ORBInitializer_Registry.cpp 78935 2007-07-18 12:40:46Z johnnyw $")
00018 
00019 
00020 // ****************************************************************
00021 
00022 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00023 
00024 namespace PortableInterceptor
00025 {
00026   void
00027   register_orb_initializer (ORBInitializer_ptr init)
00028   {
00029     {
00030       // Using ACE_Static_Object_Lock::instance() precludes
00031       // register_orb_initializer() from being called within a static
00032       // object CTOR.
00033       ACE_MT (ACE_GUARD (TAO_SYNCH_RECURSIVE_MUTEX,
00034                          guard,
00035                          *ACE_Static_Object_Lock::instance ()));
00036 
00037       // Make sure TAO's singleton manager is initialized.
00038       if (TAO_Singleton_Manager::instance ()->init () == -1)
00039         {
00040           ACE_ERROR ((LM_ERROR,
00041                       ACE_TEXT ("(%P|%t) register_orb_initializer: ")
00042                       ACE_TEXT ("Unable to pre-initialize TAO\n")));
00043         }
00044 
00045       TAO::ORB::init_orb_globals ();
00046     }
00047 
00048     // If not, look it up.
00049     TAO::ORBInitializer_Registry_Adapter *orbinitializer_registry_ =
00050       ACE_Dynamic_Service<TAO::ORBInitializer_Registry_Adapter>::instance
00051       ("ORBInitializer_Registry", true); // only look in the local repo
00052 
00053   #if !defined (TAO_AS_STATIC_LIBS)
00054     if (orbinitializer_registry_ == 0)
00055       {
00056         ACE_Service_Config::process_directive (
00057           ACE_DYNAMIC_SERVICE_DIRECTIVE("ORBInitializer_Registry",
00058                                         "TAO_PI",
00059                                         "_make_ORBInitializer_Registry",
00060                                         ""));
00061         orbinitializer_registry_ =
00062           ACE_Dynamic_Service<TAO::ORBInitializer_Registry_Adapter>::instance
00063             ("ORBInitializer_Registry");
00064       }
00065   #endif /* !TAO_AS_STATIC_LIBS */
00066 
00067     if (orbinitializer_registry_ != 0)
00068       {
00069         orbinitializer_registry_->register_orb_initializer (init);
00070       }
00071     else
00072       {
00073         ACE_ERROR ((LM_ERROR,
00074                     ACE_TEXT ("(%P|%t) %p\n"),
00075                     ACE_TEXT ("ERROR: ORBInitializer Registry unable to find the ")
00076                     ACE_TEXT ("ORBInitializer Registry instance")));
00077 
00078         throw ::CORBA::INTERNAL ();
00079       }
00080   }
00081 }
00082 
00083 TAO_END_VERSIONED_NAMESPACE_DECL

Generated on Sun Jan 27 13:07:35 2008 for TAO by doxygen 1.3.6