summaryrefslogtreecommitdiff
path: root/trunk/TAO/tests/Portable_Interceptors/PICurrent/ServerORBInitializer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/TAO/tests/Portable_Interceptors/PICurrent/ServerORBInitializer.cpp')
-rw-r--r--trunk/TAO/tests/Portable_Interceptors/PICurrent/ServerORBInitializer.cpp97
1 files changed, 97 insertions, 0 deletions
diff --git a/trunk/TAO/tests/Portable_Interceptors/PICurrent/ServerORBInitializer.cpp b/trunk/TAO/tests/Portable_Interceptors/PICurrent/ServerORBInitializer.cpp
new file mode 100644
index 00000000000..daa05dfb4ad
--- /dev/null
+++ b/trunk/TAO/tests/Portable_Interceptors/PICurrent/ServerORBInitializer.cpp
@@ -0,0 +1,97 @@
+// -*- C++ -*-
+
+#include "ServerORBInitializer.h"
+#include "ServerRequestInterceptor.h"
+#include "ClientRequestInterceptor2.h"
+#include "tao/PI/ORBInitInfo.h"
+#include "tao/ORB_Core.h"
+
+ACE_RCSID (PICurrent,
+ ServerORBInitializer,
+ "$Id$")
+
+PortableInterceptor::SlotId slot_id = 2093843221;
+
+void
+ServerORBInitializer::pre_init (
+ PortableInterceptor::ORBInitInfo_ptr /* info */
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}
+
+void
+ServerORBInitializer::post_init (
+ PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ CORBA::Object_var obj =
+ info->resolve_initial_references ("PICurrent"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ PortableInterceptor::Current_var pi_current =
+ PortableInterceptor::Current::_narrow (obj.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ if (CORBA::is_nil (pi_current.in ()))
+ {
+ ACE_ERROR ((LM_ERROR,
+ "(%P|%t) ERROR: Could not resolve PICurrent object.\n"));
+
+ ACE_THROW (CORBA::INTERNAL ());
+ }
+
+ ::slot_id = info->allocate_slot_id (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ PortableInterceptor::ServerRequestInterceptor_ptr server_tmp;
+ ACE_NEW_THROW_EX (server_tmp,
+ ServerRequestInterceptor (::slot_id,
+ pi_current.in ()),
+ CORBA::NO_MEMORY (
+ CORBA::SystemException::_tao_minor_code (
+ TAO::VMCID,
+ ENOMEM),
+ CORBA::COMPLETED_NO));
+ ACE_CHECK;
+
+ PortableInterceptor::ServerRequestInterceptor_var server_interceptor =
+ server_tmp;
+
+ info->add_server_request_interceptor (server_interceptor.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ PortableInterceptor::ClientRequestInterceptor_ptr client_tmp;
+ ACE_NEW_THROW_EX (client_tmp,
+ ClientRequestInterceptor2 (::slot_id),
+ CORBA::NO_MEMORY (
+ CORBA::SystemException::_tao_minor_code (
+ TAO::VMCID,
+ ENOMEM),
+ CORBA::COMPLETED_NO));
+ ACE_CHECK;
+
+ PortableInterceptor::ClientRequestInterceptor_var client_interceptor =
+ client_tmp;
+
+ info->add_client_request_interceptor (client_interceptor.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ // Disable collocation -- TAO-specific!!!
+ //
+ // Collocation optimizations must be disabled since TAO doesn't
+ // implement interceptor support for THRU_POA collocated
+ // invocations yet, and we need to force a client request
+ // interceptor to be invoked in this server.
+ TAO_ORBInitInfo_var tao_info =
+ TAO_ORBInitInfo::_narrow (info
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ tao_info->orb_core ()->optimize_collocation_objects (0);
+}