summaryrefslogtreecommitdiff
path: root/TAO/tao/PI
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/PI')
-rw-r--r--TAO/tao/PI/ORBInitializer_Registry_Impl.cpp65
-rw-r--r--TAO/tao/PI/ORBInitializer_Registry_Impl.h11
-rw-r--r--TAO/tao/PI/PI.cpp58
-rw-r--r--TAO/tao/PI/PI.h16
-rw-r--r--TAO/tao/PI/PolicyFactory_Loader.cpp9
-rw-r--r--TAO/tao/PI/PolicyFactory_Loader.h6
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)