diff options
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/LoadBalancing/LB_ORBInitializer.cpp')
-rw-r--r-- | TAO/orbsvcs/orbsvcs/LoadBalancing/LB_ORBInitializer.cpp | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_ORBInitializer.cpp b/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_ORBInitializer.cpp new file mode 100644 index 00000000000..e7e7eeb4443 --- /dev/null +++ b/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_ORBInitializer.cpp @@ -0,0 +1,94 @@ +#include "orbsvcs/LoadBalancing/LB_ORBInitializer.h" +#include "orbsvcs/LoadBalancing/LB_IORInterceptor.h" +#include "orbsvcs/LoadBalancing/LB_ServerRequestInterceptor.h" + +#include "orbsvcs/CosLoadBalancingC.h" + +#include "tao/ORB_Constants.h" + +ACE_RCSID (LoadBalancing, + LB_ORBInitializer, + "$Id$") + + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +TAO_LB_ORBInitializer::TAO_LB_ORBInitializer ( + const CORBA::StringSeq & object_groups, + const CORBA::StringSeq & repository_ids, + const char * location) + : object_groups_ (object_groups), + repository_ids_ (repository_ids), + location_ (location), + load_alert_ () +{ +} + +void +TAO_LB_ORBInitializer::pre_init ( + PortableInterceptor::ORBInitInfo_ptr + ACE_ENV_ARG_DECL_NOT_USED) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ +} + +void +TAO_LB_ORBInitializer::post_init ( + PortableInterceptor::ORBInitInfo_ptr info + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + CORBA::Object_var obj = + info->resolve_initial_references ("LoadManager" + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + CosLoadBalancing::LoadManager_var lm = + CosLoadBalancing::LoadManager::_narrow (obj.in () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + CORBA::String_var orbid = info->orb_id (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + PortableInterceptor::IORInterceptor_ptr tmp; + ACE_NEW_THROW_EX (tmp, + TAO_LB_IORInterceptor (this->object_groups_, + this->repository_ids_, + this->location_.in (), + lm.in (), + orbid.in (), + this->load_alert_), + CORBA::NO_MEMORY ( + CORBA::SystemException::_tao_minor_code ( + TAO::VMCID, + ENOMEM), + CORBA::COMPLETED_NO)); + ACE_CHECK; + + PortableInterceptor::IORInterceptor_var ior_interceptor = tmp; + + info->add_ior_interceptor (ior_interceptor.in () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + // ---------------- + + PortableInterceptor::ServerRequestInterceptor_ptr sri; + ACE_NEW_THROW_EX (sri, + TAO_LB_ServerRequestInterceptor (this->load_alert_), + CORBA::NO_MEMORY ( + CORBA::SystemException::_tao_minor_code ( + TAO::VMCID, + ENOMEM), + CORBA::COMPLETED_NO)); + ACE_CHECK; + + PortableInterceptor::ServerRequestInterceptor_var sr_interceptor = sri; + + info->add_server_request_interceptor (sr_interceptor.in () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; +} + +TAO_END_VERSIONED_NAMESPACE_DECL |