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 81344 2008-04-12 17:56:11Z 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 
00046     // If not, look it up.
00047     TAO::ORBInitializer_Registry_Adapter *orbinitializer_registry_ =
00048       ACE_Dynamic_Service<TAO::ORBInitializer_Registry_Adapter>::instance
00049       ("ORBInitializer_Registry", true); // only look in the local repo
00050 
00051 #if !defined (TAO_AS_STATIC_LIBS)
00052     if (orbinitializer_registry_ == 0)
00053       {
00054         ACE_Service_Config::process_directive (
00055           ACE_DYNAMIC_SERVICE_DIRECTIVE("ORBInitializer_Registry",
00056                                         "TAO_PI",
00057                                         "_make_ORBInitializer_Registry",
00058                                         ""));
00059         orbinitializer_registry_ =
00060           ACE_Dynamic_Service<TAO::ORBInitializer_Registry_Adapter>::instance
00061             ("ORBInitializer_Registry");
00062       }
00063 #endif /* !TAO_AS_STATIC_LIBS */
00064 
00065     if (orbinitializer_registry_ != 0)
00066       {
00067         orbinitializer_registry_->register_orb_initializer (init);
00068       }
00069     else
00070       {
00071         ACE_ERROR ((LM_ERROR,
00072                     ACE_TEXT ("TAO (%P|%t) %p\n"),
00073                     ACE_TEXT ("ERROR: ORBInitializer Registry unable to find the ")
00074                     ACE_TEXT ("ORBInitializer Registry instance")));
00075 
00076         throw ::CORBA::INTERNAL ();
00077       }
00078   }
00079 }
00080 
00081 TAO_END_VERSIONED_NAMESPACE_DECL

Generated on Tue Feb 2 17:37:52 2010 for TAO by  doxygen 1.4.7