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
00031
00032
00033 ACE_MT (ACE_GUARD (TAO_SYNCH_RECURSIVE_MUTEX,
00034 guard,
00035 *ACE_Static_Object_Lock::instance ()));
00036
00037
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
00049 TAO::ORBInitializer_Registry_Adapter *orbinitializer_registry_ =
00050 ACE_Dynamic_Service<TAO::ORBInitializer_Registry_Adapter>::instance
00051 ("ORBInitializer_Registry", true);
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
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