summaryrefslogtreecommitdiff
path: root/TAO/tao/PortableServer/Root_POA.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/PortableServer/Root_POA.h')
-rw-r--r--TAO/tao/PortableServer/Root_POA.h948
1 files changed, 948 insertions, 0 deletions
diff --git a/TAO/tao/PortableServer/Root_POA.h b/TAO/tao/PortableServer/Root_POA.h
new file mode 100644
index 00000000000..eab87c81a9c
--- /dev/null
+++ b/TAO/tao/PortableServer/Root_POA.h
@@ -0,0 +1,948 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file Root_POA.h
+ *
+ * $Id$
+ *
+ * Header file for CORBA's ORB type.
+ *
+ * @author Irfan Pyarali <irfan@cs.wustl.edu>
+ */
+//=============================================================================
+
+#ifndef TAO_ROOT_POA_H
+#define TAO_ROOT_POA_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/PortableServer/portableserver_export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+// Object Adapter
+#include "tao/PortableServer/Object_Adapter.h"
+
+// POA Policy Set
+#include "tao/PortableServer/POA_Policy_Set.h"
+
+// Cached POA Policies
+#include "tao/PortableServer/POA_Cached_Policies.h"
+#include "tao/PortableServer/Active_Policy_Strategies.h"
+
+#include "tao/PortableServer/ORT_Adapter.h"
+
+#include "tao/PortableServer/PortableServer.h"
+
+// Object_Key
+#include "tao/Object_KeyC.h"
+
+// Local Object
+#include "tao/LocalObject.h"
+
+// Portable Interceptor
+#include "tao/PI_ForwardC.h"
+
+// OctetSeq
+#include "tao/OctetSeqC.h"
+
+#include "ace/SString.h"
+#include "ace/Hash_Map_Manager_T.h"
+#include "ace/Array_Base.h"
+#include "ace/Synch_Traits.h"
+#include "ace/Thread_Mutex.h"
+#include "ace/Recursive_Thread_Mutex.h"
+#include "ace/Null_Mutex.h"
+
+// 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
+
+// Forward Declaration
+class TAO_Acceptor_Filter;
+
+#if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
+class TAO_Acceptor_Filter_Factory;
+class TAO_POAManager_Factory;
+#endif
+
+class TAO_Network_Priority_Hook;
+class TAO_Acceptor_Registry;
+class TAO_IORInfo;
+class TAO_Regular_POA;
+
+namespace PortableInterceptor
+{
+ class IORInfo;
+ typedef IORInfo *IORInfo_ptr;
+}
+
+namespace TAO
+{
+ class ORT_Adapter;
+ class ORT_Adapter_Factory;
+
+ namespace Portable_Server
+ {
+ class Servant_Upcall;
+ class POA_Current_Impl;
+ class Temporary_Creation_Time;
+ }
+}
+
+namespace PortableServer
+{
+ class POAManager;
+ typedef POAManager *POAManager_ptr;
+}
+
+/**
+ * @class TAO_Root_POA
+ *
+ * @brief Implementation of the PortableServer::POA interface.
+ *
+ * Implementation of the PortableServer::POA interface.
+ */
+class TAO_PortableServer_Export TAO_Root_POA
+ : public virtual PortableServer::POA,
+ public virtual TAO_Local_RefCounted_Object
+{
+public:
+
+ friend class TAO_Object_Adapter;
+ friend class TAO::Portable_Server::Servant_Upcall;
+ friend class TAO::Portable_Server::Non_Servant_Upcall;
+ friend class TAO_POA_Manager;
+ friend class TAO_RT_Collocation_Resolver;
+ friend class TAO_IORInfo;
+
+ typedef ACE_CString String;
+
+#if !defined (CORBA_E_MICRO)
+ PortableServer::POA_ptr create_POA (
+ const char *adapter_name,
+ PortableServer::POAManager_ptr poa_manager,
+ const CORBA::PolicyList &policies
+
+ );
+
+ PortableServer::POA_ptr find_POA (const char *adapter_name,
+ CORBA::Boolean activate_it
+ );
+#endif
+
+ void destroy (CORBA::Boolean etherealize_objects,
+ CORBA::Boolean wait_for_completion
+ );
+
+#if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
+ PortableServer::ThreadPolicy_ptr create_thread_policy (
+ PortableServer::ThreadPolicyValue value
+
+ );
+#endif /* TAO_HAS_MINIMUM_POA == 0 */
+
+#if !defined (CORBA_E_MICRO)
+ PortableServer::LifespanPolicy_ptr create_lifespan_policy (
+ PortableServer::LifespanPolicyValue value
+
+ );
+#endif
+
+#if !defined (CORBA_E_MICRO)
+ PortableServer::IdUniquenessPolicy_ptr create_id_uniqueness_policy (
+ PortableServer::IdUniquenessPolicyValue value
+
+ );
+#endif
+
+#if !defined (CORBA_E_MICRO)
+ PortableServer::IdAssignmentPolicy_ptr create_id_assignment_policy (
+ PortableServer::IdAssignmentPolicyValue value
+
+ );
+#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
+
+ );
+
+ PortableServer::ServantRetentionPolicy_ptr
+ create_servant_retention_policy (
+ PortableServer::ServantRetentionPolicyValue value
+
+ );
+
+ PortableServer::RequestProcessingPolicy_ptr
+ create_request_processing_policy (
+ PortableServer::RequestProcessingPolicyValue value
+
+ );
+
+#endif /* TAO_HAS_MINIMUM_POA == 0 && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO) */
+
+ char * the_name (void);
+
+ PortableServer::POA_ptr the_parent (void);
+
+ PortableServer::POAList *the_children (
+ void
+ );
+
+ PortableServer::POAManager_ptr the_POAManager (
+ void);
+
+#if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
+ PortableServer::POAManagerFactory_ptr the_POAManagerFactory (
+ void);
+#endif
+
+ /// This method returns the adapter_name as a sequence of strings of
+ /// length one or more or just a fixed name depending on the Object
+ /// Adapter. Added wrt to ORT Spec.
+ PortableInterceptor::AdapterName *adapter_name (void);
+
+ /// Store the given TaggedComponent for eventual insertion into all
+ /// object reference profiles.
+ void save_ior_component (const IOP::TaggedComponent &component
+ );
+
+ /// Store the given TaggedComponent for eventual insertion into all
+ /// object reference profiles with the given ProfileId.
+ void save_ior_component_and_profile_id (
+ const IOP::TaggedComponent &component,
+ IOP::ProfileId profile_id
+ );
+
+#if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
+ PortableServer::AdapterActivator_ptr the_activator (
+ void);
+
+ void the_activator (PortableServer::AdapterActivator_ptr adapter_activator
+ );
+
+ PortableServer::ServantManager_ptr get_servant_manager (
+ void);
+
+ void set_servant_manager (PortableServer::ServantManager_ptr imgr
+ );
+
+ PortableServer::Servant get_servant (void);
+
+ void set_servant (PortableServer::Servant servant
+ );
+#endif /* TAO_HAS_MINIMUM_POA == 0 !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO) */
+
+ PortableServer::ObjectId *activate_object (PortableServer::Servant p_servant
+ );
+
+#if !defined (CORBA_E_MICRO)
+ void activate_object_with_id (const PortableServer::ObjectId &id,
+ PortableServer::Servant p_servant
+ );
+#endif
+
+ void deactivate_object (const PortableServer::ObjectId &oid
+ );
+
+ CORBA::Object_ptr create_reference (const char *intf
+ );
+
+ CORBA::Object_ptr create_reference_with_id (
+ const PortableServer::ObjectId &oid,
+ const char *intf
+
+ );
+
+ PortableServer::ObjectId *servant_to_id (PortableServer::Servant p_servant
+ );
+
+ PortableServer::ObjectId *servant_to_user_id (PortableServer::Servant p_servant
+ );
+
+ CORBA::Object_ptr servant_to_reference (PortableServer::Servant p_servant
+ );
+
+ PortableServer::Servant reference_to_servant (
+ CORBA::Object_ptr reference
+
+ );
+
+ PortableServer::ObjectId *reference_to_id (CORBA::Object_ptr reference
+ );
+
+ PortableServer::Servant id_to_servant (const PortableServer::ObjectId &oid
+ );
+
+ CORBA::Object_ptr id_to_reference (const PortableServer::ObjectId &oid
+ );
+
+ CORBA::OctetSeq *id (void);
+
+ /// Accessor for POA policies.
+ TAO_POA_Policy_Set &policies (void);
+
+ /// Get the set policy of the given type.
+ CORBA::Policy_ptr get_policy (CORBA::PolicyType policy);
+
+ /// This method gives the policies that are exposed to the client.
+ /// These policies are shipped within the IOR.
+ virtual CORBA::PolicyList *client_exposed_policies (
+ CORBA::Short object_priority
+
+ );
+
+ TAO_Root_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
+ );
+
+ virtual ~TAO_Root_POA (void);
+
+ static char name_separator (void);
+
+ static CORBA::ULong name_separator_length (void);
+
+ enum
+ {
+ TAO_OBJECTKEY_PREFIX_SIZE = 4
+ };
+
+ static CORBA::Octet const objectkey_prefix[TAO_OBJECTKEY_PREFIX_SIZE];
+
+ const TAO_Object_Adapter::poa_name &folded_name (void) const;
+
+ const TAO_Object_Adapter::poa_name &system_name (void) const;
+
+ static void check_for_valid_wait_for_completions (
+ const TAO_ORB_Core &orb_core,
+ CORBA::Boolean wait_for_completion
+
+ );
+
+ /// ORB Core for POA.
+ TAO_ORB_Core &orb_core (void) const;
+
+ /// obtain a reference to the cached_profiles
+ TAO::Portable_Server::Cached_Policies& cached_policies (void);
+
+ /// obtain a handle to the network priority hooks
+ TAO_Network_Priority_Hook* network_priority_hook (void);
+
+ TAO::Portable_Server::Cached_Policies::PriorityModel priority_model (void) const;
+
+ CORBA::Boolean cleanup_in_progress (void);
+
+ /// Calls protected static method used when POACurrent is not appropriate.
+ static int parse_ir_object_key (const TAO::ObjectKey &object_key,
+ PortableServer::ObjectId &user_id);
+
+ TAO_Object_Adapter &object_adapter (void);
+
+ ACE_Lock &lock (void);
+
+ /// Create the correct stub, properly initialized with the
+ /// attributes and policies attached to the current POA.
+ TAO_Stub* key_to_stub (const TAO::ObjectKey &key,
+ const char *type_id,
+ CORBA::Short priority
+ );
+
+ /// Accessor methods to POA state.
+ /**
+ * The POA can be in one of HOLDING, ACTIVE, DISCARDING, INACTIVE
+ * and NON_EXISTENT states.
+ */
+ PortableInterceptor::AdapterState get_adapter_state (
+ void);
+
+ virtual void *thread_pool (void) const;
+
+ virtual CORBA::Policy *server_protocol (void);
+
+ CORBA::ULong outstanding_requests (void) const;
+
+ const ACE_CString &name (void) const;
+
+ CORBA::Boolean waiting_destruction (void) const;
+
+ static void ort_adapter_factory_name (const char *name);
+
+ static const char *ort_adapter_factory_name (void);
+
+ /// Sets the value of TAO_POA_Static_Resources::imr_client_adapter_name_.
+ static void imr_client_adapter_name (const char *name);
+
+ /// Gets the value of TAO_POA_Static_Resources::imr_client_adapter_name_.
+ static const char *imr_client_adapter_name (void);
+
+ CORBA::Object_ptr invoke_key_to_object (void);
+
+ CORBA::Boolean system_id (void);
+
+ CORBA::ULong waiting_servant_deactivation (void) const;
+
+ /// Return the POA Manager related to this POA
+ TAO_POA_Manager &tao_poa_manager ();
+
+ bool is_poa_generated (CORBA::Object_ptr reference,
+ PortableServer::ObjectId &system_id
+ );
+
+ /*
+ * Validate if the servant may be activated
+ * @retval true This servant may be activated
+ * @retval false This servant may not be activated
+ */
+ bool is_servant_activation_allowed (
+ PortableServer::Servant servant,
+ bool &wait_occurred_restart_call);
+
+ int rebind_using_user_id_and_system_id (
+ PortableServer::Servant servant,
+ const PortableServer::ObjectId &user_id,
+ const PortableServer::ObjectId &system_id,
+ TAO::Portable_Server::Servant_Upcall &servant_upcall);
+
+ CORBA::Boolean servant_has_remaining_activations (
+ PortableServer::Servant servant);
+
+ bool allow_implicit_activation (void) const;
+
+ bool allow_multiple_activations (void) const;
+
+ int is_servant_active (
+ PortableServer::Servant servant,
+ bool &wait_occurred_restart_call);
+
+ void deactivate_object_i (const PortableServer::ObjectId &oid
+ );
+
+ CORBA::Boolean is_persistent (void) const;
+
+ CORBA::Short server_priority (void) const;
+
+ bool has_system_id (void) const;
+
+ PortableServer::Servant find_servant (const PortableServer::ObjectId &system_id
+ );
+
+ TAO_SERVANT_LOCATION servant_present (
+ const PortableServer::ObjectId &system_id,
+ PortableServer::Servant &servant
+ );
+
+ PortableServer::Servant find_servant (
+ const PortableServer::ObjectId &system_id,
+ TAO::Portable_Server::Servant_Upcall &servant_upcall,
+ TAO::Portable_Server::POA_Current_Impl &poa_current_impl
+ );
+
+ /**
+ * Find the the servant with ObjectId <system_id>, and retrieve
+ * its priority.Usually used in RT CORBA with SERVER_DECLARED
+ * priority model.
+ *
+ * @return -1 if servant does not exist, else 0 indicating the
+ * servant exists and priority successfully retrieved.
+ */
+ int find_servant_priority (
+ const PortableServer::ObjectId &system_id,
+ CORBA::Short &priority
+ );
+
+ int unbind_using_user_id (const PortableServer::ObjectId &user_id);
+
+ void cleanup_servant (
+ PortableServer::Servant servant,
+ const PortableServer::ObjectId &user_id
+ );
+
+ void post_invoke_servant_cleanup(
+ const PortableServer::ObjectId &system_id,
+ const TAO::Portable_Server::Servant_Upcall &servant_upcall);
+
+ bool validate_lifespan (
+ CORBA::Boolean is_persistent,
+ const TAO::Portable_Server::Temporary_Creation_Time& creation_time) const;
+
+ PortableServer::ObjectId *activate_object_i (
+ PortableServer::Servant p_servant,
+ CORBA::Short priority,
+ bool &wait_occurred_restart_call
+
+ );
+
+ CORBA::Object_ptr id_to_reference_i (const PortableServer::ObjectId &oid,
+ bool indirect
+ );
+
+ PortableServer::ObjectId *servant_to_id_i (PortableServer::Servant servant
+ );
+
+ TAO_SYNCH_CONDITION &servant_deactivation_condition (void);
+
+ int is_poa_generated_id (const PortableServer::ObjectId &id);
+
+ /// Check the state of this POA
+ void check_state (void);
+
+ int delete_child (const String &child);
+
+ PortableServer::Servant user_id_to_servant_i (const PortableServer::ObjectId &oid
+ );
+
+ virtual CORBA::ORB_ptr _get_orb (
+
+ );
+
+ /// These hooks are needed by the CSD strategy to override
+ /// and no-ops by default.
+
+ /// Hook - The POA has been (or is being) activated.
+ virtual void poa_activated_hook ();
+
+ /// Hook - The POA has been deactivated.
+ virtual void poa_deactivated_hook ();
+
+ /// Hook - A servant has been activated.
+ virtual void servant_activated_hook (PortableServer::Servant servant,
+ const PortableServer::ObjectId& oid
+ );
+
+ /// Hook - A servant has been deactivated.
+ virtual void servant_deactivated_hook (PortableServer::Servant servant,
+ const PortableServer::ObjectId& oid
+ );
+
+protected:
+
+#if (TAO_HAS_MINIMUM_POA == 0)
+ int enter (void);
+
+ int exit (void);
+#endif /* TAO_HAS_MINIMUM_POA == 0 */
+
+ /// 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
+ );
+
+#if ! defined (CORBA_E_MICRO)
+ PortableServer::POA_ptr create_POA_i (
+ const char *adapter_name,
+ PortableServer::POAManager_ptr poa_manager,
+ const CORBA::PolicyList &policies
+
+ );
+
+ PortableServer::POA_ptr create_POA_i (const String &adapter_name,
+ PortableServer::POAManager_ptr poa_manager,
+ const TAO_POA_Policy_Set &policies
+ );
+
+ TAO_Root_POA *find_POA_i (const ACE_CString &child_name,
+ CORBA::Boolean activate_it
+ );
+#endif
+
+ void destroy_i (CORBA::Boolean etherealize_objects,
+ CORBA::Boolean wait_for_completion
+ );
+
+ void complete_destruction_i (void);
+
+ PortableServer::POAList *the_children_i (void);
+
+ /// This method returns the adapter_name as a sequence of strings of
+ /// length one or more or just a fixed name depending on the Object
+ /// Adapter. Added wrt to ORT Spec.
+ PortableInterceptor::AdapterName *adapter_name_i (void);
+
+ /// Method to notify the IOR Interceptors when there is a state
+ /// changed not related to POAManager.
+ void adapter_state_changed (
+ const TAO::ORT_Array &array_obj_ref_template,
+ PortableInterceptor::AdapterState state
+ );
+
+ /// Add the given tagged component to all profiles.
+ void add_ior_component (TAO_MProfile & mprofile,
+ const IOP::TaggedComponent & component
+ );
+
+ /// Add the given tagged component to all profiles matching the given
+ /// ProfileId.
+ void add_ior_component_to_profile (TAO_MProfile & mprofile,
+ const IOP::TaggedComponent & component,
+ IOP::ProfileId profile_id
+ );
+
+ /// Wrapper for the ORB's key_to_object that will alter the object pointer
+ /// if the ImplRepo is used.
+ CORBA::Object_ptr key_to_object (const TAO::ObjectKey &key,
+ const char *type_id,
+ TAO_ServantBase *servant,
+ CORBA::Boolean collocated,
+ CORBA::Short priority,
+ bool indirect
+ );
+
+ /// Like key_to_stub() but assume that the ORB is not shutting down.
+ virtual TAO_Stub* key_to_stub_i (const TAO::ObjectKey &key,
+ const char *type_id,
+ CORBA::Short priority
+ );
+
+ TAO_Stub *create_stub_object (const TAO::ObjectKey &object_key,
+ const char *type_id,
+ CORBA::PolicyList *policy_list,
+ TAO_Acceptor_Filter *filter,
+ TAO_Acceptor_Registry &acceptor_registry
+ );
+
+ PortableServer::Servant get_servant_i (void);
+
+protected:
+#if !defined (CORBA_E_MICRO)
+ void activate_object_with_id_i (const PortableServer::ObjectId &id,
+ PortableServer::Servant p_servant,
+ CORBA::Short priority,
+ bool &wait_occurred_restart_call
+ );
+#endif
+
+ virtual void remove_from_parent_i (void);
+
+ void deactivate_all_objects_i (CORBA::Boolean etherealize_objects
+ );
+
+ void deactivate_all_objects_i (CORBA::Boolean etherealize_objects,
+ CORBA::Boolean wait_for_completion
+ );
+
+ void wait_for_completions (CORBA::Boolean wait_for_completion
+ );
+
+ CORBA::Object_ptr create_reference_i (const char *intf,
+ CORBA::Short priority
+ );
+
+ CORBA::Object_ptr create_reference_with_id_i (
+ const PortableServer::ObjectId &oid,
+ const char *intf,
+ CORBA::Short priority
+
+ );
+
+ PortableServer::Servant reference_to_servant_i (
+ CORBA::Object_ptr reference
+
+ );
+
+ CORBA::Object_ptr servant_to_reference_i (PortableServer::Servant p_servant
+ );
+
+ PortableServer::Servant id_to_servant_i (const PortableServer::ObjectId &oid
+ );
+
+ /// Call the IORInterceptor::establish_components() method on all
+ /// registered IORInterceptors.
+ /**
+ * This method calls IORInterceptor::establish_components() method
+ * on all registered IORInterceptors, and
+ * IORInterceptor::components_established() once the former is
+ * completed.
+ */
+ void establish_components (void);
+
+ /// Call the IORInterceptor::components_established() method on all
+ /// registered IORInterceptors.
+ void components_established (PortableInterceptor::IORInfo_ptr info
+ );
+
+ void set_folded_name (TAO_Root_POA *parent);
+
+ void set_id (TAO_Root_POA *parent);
+
+ TAO::ObjectKey *create_object_key (const PortableServer::ObjectId &id);
+
+ static int parse_key (const TAO::ObjectKey &key,
+ TAO_Object_Adapter::poa_name &poa_system_name,
+ PortableServer::ObjectId &system_id,
+ CORBA::Boolean &is_root,
+ CORBA::Boolean &is_persistent,
+ CORBA::Boolean &is_system_id,
+ TAO::Portable_Server::Temporary_Creation_Time &poa_creation_time);
+
+protected:
+ /// Accessor methods to ObjectReferenceTemplate
+ PortableInterceptor::ObjectReferenceTemplate *
+ get_adapter_template (void);
+
+ /// Accessor methods to ObjectReferenceTemplate, non locked version
+ PortableInterceptor::ObjectReferenceTemplate *get_adapter_template_i (void);
+
+ /// Accessor methods to PortableInterceptor::ObjectReferenceFactory
+ PortableInterceptor::ObjectReferenceFactory *
+ get_obj_ref_factory (void);
+
+ /// Set the object reference factory
+ void set_obj_ref_factory (
+ PortableInterceptor::ObjectReferenceFactory *current_factory
+ );
+
+
+ TAO_SERVANT_LOCATION locate_servant_i (const PortableServer::ObjectId &id,
+ PortableServer::Servant &servant
+ );
+
+ PortableServer::Servant locate_servant_i (
+ const char *operation,
+ const PortableServer::ObjectId &id,
+ TAO::Portable_Server::Servant_Upcall &servant_upcall,
+ TAO::Portable_Server::POA_Current_Impl &poa_current_impl,
+ bool &wait_occurred_restart_call
+
+ );
+
+public:
+ // @todo Temporarily for servant retention
+ CORBA::Object_ptr
+ invoke_key_to_object_helper_i (const char * repository_id,
+ const PortableServer::ObjectId & id
+ );
+protected:
+
+ /// Get the ORT adapter, in case there is no adapter yet, this method will
+ /// try to create one and hold the POA lock
+ TAO::ORT_Adapter *ORT_adapter (void);
+
+ /// Get the ORT adapter, in case there is no adapter yet, this method will
+ /// try to create one but assumes the POA lock is already hold
+ TAO::ORT_Adapter *ORT_adapter_i (void);
+
+ TAO::ORT_Adapter_Factory *ORT_adapter_factory (void);
+
+ CORBA::Boolean persistent (void);
+
+ static char persistent_key_char (void);
+
+ static char transient_key_char (void);
+
+ static CORBA::ULong persistent_key_type_length (void);
+
+ static char system_id_key_char (void);
+
+ static char user_id_key_char (void);
+
+ static CORBA::ULong system_id_key_type_length (void);
+
+ virtual CORBA::Boolean root (void) const;
+
+ virtual char root_key_type (void);
+
+ static char root_key_char (void);
+
+ static char non_root_key_char (void);
+
+ static CORBA::ULong root_key_type_length (void);
+
+ void outstanding_requests (CORBA::ULong new_outstanding_requests);
+
+ CORBA::ULong increment_outstanding_requests (void);
+
+ CORBA::ULong decrement_outstanding_requests (void);
+
+ String name_;
+
+ /// Reference to the POAManager that this poa assicuates with.
+ TAO_POA_Manager &poa_manager_;
+
+#if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
+ /// Reference to the POAManagerFactory that generate the POAManager.
+ TAO_POAManager_Factory& poa_manager_factory_;
+#endif
+
+ IOP::TaggedComponentList tagged_component_;
+
+ IOP::TaggedComponentList tagged_component_id_;
+
+ ACE_Array_Base <IOP::ProfileId> profile_id_array_;
+
+ TAO_POA_Policy_Set policies_;
+
+ TAO_Object_Adapter::poa_name folded_name_;
+
+ TAO_Object_Adapter::poa_name_var system_name_;
+
+ CORBA::OctetSeq id_;
+
+ /// Pointer to the object reference template adapter.
+ TAO::ORT_Adapter *ort_adapter_;
+
+ /// Adapter can be accepting, rejecting etc.
+ PortableInterceptor::AdapterState adapter_state_;
+
+ TAO::Portable_Server::Cached_Policies cached_policies_;
+
+ TAO_Network_Priority_Hook *network_priority_hook_;
+
+ TAO::Portable_Server::Active_Policy_Strategies active_policy_strategies_;
+
+#if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
+ PortableServer::AdapterActivator_var adapter_activator_;
+#endif /* TAO_HAS_MINIMUM_POA == 0 !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO) */
+
+ typedef
+ ACE_Hash_Map_Manager_Ex<
+ ACE_CString, TAO_Root_POA *,
+ ACE_Hash<ACE_CString>,
+ ACE_Equal_To<ACE_CString>,
+ ACE_Null_Mutex
+ >
+ CHILDREN;
+
+ CHILDREN children_;
+
+ ACE_Lock &lock_;
+
+ TAO_ORB_Core &orb_core_;
+
+ /// The object adapter we belong to
+ TAO_Object_Adapter *object_adapter_;
+
+ CORBA::Boolean cleanup_in_progress_;
+
+ CORBA::ULong outstanding_requests_;
+
+ TAO_SYNCH_CONDITION outstanding_requests_condition_;
+
+ CORBA::Boolean wait_for_completion_pending_;
+
+ CORBA::Boolean waiting_destruction_;
+
+ TAO_SYNCH_CONDITION servant_deactivation_condition_;
+
+#if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
+ TAO_Acceptor_Filter_Factory * filter_factory_;
+#endif
+
+public:
+ // @todo Temporarily for servant retention
+ CORBA::ULong caller_key_to_object_;
+
+ PortableServer::Servant servant_for_key_to_object_;
+
+ struct Key_To_Object_Params
+ {
+ PortableServer::ObjectId_var *system_id_;
+ const char *type_id_;
+ TAO_ServantBase *servant_;
+ CORBA::Boolean collocated_;
+ CORBA::Short priority_;
+ bool indirect_;
+
+ void set (PortableServer::ObjectId_var &system_id_,
+ const char *type_id_,
+ TAO_ServantBase *servant_,
+ CORBA::Boolean collocated_,
+ CORBA::Short priority_,
+ bool indirect);
+ };
+
+ Key_To_Object_Params key_to_object_params_;
+};
+
+/**
+ * @class TAO_POA_Static_Resources
+ *
+ * @brief The static (global) resoures of all POA's.
+ *
+ * This class is used by the POA to store the resources global to
+ * all POA's. All instance variables that would have been
+ * declared "static" in TAO_Regular_POA, should be declared in this class
+ * to avoid the "static initialization order fiasco" as described in
+ * http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.11.
+ * Briefly, this is the problem that occurs if any static initializers
+ * in any other code call into set static members of TAO_Regular_POA.
+ * Since the order in which these initializers execute is unspecified,
+ * uninitialized members can be accessed.
+ */
+class TAO_PortableServer_Export TAO_POA_Static_Resources
+{
+public:
+
+ /// Return the singleton instance.
+ static TAO_POA_Static_Resources* instance (void);
+
+public:
+
+ /**
+ * Name of the factory object used to adapt function calls on the
+ * PortableInterceptor interfaces ORT. The default value is
+ * "ObjectReferenceTemplate_Adapter_Factory". If the ORT library is linked,
+ * the corresponding accessor function
+ * objectreferencefactory_adapter_factory_name() will be called to set
+ * the value to "Concrete_ObjectReferenceTemplate_Adapter_Factory".
+ */
+ ACE_CString ort_adapter_factory_name_;
+
+ /**
+ * Name of the service object for functions that make calls on
+ * the Implementation Repository. The default value is "ImR_Client_Adapter".
+ * If TAO_IMR_CLient is linked, imr_client_adapter_name() will be
+ * called to set the value to "Concrete_ImR_Client_Adapter".
+ */
+ ACE_CString imr_client_adapter_name_;
+private:
+ /// Constructor.
+ TAO_POA_Static_Resources (void);
+
+private:
+ /// The singleton instance.
+ static TAO_POA_Static_Resources* instance_;
+
+ /// Mostly unused variable whose sole purpose is to enforce
+ /// the instantiation of a TAO_POA_Static_Resources instance
+ /// at initialization time.
+ static TAO_POA_Static_Resources* initialization_reference_;
+};
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+// ****************************************************************
+
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif /* _MSC_VER */
+
+#if defined (__ACE_INLINE__)
+# include "tao/PortableServer/Root_POA.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_ROOT_POA_H */