diff options
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Notify/RT_POA_Helper.cpp')
-rw-r--r-- | TAO/orbsvcs/orbsvcs/Notify/RT_POA_Helper.cpp | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Notify/RT_POA_Helper.cpp b/TAO/orbsvcs/orbsvcs/Notify/RT_POA_Helper.cpp new file mode 100644 index 00000000000..81859ded60f --- /dev/null +++ b/TAO/orbsvcs/orbsvcs/Notify/RT_POA_Helper.cpp @@ -0,0 +1,166 @@ +// $Id$ + +#include "orbsvcs/Notify/RT_POA_Helper.h" +#include "tao/RTCORBA/RTCORBA.h" +#include "tao/debug.h" +#include "orbsvcs/NotifyExtC.h" +#include "orbsvcs/Notify/RT_Properties.h" +#include "ace/SString.h" + +ACE_RCSID (Notify, + TAO_Notify_RT_POA_Helper, + "$Id$") + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +TAO_Notify_RT_POA_Helper::~TAO_Notify_RT_POA_Helper () +{ +} + +void +TAO_Notify_RT_POA_Helper::init (PortableServer::POA_ptr parent_poa, const NotifyExt::ThreadPoolParams& tp_params ACE_ENV_ARG_DECL) +{ + ACE_CString child_poa_name = this->get_unique_id (); + + this->init (parent_poa, child_poa_name.c_str (), tp_params ACE_ENV_ARG_PARAMETER); +} + +void +TAO_Notify_RT_POA_Helper::init (PortableServer::POA_ptr parent_poa, const char* poa_name + , const NotifyExt::ThreadPoolParams& tp_params ACE_ENV_ARG_DECL) +{ + CORBA::PolicyList policy_list (4); + + this->set_policy (parent_poa, policy_list ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + RTCORBA::RTORB_var rt_orb = TAO_Notify_RT_PROPERTIES::instance ()->rt_orb (); + + RTCORBA::PriorityModel priority_model = + tp_params.priority_model == NotifyExt::CLIENT_PROPAGATED ? + RTCORBA::CLIENT_PROPAGATED : RTCORBA::SERVER_DECLARED; + + if (TAO_debug_level > 0) + ACE_DEBUG ((LM_DEBUG, "Priority Model = %d, Server prio = %d\n" + , tp_params.priority_model, tp_params.server_priority)); + + policy_list.length (3); + policy_list[2] = + rt_orb->create_priority_model_policy (priority_model, + tp_params.server_priority + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + if (TAO_debug_level > 0) + ACE_DEBUG ((LM_DEBUG, "Creating threadpool: static threads = %d, def. prio = %d\n" + , tp_params.static_threads, tp_params.default_priority)); + + // Create the thread-pool. + RTCORBA::ThreadpoolId threadpool_id = + rt_orb->create_threadpool (tp_params.stacksize, + tp_params.static_threads, + tp_params.dynamic_threads, + tp_params.default_priority, + tp_params.allow_request_buffering, + tp_params.max_buffered_requests, + tp_params.max_request_buffer_size + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + policy_list.length (4); + policy_list[3] = + rt_orb->create_threadpool_policy (threadpool_id + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + this->create_i (parent_poa, poa_name, policy_list ACE_ENV_ARG_PARAMETER); +} + +void +TAO_Notify_RT_POA_Helper::init (PortableServer::POA_ptr parent_poa, const NotifyExt::ThreadPoolLanesParams& tpl_params ACE_ENV_ARG_DECL) +{ + ACE_CString child_poa_name = this->get_unique_id (); + + this->init (parent_poa, child_poa_name.c_str (), tpl_params ACE_ENV_ARG_PARAMETER); +} + +void +TAO_Notify_RT_POA_Helper::init (PortableServer::POA_ptr parent_poa, const char* poa_name + , const NotifyExt::ThreadPoolLanesParams& tpl_params ACE_ENV_ARG_DECL) +{ + CORBA::PolicyList policy_list (4); + + this->set_policy (parent_poa, policy_list ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + RTCORBA::RTORB_var rt_orb = TAO_Notify_RT_PROPERTIES::instance ()->rt_orb (); + + RTCORBA::PriorityModel priority_model = + tpl_params.priority_model == NotifyExt::CLIENT_PROPAGATED ? + RTCORBA::CLIENT_PROPAGATED : RTCORBA::SERVER_DECLARED; + + policy_list.length (3); + policy_list[2] = + rt_orb->create_priority_model_policy (priority_model, + tpl_params.server_priority + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + // Populate RTCORBA Lanes. + RTCORBA::ThreadpoolLanes lanes (tpl_params.lanes.length ()); + lanes.length (tpl_params.lanes.length ()); + + for (CORBA::ULong index = 0; index < tpl_params.lanes.length (); ++index) + { + if (TAO_debug_level > 0) + { + ACE_DEBUG ((LM_DEBUG, "Creating threadpool lane %d: priority = %d, static threads = %d\n", + index, tpl_params.lanes[index].lane_priority, tpl_params.lanes[index].static_threads)); + } + + lanes[index].lane_priority = tpl_params.lanes[index].lane_priority; + lanes[index].static_threads = tpl_params.lanes[index].static_threads; + lanes[index].dynamic_threads = tpl_params.lanes[index].dynamic_threads; + } + + // Create the thread-pool. + RTCORBA::ThreadpoolId threadpool_id = + rt_orb->create_threadpool_with_lanes (tpl_params.stacksize, + lanes, + tpl_params.allow_borrowing, + tpl_params.allow_request_buffering, + tpl_params.max_buffered_requests, + tpl_params.max_request_buffer_size + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + policy_list.length (4); + policy_list[3] = + rt_orb->create_threadpool_policy (threadpool_id + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + this->create_i (parent_poa, poa_name, policy_list ACE_ENV_ARG_PARAMETER); +} + +void +TAO_Notify_RT_POA_Helper::init (PortableServer::POA_ptr parent_poa ACE_ENV_ARG_DECL) +{ + CORBA::PolicyList policy_list (1); + + RTCORBA::RTORB_var rt_orb = TAO_Notify_RT_PROPERTIES::instance ()->rt_orb (); + + policy_list.length (1); + + policy_list[0] = + rt_orb->create_priority_model_policy (RTCORBA::CLIENT_PROPAGATED, + 0 + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + ACE_CString child_poa_name = this->get_unique_id (); + + this->create_i (parent_poa, child_poa_name.c_str (), policy_list ACE_ENV_ARG_PARAMETER); +} + +TAO_END_VERSIONED_NAMESPACE_DECL |