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            "ORBInitializer_Registry.cpp,v 1.31 2006/05/30 19:20:56 mesnier_p Exp")
00018 
00019 
00020 // ****************************************************************
00021 
00022 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00023 
00024 namespace PortableInterceptor
00025 {
00026   void
00027   register_orb_initializer (
00028     ORBInitializer_ptr init
00029     ACE_ENV_ARG_DECL)
00030   {
00031     {
00032       // Using ACE_Static_Object_Lock::instance() precludes
00033       // register_orb_initializer() from being called within a static
00034       // object CTOR.
00035       ACE_MT (ACE_GUARD (TAO_SYNCH_RECURSIVE_MUTEX,
00036                          guard,
00037                          *ACE_Static_Object_Lock::instance ()));
00038 
00039       // Make sure TAO's singleton manager is initialized.
00040       if (TAO_Singleton_Manager::instance ()->init () == -1)
00041         {
00042           ACE_ERROR ((LM_ERROR,
00043                       ACE_TEXT ("(%P|%t) register_orb_initializer: ")
00044                       ACE_TEXT ("Unable to pre-initialize TAO\n")));
00045         }
00046 
00047       TAO::ORB::init_orb_globals (ACE_ENV_SINGLE_ARG_PARAMETER);
00048       ACE_CHECK;
00049     }
00050 
00051     // If not, lookup it up.
00052     TAO::ORBInitializer_Registry_Adapter *orbinitializer_registry_ =
00053       ACE_Dynamic_Service<TAO::ORBInitializer_Registry_Adapter>::instance
00054       ("ORBInitializer_Registry", true); // only look in the local repo
00055 
00056   #if !defined (TAO_AS_STATIC_LIBS)
00057     if (orbinitializer_registry_ == 0)
00058       {
00059         ACE_Service_Config::process_directive (
00060           ACE_DYNAMIC_SERVICE_DIRECTIVE("ORBInitializer_Registry",
00061                                         "TAO_PI",
00062                                         "_make_ORBInitializer_Registry",
00063                                         ""));
00064         orbinitializer_registry_ =
00065           ACE_Dynamic_Service<TAO::ORBInitializer_Registry_Adapter>::instance
00066             ("ORBInitializer_Registry");
00067       }
00068 
00069   #endif /* !TAO_AS_STATIC_LIBS */
00070 
00071     if (orbinitializer_registry_ != 0)
00072       {
00073         orbinitializer_registry_->register_orb_initializer (
00074           init
00075           ACE_ENV_ARG_PARAMETER);
00076         ACE_CHECK;
00077       }
00078     else
00079       {
00080         ACE_ERROR ((LM_ERROR,
00081                     ACE_TEXT ("(%P|%t) %p\n"),
00082                     ACE_TEXT ("ERROR: ORBInitializer Registry unable to find the ")
00083                     ACE_TEXT ("ORBInitializer Registry instance")));
00084 
00085         ACE_THROW (CORBA::INTERNAL ());
00086       }
00087   }
00088 }
00089 
00090 TAO_END_VERSIONED_NAMESPACE_DECL

Generated on Thu Nov 9 11:54:19 2006 for TAO by doxygen 1.3.6