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
00033
00034
00035 ACE_MT (ACE_GUARD (TAO_SYNCH_RECURSIVE_MUTEX,
00036 guard,
00037 *ACE_Static_Object_Lock::instance ()));
00038
00039
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
00052 TAO::ORBInitializer_Registry_Adapter *orbinitializer_registry_ =
00053 ACE_Dynamic_Service<TAO::ORBInitializer_Registry_Adapter>::instance
00054 ("ORBInitializer_Registry", true);
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
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