diff options
Diffstat (limited to 'TAO/tao/PI')
-rw-r--r-- | TAO/tao/PI/ORBInitializer_Registry_Impl.cpp | 65 | ||||
-rw-r--r-- | TAO/tao/PI/ORBInitializer_Registry_Impl.h | 11 | ||||
-rw-r--r-- | TAO/tao/PI/PI.cpp | 58 | ||||
-rw-r--r-- | TAO/tao/PI/PI.h | 16 | ||||
-rw-r--r-- | TAO/tao/PI/PolicyFactory_Loader.cpp | 9 | ||||
-rw-r--r-- | TAO/tao/PI/PolicyFactory_Loader.h | 6 |
6 files changed, 76 insertions, 89 deletions
diff --git a/TAO/tao/PI/ORBInitializer_Registry_Impl.cpp b/TAO/tao/PI/ORBInitializer_Registry_Impl.cpp index 919abb2706e..57834a96e38 100644 --- a/TAO/tao/PI/ORBInitializer_Registry_Impl.cpp +++ b/TAO/tao/PI/ORBInitializer_Registry_Impl.cpp @@ -1,6 +1,7 @@ #include "tao/PI/ORBInitializer_Registry_Impl.h" #include "tao/PI/ORBInitInfo.h" #include "tao/PI/PICurrent.h" +#include "tao/PI/PI_ORBInitializer.h" #include "tao/ORB_Core.h" #include "tao/ORB_Constants.h" @@ -10,6 +11,10 @@ #include "ace/Recursive_Thread_Mutex.h" #include "ace/Log_Msg.h" +#include "tao/PI/ClientRequestInterceptor_Factory_Impl.h" +#include "tao/PI/PICurrent_Loader.h" +#include "tao/PI/PolicyFactory_Loader.h" + ACE_RCSID (PI, ORBInitializer_Registry, "$Id$") @@ -24,6 +29,66 @@ TAO::ORBInitializer_Registry::ORBInitializer_Registry (void) } int +TAO::ORBInitializer_Registry::init (int, ACE_TCHAR *[]) +{ + ACE_GUARD_RETURN (TAO_SYNCH_RECURSIVE_MUTEX, + guard, + this->lock_, + -1); + +#if TAO_HAS_INTERCEPTORS == 1 + + ACE_Service_Config::process_directive + (ace_svc_desc_TAO_PolicyFactory_Loader); + + ACE_Service_Config::process_directive + (ace_svc_desc_TAO_ClientRequestInterceptor_Adapter_Factory_Impl); + + ACE_Service_Config::process_directive + (ace_svc_desc_TAO_PICurrent_Loader); + + PortableInterceptor::ORBInitializer_ptr temp_orb_initializer = + PortableInterceptor::ORBInitializer::_nil (); + + PortableInterceptor::ORBInitializer_var orb_initializer; + + ACE_DECLARE_NEW_CORBA_ENV; + ACE_TRY + { + /// Register the PI ORBInitializer. + + ACE_NEW_THROW_EX (temp_orb_initializer, + TAO_PI_ORBInitializer, + CORBA::NO_MEMORY ( + CORBA::SystemException::_tao_minor_code ( + TAO::VMCID, + ENOMEM), + CORBA::COMPLETED_NO)); + ACE_TRY_CHECK; + + orb_initializer = temp_orb_initializer; + + this->register_orb_initializer (orb_initializer.in () + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCHANY + { + if (TAO_debug_level > 0) + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, + "(%P | %t) Caught exception:"); + } + return -1; + } + ACE_ENDTRY; +#endif /* TAO_HAS_INTERCEPTORS == 1 */ + + return 0; +} + + +int TAO::ORBInitializer_Registry::fini (void) { ACE_GUARD_RETURN (TAO_SYNCH_RECURSIVE_MUTEX, diff --git a/TAO/tao/PI/ORBInitializer_Registry_Impl.h b/TAO/tao/PI/ORBInitializer_Registry_Impl.h index edb5a2bfc26..1e4788a2602 100644 --- a/TAO/tao/PI/ORBInitializer_Registry_Impl.h +++ b/TAO/tao/PI/ORBInitializer_Registry_Impl.h @@ -76,6 +76,17 @@ namespace TAO PortableInterceptor::SlotId slotid ACE_ENV_ARG_DECL); + protected: + + // Added to provide registration for the several static service objects, + // brought in with this ORBInitializer_Registry implementation. Note that + // this is more reliable than using static initializers, since multiple + // copies of the dynamic service object will require their own (multiple) + // copies of the dependent static service objects. That is just impossible + // without registering those static services in the same repo, the dynamic + // SO is registered with. + virtual int init (int, ACE_TCHAR *[]); + private: // Prevent copying ORBInitializer_Registry (const ORBInitializer_Registry &); diff --git a/TAO/tao/PI/PI.cpp b/TAO/tao/PI/PI.cpp index 3e18928cf8c..ebec2effb3f 100644 --- a/TAO/tao/PI/PI.cpp +++ b/TAO/tao/PI/PI.cpp @@ -1,11 +1,4 @@ #include "tao/PI/PI.h" -#include "tao/PI/ORBInitializer_Registry_Impl.h" -#include "tao/PI/PolicyFactory_Loader.h" -#include "tao/PI/ClientRequestInterceptor_Factory_Impl.h" -#include "tao/PI/PICurrent_Loader.h" -#include "tao/PI/PI_ORBInitializer.h" -#include "tao/ORBInitializer_Registry.h" -#include "tao/ORB_Constants.h" ACE_RCSID (PI, PI, @@ -13,55 +6,4 @@ ACE_RCSID (PI, TAO_BEGIN_VERSIONED_NAMESPACE_DECL -int -TAO_PI_Init::Initializer (void) -{ -#if TAO_HAS_INTERCEPTORS == 1 - ACE_Service_Config::process_directive (ace_svc_desc_TAO_ClientRequestInterceptor_Adapter_Factory_Impl); - - ACE_Service_Config::process_directive (ace_svc_desc_TAO_PICurrent_Loader); -#endif /* TAO_HAS_INTERCEPTORS == 1 */ - - int status = ACE_Service_Config::process_directive ( - ace_svc_desc_ORBInitializer_Registry); -#if TAO_HAS_INTERCEPTORS == 1 - PortableInterceptor::ORBInitializer_ptr temp_orb_initializer = - PortableInterceptor::ORBInitializer::_nil (); - - PortableInterceptor::ORBInitializer_var orb_initializer; - - ACE_DECLARE_NEW_CORBA_ENV; - ACE_TRY - { - /// Register the PI ORBInitializer. - - ACE_NEW_THROW_EX (temp_orb_initializer, - TAO_PI_ORBInitializer, - CORBA::NO_MEMORY ( - CORBA::SystemException::_tao_minor_code ( - TAO::VMCID, - ENOMEM), - CORBA::COMPLETED_NO)); - ACE_TRY_CHECK; - - orb_initializer = temp_orb_initializer; - - PortableInterceptor::register_orb_initializer (orb_initializer.in () - ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; - } - ACE_CATCHANY - { - if (TAO_debug_level > 0) - { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, - "(%P | %t) Caught exception:"); - } - return -1; - } - ACE_ENDTRY; -#endif /* TAO_HAS_INTERCEPTORS == 1 */ - return status; -} - TAO_END_VERSIONED_NAMESPACE_DECL diff --git a/TAO/tao/PI/PI.h b/TAO/tao/PI/PI.h index da45315f182..6facdc7fc2d 100644 --- a/TAO/tao/PI/PI.h +++ b/TAO/tao/PI/PI.h @@ -25,22 +25,6 @@ TAO_BEGIN_VERSIONED_NAMESPACE_DECL -/** - * @class TAO_PI_Init - * - */ -class TAO_PI_Export TAO_PI_Init -{ -public: - - /// Used to force the initialization of the ORB code. - static int Initializer (void); -}; - -static int -TAO_Requires_PI_Initializer = - TAO_PI_Init::Initializer (); - TAO_END_VERSIONED_NAMESPACE_DECL #include /**/ "ace/post.h" diff --git a/TAO/tao/PI/PolicyFactory_Loader.cpp b/TAO/tao/PI/PolicyFactory_Loader.cpp index 3b8e49f062c..1e4f6e44d5a 100644 --- a/TAO/tao/PI/PolicyFactory_Loader.cpp +++ b/TAO/tao/PI/PolicyFactory_Loader.cpp @@ -14,9 +14,6 @@ #include "tao/PI/PolicyFactory_Loader.h" #include "tao/PI/PolicyFactory_Registry.h" -#include "tao/ORB.h" -#include "tao/debug.h" - ACE_RCSID (PI, PolicyFactory_Loader, "$Id$") @@ -33,12 +30,6 @@ TAO_PolicyFactory_Loader::create (void) return obj; } -int -TAO_PolicyFactory_Loader::Initializer (void) -{ - return ACE_Service_Config::process_directive (ace_svc_desc_TAO_PolicyFactory_Loader); -} - TAO_END_VERSIONED_NAMESPACE_DECL ACE_STATIC_SVC_DEFINE (TAO_PolicyFactory_Loader, diff --git a/TAO/tao/PI/PolicyFactory_Loader.h b/TAO/tao/PI/PolicyFactory_Loader.h index a25c378676e..4ee3c5a2c56 100644 --- a/TAO/tao/PI/PolicyFactory_Loader.h +++ b/TAO/tao/PI/PolicyFactory_Loader.h @@ -34,14 +34,8 @@ class TAO_PI_Export TAO_PolicyFactory_Loader public: /// Creates a Codec factory and returns it. virtual TAO::PolicyFactory_Registry_Adapter* create (void); - - /// Used to force the initialization of the ORB code. - static int Initializer (void); }; -static int -TAO_Requires_PolicyFactory_Initializer = TAO_PolicyFactory_Loader::Initializer (); - TAO_END_VERSIONED_NAMESPACE_DECL ACE_STATIC_SVC_DECLARE (TAO_PolicyFactory_Loader) |