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
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
00046
00047 TAO::ORBInitializer_Registry_Adapter *orbinitializer_registry_ =
00048 ACE_Dynamic_Service<TAO::ORBInitializer_Registry_Adapter>::instance
00049 ("ORBInitializer_Registry", true);
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
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