diff options
Diffstat (limited to 'trunk/TAO/tao/RTPortableServer/RT_POA.cpp')
-rw-r--r-- | trunk/TAO/tao/RTPortableServer/RT_POA.cpp | 964 |
1 files changed, 964 insertions, 0 deletions
diff --git a/trunk/TAO/tao/RTPortableServer/RT_POA.cpp b/trunk/TAO/tao/RTPortableServer/RT_POA.cpp new file mode 100644 index 00000000000..3f8c6fb2673 --- /dev/null +++ b/trunk/TAO/tao/RTPortableServer/RT_POA.cpp @@ -0,0 +1,964 @@ +// $Id$ + +#include "tao/RTPortableServer/RT_POA.h" + +#if defined (TAO_HAS_CORBA_MESSAGING) && TAO_HAS_CORBA_MESSAGING != 0 + +#include "tao/RTPortableServer/RT_Acceptor_Filters.h" + +#include "tao/ORB_Core.h" +#include "tao/ORB.h" +#include "tao/Server_Strategy_Factory.h" +#include "tao/Environment.h" +#include "tao/Exception.h" +#include "tao/Stub.h" +#include "tao/Policy_Manager.h" +#include "tao/debug.h" +#include "tao/RTCORBA/Thread_Pool.h" +#include "tao/Thread_Lane_Resources.h" +#include "tao/Acceptor_Registry.h" +#include "tao/Thread_Lane_Resources.h" +#include "tao/Thread_Lane_Resources_Manager.h" + +#include "tao/RTCORBA/RT_Policy_i.h" + +#include "tao/PortableServer/Default_Acceptor_Filter.h" +#include "tao/RTPortableServer/RT_Policy_Validator.h" + +#include "ace/Auto_Ptr.h" + +#if !defined (__ACE_INLINE__) +# include "tao/RTPortableServer/RT_POA.inl" +#endif /* ! __ACE_INLINE__ */ + +ACE_RCSID (RTPortableServer, + RT_POA, + "$Id$") + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +TAO_RT_POA::TAO_RT_POA (const TAO_Root_POA::String &name, + PortableServer::POAManager_ptr poa_manager, + const TAO_POA_Policy_Set &policies, + TAO_Root_POA *parent, + ACE_Lock &lock, + TAO_SYNCH_MUTEX &thread_lock, + TAO_ORB_Core &orb_core, + TAO_Object_Adapter *object_adapter + ACE_ENV_ARG_DECL) + : TAO_Regular_POA (name, + poa_manager, + policies, + parent, + lock, + thread_lock, + orb_core, + object_adapter + ACE_ENV_ARG_PARAMETER), + thread_pool_ (0) +{ + ACE_CHECK; + + // Parse the RT policies and update our policy cache. + this->parse_rt_policies (this->policies () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; +} + +TAO_RT_POA::~TAO_RT_POA (void) +{ +} + +TAO_Root_POA * +TAO_RT_POA::new_POA (const String &name, + PortableServer::POAManager_ptr poa_manager, + const TAO_POA_Policy_Set &policies, + TAO_Root_POA *parent, + ACE_Lock &lock, + TAO_SYNCH_MUTEX &thread_lock, + TAO_ORB_Core &orb_core, + TAO_Object_Adapter *object_adapter + ACE_ENV_ARG_DECL) +{ + TAO_RT_POA *poa = 0; + + ACE_NEW_THROW_EX (poa, + TAO_RT_POA (name, + poa_manager, + policies, + parent, + lock, + thread_lock, + orb_core, + object_adapter + ACE_ENV_ARG_PARAMETER), + CORBA::NO_MEMORY ()); + ACE_CHECK_RETURN (0); + + return poa; +} + +void +TAO_RT_POA::parse_rt_policies (TAO_POA_Policy_Set &policies + ACE_ENV_ARG_DECL) +{ + { + CORBA::Policy_var policy = + policies.get_cached_policy (TAO_CACHED_POLICY_PRIORITY_MODEL + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + RTCORBA::PriorityModelPolicy_var priority_model = + RTCORBA::PriorityModelPolicy::_narrow (policy.in () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + if (!CORBA::is_nil (priority_model.in ())) + { + RTCORBA::PriorityModel rt_priority_model = + priority_model->priority_model (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + this->cached_policies_.priority_model ( + TAO::Portable_Server::Cached_Policies::PriorityModel (rt_priority_model)); + + RTCORBA::Priority priority = + priority_model->server_priority (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + this->cached_policies_.server_priority (priority); + } + } + + this->thread_pool_ = + TAO_POA_RT_Policy_Validator::extract_thread_pool (this->orb_core_, + policies.policies () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; +} + +void +TAO_RT_POA::validate_priority (RTCORBA::Priority priority + ACE_ENV_ARG_DECL) +{ + if (priority < RTCORBA::minPriority + // The line below will always be false unless the value of + // RTCORBA::maxPriority, which is now assigned the value of + // 32767, is changed in RTCORBA.pidl. +// || priority > RTCORBA::maxPriority + ) + { + ACE_THROW (CORBA::BAD_PARAM ()); + } + + // If this POA is using a thread pool with lanes, make sure the + // priority matches one of the thread lanes. Note that in this + // case, bands do not matter since matching the lanes priority is a + // stricter condition than meeting the band ranges. In addition, + // when the POA was created, the bands had to match the lanes. + if (this->thread_pool_ != 0 && + this->thread_pool_->with_lanes ()) + { + TAO_Thread_Lane **lanes = + this->thread_pool_->lanes (); + + for (CORBA::ULong i = 0; + i != this->thread_pool_->number_of_lanes (); + ++i) + { + if (lanes[i]->lane_priority () == priority) + return; + } + + ACE_THROW (CORBA::BAD_PARAM ()); + } + else + // Else we are dealing with a thread pool without lanes. + { + // Check if we have bands. + CORBA::Policy_var bands = + this->policies ().get_cached_policy ( + TAO_CACHED_POLICY_RT_PRIORITY_BANDED_CONNECTION + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + RTCORBA::PriorityBandedConnectionPolicy_var priority_bands + = RTCORBA::PriorityBandedConnectionPolicy::_narrow (bands.in () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + TAO_PriorityBandedConnectionPolicy *priority_bands_i = + dynamic_cast <TAO_PriorityBandedConnectionPolicy *> + (priority_bands.in ()); + + if (priority_bands_i) + { + // If we do have bands, make sure that the priority is + // matching one of the bands. + RTCORBA::PriorityBands &bands = + priority_bands_i->priority_bands_rep (); + + for (CORBA::ULong i = 0; + i < bands.length (); + ++i) + { + if (bands[i].low <= priority && + bands[i].high >= priority) + return; + } + + ACE_THROW (CORBA::BAD_PARAM ()); + } + } +} + +void +TAO_RT_POA::validate_policies (ACE_ENV_SINGLE_ARG_DECL) +{ + // For each of the above operations, if the POA supports the + // IMPLICIT_ACTIVATION option for the ImplicitActivationPolicy then + // the ORB shall raise a WrongPolicy user exception. This relieves + // an ORB implementation of the need to retrieve the target object's + // priority from "somewhere" when a request arrives for an inactive + // object. + if (this->cached_policies_.implicit_activation () == + PortableServer::IMPLICIT_ACTIVATION) + { + ACE_THROW (PortableServer::POA::WrongPolicy ()); + } + + // For each of the above operations, if the POA does not support the + // SERVER_DECLARED option for the PriorityModelPolicy then the ORB + // shall raise a WrongPolicy user exception. + if (this->cached_policies_.priority_model () != + TAO::Portable_Server::Cached_Policies::SERVER_DECLARED) + { + ACE_THROW (PortableServer::POA::WrongPolicy ()); + } + + // In all other respects the semantics of the corresponding + // (i.e. without the name extensions "_with_priority" and + // "_and_priority") PortableServer::POA operations shall be + // observed. +} + +TAO_Stub * +TAO_RT_POA::key_to_stub_i (const TAO::ObjectKey &object_key, + const char *type_id, + CORBA::Short priority + ACE_ENV_ARG_DECL) +{ + // Client exposed policies. + CORBA::PolicyList_var client_exposed_policies = + this->client_exposed_policies (priority + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (0); + + // Server protocol policy. + CORBA::Policy_var protocol = + this->policies ().get_cached_policy (TAO_CACHED_POLICY_RT_SERVER_PROTOCOL + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (0); + + RTCORBA::ServerProtocolPolicy_var server_protocol_policy = + RTCORBA::ServerProtocolPolicy::_narrow (protocol.in () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (0); + + TAO_ServerProtocolPolicy *server_protocol = + dynamic_cast <TAO_ServerProtocolPolicy *> (server_protocol_policy.in ()); + + // Filter for server protocol. + TAO_Server_Protocol_Acceptor_Filter filter (server_protocol->protocols_rep ()); + + // If this POA is using the default thread pool or a thread pool + // without lanes, create the IOR with the acceptors in the thread + // pool. + if (this->thread_pool_ == 0 || + !this->thread_pool_->with_lanes ()) + { + TAO_Acceptor_Registry *acceptor_registry = 0; + + if (this->thread_pool_ == 0) + { + TAO_Thread_Lane_Resources_Manager &thread_lane_resources_manager = + this->orb_core_.thread_lane_resources_manager (); + + TAO_Thread_Lane_Resources &resources = + thread_lane_resources_manager.default_lane_resources (); + + acceptor_registry = + &resources.acceptor_registry (); + } + else + { + TAO_Thread_Lane **lanes = + this->thread_pool_->lanes (); + + TAO_Thread_Lane_Resources &resources = + lanes[0]->resources (); + + acceptor_registry = + &resources.acceptor_registry (); + } + + return + this->TAO_Regular_POA::create_stub_object (object_key, + type_id, + client_exposed_policies._retn (), + &filter, + *acceptor_registry + ACE_ENV_ARG_PARAMETER); + } + + // If this POA has the SERVER_DECLARED policy, create the IOR with + // the acceptors in the only thread lane that matches the priority + // of the object. + if (this->cached_policies_.priority_model () == + TAO::Portable_Server::Cached_Policies::SERVER_DECLARED) + { + TAO_Thread_Lane **lanes = + this->thread_pool_->lanes (); + + for (CORBA::ULong i = 0; + i != this->thread_pool_->number_of_lanes (); + ++i) + { + if (lanes[i]->lane_priority () == priority) + return this->TAO_Regular_POA::create_stub_object (object_key, + type_id, + client_exposed_policies._retn (), + &filter, + lanes[i]->resources ().acceptor_registry () + ACE_ENV_ARG_PARAMETER); + } + + ACE_ASSERT (0); + } + + // If this POA has the CLIENT_PROPAGATED policy, create the IOR with + // the acceptors in the thread lanes that matches the bands in this + // POA. If there are no bands, all the thread lanes are used. + CORBA::Policy_var bands = + this->policies ().get_cached_policy ( + TAO_CACHED_POLICY_RT_PRIORITY_BANDED_CONNECTION + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (0); + + RTCORBA::PriorityBandedConnectionPolicy_var priority_bands + = RTCORBA::PriorityBandedConnectionPolicy::_narrow (bands.in () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (0); + + TAO_PriorityBandedConnectionPolicy *priority_bands_i = + dynamic_cast <TAO_PriorityBandedConnectionPolicy *> (priority_bands.in ()); + + return this->create_stub_object (object_key, + type_id, + client_exposed_policies._retn (), + &filter, + priority_bands_i + ACE_ENV_ARG_PARAMETER); +} + +TAO_Stub * +TAO_RT_POA::create_stub_object (const TAO::ObjectKey &object_key, + const char *type_id, + CORBA::PolicyList *policy_list, + TAO_Acceptor_Filter *filter, + TAO_PriorityBandedConnectionPolicy *priority_bands + ACE_ENV_ARG_DECL) +{ + int error = 0; + + // Count the number of endpoints. + size_t profile_count = + this->endpoint_count (); + + // Create a profile container and have acceptor registries populate + // it with profiles as appropriate. + TAO_MProfile mprofile (0); + + // Allocate space for storing the profiles. There can never be more + // profiles than there are endpoints. In some cases, there can be + // less profiles than endpoints. + int result = + mprofile.set (static_cast <CORBA::ULong> (profile_count)); + if (result == -1) + error = 1; + + TAO_Thread_Lane **lanes = + this->thread_pool_->lanes (); + + // Leave it to the filter to decide which acceptors/in which order + // go into the mprofile. + for (CORBA::ULong i = 0; + i != this->thread_pool_->number_of_lanes () && + !error; + ++i) + { + if (this->lane_required (lanes[i], + priority_bands)) + { + TAO_Acceptor_Registry &acceptor_registry = + lanes[i]->resources ().acceptor_registry (); + + result = + filter->fill_profile (object_key, + mprofile, + acceptor_registry.begin (), + acceptor_registry.end (), + lanes[i]->lane_priority ()); + if (result == -1) + error = 1; + } + } + + if (!error) + result = filter->encode_endpoints (mprofile); + if (result == -1) + error = 1; + + if (error) + ACE_THROW_RETURN (CORBA::INTERNAL ( + CORBA::SystemException::_tao_minor_code ( + TAO_MPROFILE_CREATION_ERROR, + 0), + CORBA::COMPLETED_NO), + 0); + + // Make sure we have at least one profile. <mp> may end up being + // empty if none of the acceptor endpoints have the right priority + // for this object, for example. + if (mprofile.profile_count () == 0) + ACE_THROW_RETURN (CORBA::BAD_PARAM ( + CORBA::SystemException::_tao_minor_code ( + TAO_MPROFILE_CREATION_ERROR, + 0), + CORBA::COMPLETED_NO), + 0); + + return + this->orb_core_.create_stub_object (mprofile, + type_id, + policy_list + ACE_ENV_ARG_PARAMETER); +} + +size_t +TAO_RT_POA::endpoint_count (void) +{ + size_t profile_count = 0; + + TAO_Thread_Lane **lanes = + this->thread_pool_->lanes (); + + for (CORBA::ULong i = 0; + i != this->thread_pool_->number_of_lanes (); + ++i) + profile_count += + lanes[i]->resources ().acceptor_registry ().endpoint_count (); + + return profile_count; +} + +int +TAO_RT_POA::lane_required (TAO_Thread_Lane *lane, + TAO_PriorityBandedConnectionPolicy *priority_bands) +{ + if (priority_bands == 0) + return 1; + + RTCORBA::PriorityBands &bands = + priority_bands->priority_bands_rep (); + + for (CORBA::ULong i = 0; + i < bands.length (); + ++i) + { + if (bands[i].low <= lane->lane_priority () && + bands[i].high >= lane->lane_priority ()) + return 1; + } + + return 0; +} + +CORBA::PolicyList * +TAO_RT_POA::client_exposed_policies (CORBA::Short object_priority + ACE_ENV_ARG_DECL) +{ + CORBA::PolicyList *client_exposed_policies = 0; + ACE_NEW_THROW_EX (client_exposed_policies, + CORBA::PolicyList (), + CORBA::NO_MEMORY (TAO::VMCID, + CORBA::COMPLETED_NO)); + ACE_CHECK_RETURN (0); + + CORBA::PolicyList_var safe_client_exposed_policies = client_exposed_policies; + + // Add in all of the client exposed policies. + this->policies_.add_client_exposed_fixed_policies (client_exposed_policies + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (0); + + // Check if the priority model policy has been set, and if so, let + // the client know about it. + CORBA::Short poa_priority = + this->cached_policies_.server_priority (); + + if (poa_priority != TAO_INVALID_PRIORITY) + { + TAO::Portable_Server::Cached_Policies::PriorityModel priority_model = + this->cached_policies_.priority_model (); + + // If the priority model is client propagated, let the client + // about the default server priority (the POA priority). If + // the priority model is server declared, tell the client the + // servant's priority. + CORBA::Short priority; + if (priority_model == TAO::Portable_Server::Cached_Policies::CLIENT_PROPAGATED) + priority = poa_priority; + else + priority = object_priority; + + const CORBA::ULong current_length = + client_exposed_policies->length (); + client_exposed_policies->length (current_length + 1); + + TAO_PriorityModelPolicy *priority_model_policy; + ACE_NEW_THROW_EX (priority_model_policy, + TAO_PriorityModelPolicy (RTCORBA::PriorityModel (priority_model), + priority), + CORBA::NO_MEMORY (TAO::VMCID, + CORBA::COMPLETED_NO)); + ACE_CHECK_RETURN (0); + + (*client_exposed_policies)[current_length] = priority_model_policy; + } + + return safe_client_exposed_policies._retn (); +} + + +// Standard POA interfaces +PortableServer::POA_ptr +TAO_RT_POA::create_POA (const char *adapter_name, + PortableServer::POAManager_ptr poa_manager, + const CORBA::PolicyList &policies + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::AdapterAlreadyExists, + PortableServer::POA::InvalidPolicy)) +{ + PortableServer::POA_ptr poa = this->TAO_Regular_POA::create_POA (adapter_name, + poa_manager, + policies + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (poa); + return poa; +} + +PortableServer::POA_ptr +TAO_RT_POA::find_POA (const char *adapter_name, + CORBA::Boolean activate_it + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::AdapterNonExistent)) +{ + PortableServer::POA_ptr poa = this->TAO_Regular_POA::find_POA (adapter_name, + activate_it + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (poa); + return poa; +} + +void +TAO_RT_POA::destroy (CORBA::Boolean etherealize_objects, + CORBA::Boolean wait_for_completion + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + this->TAO_Regular_POA::destroy (etherealize_objects, + wait_for_completion + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; +} + + +#if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO) + +PortableServer::ThreadPolicy_ptr +TAO_RT_POA::create_thread_policy (PortableServer::ThreadPolicyValue value + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + PortableServer::ThreadPolicy_ptr policy = + this->TAO_Regular_POA::create_thread_policy (value + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (policy); + return policy; +} + +#endif /* TAO_HAS_MINIMUM_POA == 0 */ + +#if !defined (CORBA_E_MICRO) +PortableServer::LifespanPolicy_ptr +TAO_RT_POA::create_lifespan_policy (PortableServer::LifespanPolicyValue value + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + PortableServer::LifespanPolicy_ptr policy = + this->TAO_Regular_POA::create_lifespan_policy (value + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (policy); + return policy; +} +#endif + +#if !defined (CORBA_E_MICRO) +PortableServer::IdUniquenessPolicy_ptr +TAO_RT_POA::create_id_uniqueness_policy (PortableServer::IdUniquenessPolicyValue value + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + PortableServer::IdUniquenessPolicy_ptr policy = + this->TAO_Regular_POA::create_id_uniqueness_policy (value + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (policy); + return policy; +} +#endif + +#if !defined (CORBA_E_MICRO) +PortableServer::IdAssignmentPolicy_ptr +TAO_RT_POA::create_id_assignment_policy (PortableServer::IdAssignmentPolicyValue value + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + PortableServer::IdAssignmentPolicy_ptr policy = + this->TAO_Regular_POA::create_id_assignment_policy (value + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (policy); + return policy; +} +#endif + + +#if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO) + +PortableServer::ImplicitActivationPolicy_ptr +TAO_RT_POA::create_implicit_activation_policy (PortableServer::ImplicitActivationPolicyValue value + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + PortableServer::ImplicitActivationPolicy_ptr policy = + this->TAO_Regular_POA::create_implicit_activation_policy (value + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (policy); + return policy; +} + +PortableServer::ServantRetentionPolicy_ptr +TAO_RT_POA::create_servant_retention_policy (PortableServer::ServantRetentionPolicyValue value + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + PortableServer::ServantRetentionPolicy_ptr policy = + this->TAO_Regular_POA::create_servant_retention_policy (value + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (policy); + return policy; +} + + +PortableServer::RequestProcessingPolicy_ptr +TAO_RT_POA::create_request_processing_policy (PortableServer::RequestProcessingPolicyValue value + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + PortableServer::RequestProcessingPolicy_ptr policy = + this->TAO_Regular_POA::create_request_processing_policy (value + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (policy); + return policy; +} + +#endif /* TAO_HAS_MINIMUM_POA == 0 && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO) */ + +char * +TAO_RT_POA::the_name (ACE_ENV_SINGLE_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + char * name = + this->TAO_Regular_POA::the_name (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK_RETURN (name); + return name; +} + +PortableServer::POA_ptr +TAO_RT_POA::the_parent (ACE_ENV_SINGLE_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + PortableServer::POA_ptr parent = + this->TAO_Regular_POA::the_parent (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK_RETURN (parent); + return parent; +} + +PortableServer::POAList * +TAO_RT_POA::the_children (ACE_ENV_SINGLE_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + PortableServer::POAList *children = + this->TAO_Regular_POA::the_children (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK_RETURN (children); + return children; +} + +PortableServer::POAManager_ptr +TAO_RT_POA::the_POAManager (ACE_ENV_SINGLE_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + PortableServer::POAManager_ptr poa_manager = + this->TAO_Regular_POA::the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK_RETURN (poa_manager); + return poa_manager; +} + + +#if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO) + +PortableServer::AdapterActivator_ptr +TAO_RT_POA::the_activator (ACE_ENV_SINGLE_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + PortableServer::AdapterActivator_ptr activator = + this->TAO_Regular_POA::the_activator (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK_RETURN (activator); + return activator; +} + +void +TAO_RT_POA::the_activator (PortableServer::AdapterActivator_ptr adapter_activator + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + this->TAO_Regular_POA::the_activator (adapter_activator + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; +} + +PortableServer::ServantManager_ptr +TAO_RT_POA::get_servant_manager (ACE_ENV_SINGLE_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::WrongPolicy)) +{ + PortableServer::ServantManager_ptr servant_manager = + this->TAO_Regular_POA::get_servant_manager (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK_RETURN (servant_manager); + return servant_manager; +} + +void +TAO_RT_POA::set_servant_manager (PortableServer::ServantManager_ptr imgr + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::WrongPolicy)) +{ + this->TAO_Regular_POA::set_servant_manager (imgr + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; +} + +PortableServer::Servant +TAO_RT_POA::get_servant (ACE_ENV_SINGLE_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::NoServant, + PortableServer::POA::WrongPolicy)) +{ + PortableServer::Servant servant = + this->TAO_Regular_POA::get_servant (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK_RETURN (servant); + return servant; +} + +void +TAO_RT_POA::set_servant (PortableServer::Servant servant + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::WrongPolicy)) +{ + this->TAO_Regular_POA::set_servant (servant + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; +} + +#endif /* TAO_HAS_MINIMUM_POA == 0 */ + +PortableServer::ObjectId * +TAO_RT_POA::activate_object (PortableServer::Servant p_servant + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::ServantAlreadyActive, + PortableServer::POA::WrongPolicy)) +{ + PortableServer::ObjectId *object_id = + this->TAO_Regular_POA::activate_object (p_servant + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (object_id); + return object_id; +} + +#if !defined (CORBA_E_MICRO) +void +TAO_RT_POA::activate_object_with_id (const PortableServer::ObjectId &id, + PortableServer::Servant p_servant + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::ServantAlreadyActive, + PortableServer::POA::ObjectAlreadyActive, + PortableServer::POA::WrongPolicy)) +{ + this->TAO_Regular_POA::activate_object_with_id (id, + p_servant + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; +} +#endif + +void +TAO_RT_POA::deactivate_object (const PortableServer::ObjectId &oid + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::ObjectNotActive, + PortableServer::POA::WrongPolicy)) +{ + this->TAO_Regular_POA::deactivate_object (oid + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; +} + +CORBA::Object_ptr +TAO_RT_POA::create_reference (const char *intf + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::WrongPolicy)) +{ + CORBA::Object_ptr obj = + this->TAO_Regular_POA::create_reference (intf + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (obj); + return obj; +} + +CORBA::Object_ptr +TAO_RT_POA::create_reference_with_id (const PortableServer::ObjectId &oid, + const char *intf + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + CORBA::Object_ptr obj = + this->TAO_Regular_POA::create_reference_with_id (oid, + intf + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (obj); + return obj; +} + +PortableServer::ObjectId * +TAO_RT_POA::servant_to_id (PortableServer::Servant p_servant + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::ServantNotActive, + PortableServer::POA::WrongPolicy)) +{ + PortableServer::ObjectId *object_id = + this->TAO_Regular_POA::servant_to_id (p_servant + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (object_id); + return object_id; +} + +CORBA::Object_ptr +TAO_RT_POA::servant_to_reference (PortableServer::Servant p_servant + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::ServantNotActive, + PortableServer::POA::WrongPolicy)) +{ + CORBA::Object_ptr obj = + this->TAO_Regular_POA::servant_to_reference (p_servant + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (obj); + return obj; +} + + +PortableServer::Servant +TAO_RT_POA::reference_to_servant (CORBA::Object_ptr reference + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::ObjectNotActive, + PortableServer::POA::WrongAdapter, + PortableServer::POA::WrongPolicy)) +{ + PortableServer::Servant servant = + this->TAO_Regular_POA::reference_to_servant (reference + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (servant); + return servant; +} + +PortableServer::ObjectId * +TAO_RT_POA::reference_to_id (CORBA::Object_ptr reference + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::WrongAdapter, + PortableServer::POA::WrongPolicy)) +{ + PortableServer::ObjectId *object_id = + this->TAO_Regular_POA::reference_to_id (reference + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (object_id); + return object_id; +} + +PortableServer::Servant +TAO_RT_POA::id_to_servant (const PortableServer::ObjectId &oid + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::ObjectNotActive, + PortableServer::POA::WrongPolicy)) +{ + PortableServer::Servant servant = + this->TAO_Regular_POA::id_to_servant (oid + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (servant); + return servant; +} + +CORBA::Object_ptr +TAO_RT_POA::id_to_reference (const PortableServer::ObjectId &oid + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::ObjectNotActive, + PortableServer::POA::WrongPolicy)) +{ + CORBA::Object_ptr obj = + this->TAO_Regular_POA::id_to_reference (oid + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (obj); + return obj; +} + +CORBA::OctetSeq * +TAO_RT_POA::id (ACE_ENV_SINGLE_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + return this->TAO_Regular_POA::id (ACE_ENV_SINGLE_ARG_PARAMETER); +} + +TAO_END_VERSIONED_NAMESPACE_DECL + +#endif /* TAO_HAS_CORBA_MESSAGING && TAO_HAS_CORBA_MESSAGING != 0 */ |