diff options
Diffstat (limited to 'trunk/TAO/tao/RTPortableServer/RT_POA.h')
-rw-r--r-- | trunk/TAO/tao/RTPortableServer/RT_POA.h | 337 |
1 files changed, 337 insertions, 0 deletions
diff --git a/trunk/TAO/tao/RTPortableServer/RT_POA.h b/trunk/TAO/tao/RTPortableServer/RT_POA.h new file mode 100644 index 00000000000..4f2937ff125 --- /dev/null +++ b/trunk/TAO/tao/RTPortableServer/RT_POA.h @@ -0,0 +1,337 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file RT_POA.h + * + * $Id$ + * + * RT_POA + * + * @author Irfan Pyarali + */ +// =================================================================== + +#ifndef TAO_RT_POA_H +#define TAO_RT_POA_H + +#include /**/ "ace/pre.h" + +#include "tao/RTPortableServer/rtportableserver_export.h" + +#include "tao/PortableServer/Regular_POA.h" +#include "tao/orbconf.h" + +#if defined (TAO_HAS_CORBA_MESSAGING) && TAO_HAS_CORBA_MESSAGING != 0 + +#define TAO_RT_PORTABLESERVER_SAFE_INCLUDE +#include "tao/RTPortableServer/RTPortableServerC.h" +#undef TAO_RT_PORTABLESERVER_SAFE_INCLUDE + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +// This is to remove "inherits via dominance" warnings from MSVC. +// MSVC is being a little too paranoid. +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable:4250) +#endif /* _MSC_VER */ + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +class TAO_Thread_Pool; +class TAO_Thread_Lane; +class TAO_PriorityBandedConnectionPolicy; + +class TAO_RTPortableServer_Export TAO_RT_POA + : public virtual RTPortableServer::POA + , public virtual TAO_Regular_POA +{ +public: + + // RTCORBA specific methods + CORBA::Object_ptr create_reference_with_priority (const char * intf, + RTCORBA::Priority priority + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::WrongPolicy)); + + CORBA::Object_ptr create_reference_with_id_and_priority (const PortableServer::ObjectId & oid, + const char * intf, + RTCORBA::Priority priority + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::WrongPolicy)); + + PortableServer::ObjectId * activate_object_with_priority (PortableServer::Servant p_servant, + RTCORBA::Priority priority + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::ServantAlreadyActive, + PortableServer::POA::WrongPolicy)); + + void activate_object_with_id_and_priority (const PortableServer::ObjectId & oid, + PortableServer::Servant p_servant, + RTCORBA::Priority priority + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::ServantAlreadyActive, + PortableServer::POA::ObjectAlreadyActive, + PortableServer::POA::WrongPolicy)); + // End RTCORBA specific methods + + // Standard POA interface methods + PortableServer::POA_ptr create_POA (const char *adapter_name, + PortableServer::POAManager_ptr poa_manager, + const CORBA::PolicyList &policies + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::AdapterAlreadyExists, + PortableServer::POA::InvalidPolicy)); + + PortableServer::POA_ptr find_POA (const char *adapter_name, + CORBA::Boolean activate_it + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::AdapterNonExistent)); + + void destroy (CORBA::Boolean etherealize_objects, + CORBA::Boolean wait_for_completion + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); + +#if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO) + + PortableServer::ThreadPolicy_ptr create_thread_policy (PortableServer::ThreadPolicyValue value + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); + +#endif /* TAO_HAS_MINIMUM_POA == 0 */ + +#if !defined (CORBA_E_MICRO) + PortableServer::LifespanPolicy_ptr create_lifespan_policy (PortableServer::LifespanPolicyValue value + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); +#endif + +#if !defined (CORBA_E_MICRO) + PortableServer::IdUniquenessPolicy_ptr create_id_uniqueness_policy (PortableServer::IdUniquenessPolicyValue value + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); +#endif + +#if !defined (CORBA_E_MICRO) + PortableServer::IdAssignmentPolicy_ptr create_id_assignment_policy (PortableServer::IdAssignmentPolicyValue value + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); +#endif + +#if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO) + PortableServer::ImplicitActivationPolicy_ptr create_implicit_activation_policy (PortableServer::ImplicitActivationPolicyValue value + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); + + PortableServer::ServantRetentionPolicy_ptr create_servant_retention_policy (PortableServer::ServantRetentionPolicyValue value + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); + + PortableServer::RequestProcessingPolicy_ptr create_request_processing_policy (PortableServer::RequestProcessingPolicyValue value + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); + +#endif /* TAO_HAS_MINIMUM_POA == 0 && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO) */ + + char * the_name (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); + + PortableServer::POA_ptr the_parent (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); + + PortableServer::POAList *the_children (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); + + PortableServer::POAManager_ptr the_POAManager (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); + +#if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO) + + PortableServer::AdapterActivator_ptr the_activator (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); + + void the_activator (PortableServer::AdapterActivator_ptr adapter_activator + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); + + PortableServer::ServantManager_ptr get_servant_manager (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::WrongPolicy)); + + void set_servant_manager (PortableServer::ServantManager_ptr imgr + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::WrongPolicy)); + + PortableServer::Servant get_servant (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::NoServant, + PortableServer::POA::WrongPolicy)); + + void set_servant (PortableServer::Servant servant + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::WrongPolicy)); + +#endif /* TAO_HAS_MINIMUM_POA == 0 */ + + PortableServer::ObjectId *activate_object (PortableServer::Servant p_servant + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::ServantAlreadyActive, + PortableServer::POA::WrongPolicy)); + +#if !defined (CORBA_E_MICRO) + void activate_object_with_id (const PortableServer::ObjectId &id, + PortableServer::Servant p_servant + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::ServantAlreadyActive, + PortableServer::POA::ObjectAlreadyActive, + PortableServer::POA::WrongPolicy)); +#endif + + void deactivate_object (const PortableServer::ObjectId &oid + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::ObjectNotActive, + PortableServer::POA::WrongPolicy)); + + CORBA::Object_ptr create_reference (const char *intf + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::WrongPolicy)); + + CORBA::Object_ptr create_reference_with_id (const PortableServer::ObjectId &oid, + const char *intf + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); + + PortableServer::ObjectId *servant_to_id (PortableServer::Servant p_servant + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::ServantNotActive, + PortableServer::POA::WrongPolicy)); + + CORBA::Object_ptr servant_to_reference (PortableServer::Servant p_servant + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::ServantNotActive, + PortableServer::POA::WrongPolicy)); + + PortableServer::Servant reference_to_servant (CORBA::Object_ptr reference + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::ObjectNotActive, + PortableServer::POA::WrongAdapter, + PortableServer::POA::WrongPolicy)); + + PortableServer::ObjectId *reference_to_id (CORBA::Object_ptr reference + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::WrongAdapter, + PortableServer::POA::WrongPolicy)); + + PortableServer::Servant id_to_servant (const PortableServer::ObjectId &oid + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::ObjectNotActive, + PortableServer::POA::WrongPolicy)); + + CORBA::Object_ptr id_to_reference (const PortableServer::ObjectId &oid + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException, + PortableServer::POA::ObjectNotActive, + PortableServer::POA::WrongPolicy)); + + CORBA::OctetSeq *id (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); + + // End standard POA interface methods. + + virtual CORBA::PolicyList *client_exposed_policies (CORBA::Short object_priority + ACE_ENV_ARG_DECL); + + TAO_RT_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); + + virtual ~TAO_RT_POA (void); + + void *thread_pool (void) const; + +protected: + + /// Template method for creating new POA's of this type. + virtual TAO_Root_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); + + virtual TAO_Stub *key_to_stub_i (const TAO::ObjectKey &key, + const char *type_id, + CORBA::Short priority + ACE_ENV_ARG_DECL); + + void validate_priority (RTCORBA::Priority priority + ACE_ENV_ARG_DECL); + + void validate_policies (ACE_ENV_SINGLE_ARG_DECL); + + /// Parse the policy list for RT policies and update our + /// cached policy instance. + void parse_rt_policies (TAO_POA_Policy_Set &policies + ACE_ENV_ARG_DECL); + + size_t endpoint_count (void); + + TAO_Stub *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 lane_required (TAO_Thread_Lane *lane, + TAO_PriorityBandedConnectionPolicy *priority_bands); + + TAO_Thread_Pool *thread_pool_; + +}; + +TAO_END_VERSIONED_NAMESPACE_DECL + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif /* _MSC_VER */ + +#if defined (__ACE_INLINE__) +# include "tao/RTPortableServer/RT_POA.inl" +#endif /* __ACE_INLINE__ */ + +#endif /* TAO_HAS_CORBA_MESSAGING && TAO_HAS_CORBA_MESSAGING != 0 */ + +#include /**/ "ace/post.h" + +#endif /* TAO_POA_H */ |