summaryrefslogtreecommitdiff
path: root/TAO/tao/PortableServer/POA.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/PortableServer/POA.h')
-rw-r--r--TAO/tao/PortableServer/POA.h1078
1 files changed, 1078 insertions, 0 deletions
diff --git a/TAO/tao/PortableServer/POA.h b/TAO/tao/PortableServer/POA.h
new file mode 100644
index 00000000000..ee65b68f88e
--- /dev/null
+++ b/TAO/tao/PortableServer/POA.h
@@ -0,0 +1,1078 @@
+// -*- C++ -*-
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO
+//
+// = FILENAME
+// POA.h
+//
+// = DESCRIPTION
+// POA
+//
+// = AUTHOR
+// Irfan Pyarali
+//
+// ============================================================================
+
+#ifndef TAO_POA_H
+#define TAO_POA_H
+#include "ace/pre.h"
+
+// String
+#include "ace/SString.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+// Object Adapter
+#include "Object_Adapter.h"
+
+// POA Manager
+#include "POAManager.h"
+
+// Object_Key
+#include "tao/Object_KeyC.h"
+
+// RT CORBA
+#include "tao/RTCORBAC.h"
+
+// Local Object
+#include "tao/LocalObject.h"
+
+// Map
+#include "ace/Hash_Map_Manager.h"
+
+// Vector
+#include "ace/Containers.h"
+
+// Locking
+#include "ace/Synch.h"
+
+// This is to remove "inherits via dominance" warnings from MSVC.
+// MSVC is being a little too paranoid.
+#if defined(_MSC_VER)
+#if (_MSC_VER >= 1200)
+#pragma warning(push)
+#endif /* _MSC_VER >= 1200 */
+#pragma warning(disable:4250)
+#endif /* _MSC_VER */
+
+class TAO_POA;
+class TAO_ServerProtocolPolicy;
+
+#if (TAO_HAS_MINIMUM_POA == 0)
+
+class TAO_Export TAO_Thread_Policy :
+ public PortableServer::ThreadPolicy,
+ public TAO_Local_RefCounted_Object
+{
+public:
+ TAO_Thread_Policy (PortableServer::ThreadPolicyValue value);
+
+ PortableServer::ThreadPolicyValue value (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ CORBA::Policy_ptr copy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ void destroy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ CORBA::PolicyType policy_type (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+protected:
+ PortableServer::ThreadPolicyValue value_;
+};
+
+#endif /* TAO_HAS_MINIMUM_POA == 0 */
+
+class TAO_Export TAO_Lifespan_Policy :
+ public PortableServer::LifespanPolicy,
+ public TAO_Local_RefCounted_Object
+{
+public:
+ TAO_Lifespan_Policy (PortableServer::LifespanPolicyValue value);
+
+ PortableServer::LifespanPolicyValue value (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ CORBA::Policy_ptr copy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ void destroy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ CORBA::PolicyType policy_type (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+protected:
+ PortableServer::LifespanPolicyValue value_;
+};
+
+class TAO_Export TAO_Id_Uniqueness_Policy :
+ public PortableServer::IdUniquenessPolicy,
+ public TAO_Local_RefCounted_Object
+{
+public:
+ TAO_Id_Uniqueness_Policy (PortableServer::IdUniquenessPolicyValue value);
+
+ PortableServer::IdUniquenessPolicyValue value (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ CORBA::Policy_ptr copy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ void destroy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ CORBA::PolicyType policy_type (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+protected:
+ PortableServer::IdUniquenessPolicyValue value_;
+};
+
+class TAO_Export TAO_Id_Assignment_Policy :
+ public PortableServer::IdAssignmentPolicy,
+ public TAO_Local_RefCounted_Object
+{
+public:
+ TAO_Id_Assignment_Policy (PortableServer::IdAssignmentPolicyValue value);
+
+ PortableServer::IdAssignmentPolicyValue value (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ CORBA::Policy_ptr copy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ void destroy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ CORBA::PolicyType policy_type (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+protected:
+ PortableServer::IdAssignmentPolicyValue value_;
+};
+
+#if (TAO_HAS_MINIMUM_POA == 0)
+
+class TAO_Export TAO_Implicit_Activation_Policy :
+ public PortableServer::ImplicitActivationPolicy,
+ public TAO_Local_RefCounted_Object
+{
+public:
+ TAO_Implicit_Activation_Policy (PortableServer::ImplicitActivationPolicyValue value);
+
+ PortableServer::ImplicitActivationPolicyValue value (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ CORBA::Policy_ptr copy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ void destroy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ CORBA::PolicyType policy_type (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+protected:
+ PortableServer::ImplicitActivationPolicyValue value_;
+};
+
+class TAO_Export TAO_Servant_Retention_Policy :
+ public PortableServer::ServantRetentionPolicy,
+ public TAO_Local_RefCounted_Object
+{
+public:
+ TAO_Servant_Retention_Policy (PortableServer::ServantRetentionPolicyValue value);
+
+ PortableServer::ServantRetentionPolicyValue value (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ CORBA::Policy_ptr copy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ void destroy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ CORBA::PolicyType policy_type (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+protected:
+ PortableServer::ServantRetentionPolicyValue value_;
+};
+
+class TAO_Export TAO_Request_Processing_Policy :
+ public PortableServer::RequestProcessingPolicy,
+ public TAO_Local_RefCounted_Object
+{
+public:
+ TAO_Request_Processing_Policy (PortableServer::RequestProcessingPolicyValue value);
+
+ PortableServer::RequestProcessingPolicyValue value (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ CORBA::Policy_ptr copy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ void destroy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ CORBA::PolicyType policy_type (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+protected:
+ PortableServer::RequestProcessingPolicyValue value_;
+};
+
+#endif /* TAO_HAS_MINIMUM_POA == 0 */
+
+class TAO_Export TAO_POA_Policies
+{
+public:
+
+ enum PriorityModel
+ {
+ CLIENT_PROPAGATED,
+ SERVER_DECLARED
+ };
+
+ TAO_POA_Policies (TAO_ORB_Core &orb_core,
+ CORBA::Environment &ACE_TRY_ENV);
+
+ TAO_POA_Policies (const TAO_POA_Policies &rhs);
+
+ ~TAO_POA_Policies (void);
+
+ PortableServer::ThreadPolicyValue thread (void) const;
+ void thread (PortableServer::ThreadPolicyValue value);
+
+ PortableServer::LifespanPolicyValue lifespan (void) const;
+ void lifespan (PortableServer::LifespanPolicyValue value);
+
+ PortableServer::IdUniquenessPolicyValue id_uniqueness (void) const;
+ void id_uniqueness (PortableServer::IdUniquenessPolicyValue value);
+
+ PortableServer::IdAssignmentPolicyValue id_assignment (void) const;
+ void id_assignment (PortableServer::IdAssignmentPolicyValue value);
+
+ PortableServer::ImplicitActivationPolicyValue implicit_activation (void) const;
+ void implicit_activation (PortableServer::ImplicitActivationPolicyValue value);
+
+ PortableServer::ServantRetentionPolicyValue servant_retention (void) const;
+ void servant_retention (PortableServer::ServantRetentionPolicyValue value);
+
+ PortableServer::RequestProcessingPolicyValue request_processing (void) const;
+ void request_processing (PortableServer::RequestProcessingPolicyValue value);
+
+ PriorityModel priority_model (void) const;
+ void priority_model (PriorityModel value);
+
+ CORBA::Short server_priority (void) const;
+ void server_priority (CORBA::Short value);
+
+#if (TAO_HAS_RT_CORBA == 1)
+
+ TAO_ServerProtocolPolicy *server_protocol (void) const;
+ void server_protocol (TAO_ServerProtocolPolicy *policy);
+
+#endif /* TAO_HAS_RT_CORBA == 1 */
+
+ void parse_policies (const CORBA::PolicyList &policies,
+ CORBA_Environment &ACE_TRY_ENV);
+
+ const CORBA::PolicyList &client_exposed_fixed_policies (void) const;
+
+protected:
+
+ void parse_policy (const CORBA::Policy_ptr policy,
+ CORBA_Environment &ACE_TRY_ENV);
+
+ int validity_check (void);
+
+ int validate_priority_model (void);
+
+ int validate_server_protocol (void);
+
+#if (TAO_HAS_RT_CORBA == 1)
+
+ int validate_client_protocol (RTCORBA::ClientProtocolPolicy_ptr);
+
+ int validate_priority_bands (RTCORBA::PriorityBandedConnectionPolicy_ptr);
+
+#endif /* TAO_HAS_RT_CORBA == 1 */
+
+ PortableServer::ThreadPolicyValue thread_;
+
+ PortableServer::LifespanPolicyValue lifespan_;
+
+ PortableServer::IdUniquenessPolicyValue id_uniqueness_;
+
+ PortableServer::IdAssignmentPolicyValue id_assignment_;
+
+ PortableServer::ImplicitActivationPolicyValue implicit_activation_;
+
+ PortableServer::ServantRetentionPolicyValue servant_retention_;
+
+ PortableServer::RequestProcessingPolicyValue request_processing_;
+
+ PriorityModel priority_model_;
+
+ CORBA::Short server_priority_;
+
+#if (TAO_HAS_RT_CORBA == 1)
+
+ TAO_ServerProtocolPolicy *server_protocol_;
+
+#endif /* TAO_HAS_RT_CORBA == 1 */
+
+ CORBA::PolicyList client_exposed_fixed_policies_;
+};
+
+class TAO_Temporary_Creation_Time;
+
+class TAO_Creation_Time
+{
+public:
+
+ TAO_Creation_Time (const ACE_Time_Value &creation_time);
+
+ TAO_Creation_Time (void);
+
+ void creation_time (const void *creation_time);
+
+ const void *creation_time (void) const;
+
+ static CORBA::ULong creation_time_length (void);
+
+ int operator== (const TAO_Creation_Time &rhs) const;
+
+ int operator!= (const TAO_Creation_Time &rhs) const;
+
+ int operator== (const TAO_Temporary_Creation_Time &rhs) const;
+
+ int operator!= (const TAO_Temporary_Creation_Time &rhs) const;
+
+protected:
+
+ enum
+ {
+ SEC_FIELD = 0,
+ USEC_FIELD = 1
+ };
+
+ // Timestamp
+ CORBA::ULong time_stamp_[2];
+
+};
+
+// Special creation time only useful in the lifetime of the upcall
+class TAO_Temporary_Creation_Time
+{
+public:
+
+ TAO_Temporary_Creation_Time (void);
+
+ void creation_time (const void *creation_time);
+
+ int operator== (const TAO_Creation_Time &rhs) const;
+
+ int operator!= (const TAO_Creation_Time &rhs) const;
+
+protected:
+
+ void *time_stamp_;
+};
+
+// Forward Declaration
+class ServerObject_i;
+
+class TAO_Export TAO_POA :
+ public PortableServer::POA,
+ public TAO_Local_RefCounted_Object
+{
+public:
+
+ friend class TAO_Object_Adapter;
+ friend class TAO_Object_Adapter::Servant_Upcall;
+ friend class TAO_POA_Current_Impl;
+ friend class TAO_POA_Manager;
+
+#if (TAO_HAS_RT_CORBA == 1)
+
+ friend class TAO_Object_Adapter::Priority_Model_Processing;
+
+#endif /* TAO_HAS_RT_CORBA == 1 */
+
+ typedef ACE_CString String;
+
+ PortableServer::POA_ptr create_POA (const char *adapter_name,
+ PortableServer::POAManager_ptr poa_manager,
+ const CORBA::PolicyList &policies,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::AdapterAlreadyExists,
+ PortableServer::POA::InvalidPolicy));
+
+ PortableServer::POA_ptr find_POA (const char *adapter_name,
+ CORBA::Boolean activate_it,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::AdapterNonExistent));
+
+ void destroy (CORBA::Boolean etherealize_objects,
+ CORBA::Boolean wait_for_completion,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+#if (TAO_HAS_MINIMUM_POA == 0)
+
+ PortableServer::ThreadPolicy_ptr create_thread_policy (PortableServer::ThreadPolicyValue value,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+#endif /* TAO_HAS_MINIMUM_POA == 0 */
+
+ PortableServer::LifespanPolicy_ptr create_lifespan_policy (PortableServer::LifespanPolicyValue value,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ PortableServer::IdUniquenessPolicy_ptr create_id_uniqueness_policy (PortableServer::IdUniquenessPolicyValue value,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ PortableServer::IdAssignmentPolicy_ptr create_id_assignment_policy (PortableServer::IdAssignmentPolicyValue value,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+#if (TAO_HAS_MINIMUM_POA == 0)
+
+ PortableServer::ImplicitActivationPolicy_ptr create_implicit_activation_policy (PortableServer::ImplicitActivationPolicyValue value,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ PortableServer::ServantRetentionPolicy_ptr create_servant_retention_policy (PortableServer::ServantRetentionPolicyValue value,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ PortableServer::RequestProcessingPolicy_ptr create_request_processing_policy (PortableServer::RequestProcessingPolicyValue value,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+#endif /* TAO_HAS_MINIMUM_POA == 0 */
+
+ char * the_name (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ PortableServer::POA_ptr the_parent (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ PortableServer::POAList *the_children (CORBA::Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ PortableServer::POAManager_ptr the_POAManager (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+#if (TAO_HAS_MINIMUM_POA == 0)
+
+ PortableServer::AdapterActivator_ptr the_activator (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ void the_activator (PortableServer::AdapterActivator_ptr adapter_activator,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ PortableServer::ServantManager_ptr get_servant_manager (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::WrongPolicy));
+
+ void set_servant_manager (PortableServer::ServantManager_ptr imgr,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::WrongPolicy));
+
+ PortableServer::Servant get_servant (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::NoServant,
+ PortableServer::POA::WrongPolicy));
+
+ void set_servant (PortableServer::Servant servant,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::WrongPolicy));
+
+#endif /* TAO_HAS_MINIMUM_POA == 0 */
+
+ PortableServer::ObjectId *activate_object (PortableServer::Servant p_servant,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::ServantAlreadyActive,
+ PortableServer::POA::WrongPolicy));
+
+ void activate_object_with_id (const PortableServer::ObjectId &id,
+ PortableServer::Servant p_servant,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::ServantAlreadyActive,
+ PortableServer::POA::ObjectAlreadyActive,
+ PortableServer::POA::WrongPolicy));
+
+ void deactivate_object (const PortableServer::ObjectId &oid,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::ObjectNotActive,
+ PortableServer::POA::WrongPolicy));
+
+ CORBA::Object_ptr create_reference (const char *intf,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::WrongPolicy));
+
+ CORBA::Object_ptr create_reference_with_id (const PortableServer::ObjectId &oid,
+ const char *intf,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::WrongPolicy));
+
+ PortableServer::ObjectId *servant_to_id (PortableServer::Servant p_servant,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::ServantNotActive,
+ PortableServer::POA::WrongPolicy));
+
+ CORBA::Object_ptr servant_to_reference (PortableServer::Servant p_servant,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::ServantNotActive,
+ PortableServer::POA::WrongPolicy));
+
+ PortableServer::Servant reference_to_servant (CORBA::Object_ptr reference,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::ObjectNotActive,
+ PortableServer::POA::WrongPolicy));
+
+ PortableServer::ObjectId *reference_to_id (CORBA::Object_ptr reference,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::WrongAdapter,
+ PortableServer::POA::WrongPolicy));
+
+ PortableServer::Servant id_to_servant (const PortableServer::ObjectId &oid,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::ObjectNotActive,
+ PortableServer::POA::WrongPolicy));
+
+ CORBA::Object_ptr id_to_reference (const PortableServer::ObjectId &oid,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::ObjectNotActive,
+ PortableServer::POA::WrongPolicy));
+
+#if (TAO_HAS_RT_CORBA == 1)
+
+ CORBA::Object_ptr create_reference_with_priority (const char * intf,
+ RTCORBA::Priority priority,
+ CORBA::Environment &ACE_TRY_ENV = TAO_default_environment ())
+ 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,
+ CORBA::Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::WrongPolicy));
+
+ PortableServer::ObjectId * activate_object_with_priority (PortableServer::Servant p_servant,
+ RTCORBA::Priority priority,
+ CORBA::Environment &ACE_TRY_ENV = TAO_default_environment ())
+ 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,
+ CORBA::Environment &ACE_TRY_ENV = TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::ServantAlreadyActive,
+ PortableServer::POA::ObjectAlreadyActive,
+ PortableServer::POA::WrongPolicy));
+
+#endif /* TAO_HAS_RT_CORBA == 1 */
+
+ TAO_POA_Policies &policies (void);
+ // Accessor for POA policies.
+
+ CORBA::PolicyList *client_exposed_policies (CORBA::Short object_priority,
+ CORBA_Environment &ACE_TRY_ENV);
+ // This method gives the policies that are exposed to the client.
+ // These policies are shipped within the IOR.
+
+#if (TAO_HAS_MINIMUM_CORBA == 0)
+
+ //
+ // Forwarding related.
+ //
+ void forward_object (const PortableServer::ObjectId &oid,
+ CORBA::Object_ptr forward_to,
+ CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ());
+
+#endif /* TAO_HAS_MINIMUM_CORBA */
+
+ // Utility functions for the other
+ static char* ObjectId_to_string (const PortableServer::ObjectId &id);
+
+ static CORBA::WChar* ObjectId_to_wstring (const PortableServer::ObjectId &id);
+
+ static PortableServer::ObjectId *string_to_ObjectId (const char *id);
+
+ static PortableServer::ObjectId *string_to_ObjectId (const char *string,
+ int size);
+
+ static PortableServer::ObjectId *wstring_to_ObjectId (const CORBA::WChar *id);
+
+ TAO_POA (const String &name,
+ TAO_POA_Manager &poa_manager,
+ const TAO_POA_Policies &policies,
+ TAO_POA *parent,
+ ACE_Lock &lock,
+ ACE_SYNCH_MUTEX &thread_lock,
+ TAO_ORB_Core &orb_core,
+ TAO_Object_Adapter *object_adapter,
+ CORBA_Environment &ACE_TRY_ENV);
+
+ ~TAO_POA (void);
+
+ static char name_separator (void);
+
+ static CORBA::ULong name_separator_length (void);
+
+ enum
+ {
+ TAO_OBJECTKEY_PREFIX_SIZE = 4
+ };
+
+ static CORBA::Octet 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 (CORBA::Boolean wait_for_completion,
+ CORBA::Environment &ACE_TRY_ENV);
+
+ TAO_ORB_Core &orb_core (void) const;
+ // ORB Core for POA.
+
+ CORBA::Boolean cleanup_in_progress (void);
+
+ TAO_Object_Adapter &object_adapter (void);
+
+ ACE_Lock &lock (void);
+
+
+ TAO_Stub* key_to_stub (const TAO_ObjectKey &key,
+ const char *type_id,
+ CORBA::Short priority,
+ CORBA_Environment &ACE_TRY_ENV);
+ // Create the correct stub, properly initialized with the attributes
+ // and policies attached to the current POA.
+
+protected:
+
+ const ACE_CString &name (void) const;
+
+ PortableServer::POA_ptr create_POA_i (const char *adapter_name,
+ PortableServer::POAManager_ptr poa_manager,
+ const CORBA::PolicyList &policies,
+ CORBA_Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::AdapterAlreadyExists,
+ PortableServer::POA::InvalidPolicy));
+
+ TAO_POA *create_POA_i (const String &adapter_name,
+ TAO_POA_Manager &poa_manager,
+ const TAO_POA_Policies &policies,
+ CORBA_Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::AdapterAlreadyExists,
+ PortableServer::POA::InvalidPolicy));
+
+ TAO_POA *find_POA_i (const ACE_CString &child_name,
+ CORBA::Boolean activate_it,
+ CORBA::Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::AdapterNonExistent));
+
+ void destroy_i (CORBA::Boolean etherealize_objects,
+ CORBA::Boolean wait_for_completion,
+ CORBA_Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ void complete_destruction_i (CORBA::Environment &ACE_TRY_ENV);
+
+ PortableServer::POAList *the_children_i (CORBA::Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+#if (TAO_HAS_MINIMUM_POA == 0)
+
+ PortableServer::ServantManager_ptr get_servant_manager_i (CORBA_Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::WrongPolicy));
+
+ void set_servant_manager_i (PortableServer::ServantManager_ptr imgr,
+ CORBA_Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::WrongPolicy));
+
+ PortableServer::Servant get_servant_i (CORBA_Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::NoServant,
+ PortableServer::POA::WrongPolicy));
+
+ void set_servant_i (PortableServer::Servant servant,
+ CORBA_Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::WrongPolicy));
+
+#endif /* TAO_HAS_MINIMUM_POA == 0 */
+
+//
+// ImplRepo related.
+//
+#if (TAO_HAS_MINIMUM_CORBA == 0)
+
+ void imr_notify_startup (CORBA_Environment &ACE_TRY_ENV);
+ // ImplRepo helper method, notify the ImplRepo on startup
+
+ void imr_notify_shutdown (void);
+ // ImplRepo helper method, notify the ImplRepo on shutdown
+
+#endif /* TAO_HAS_MINIMUM_CORBA */
+
+ CORBA::Object_ptr key_to_object (const TAO_ObjectKey &key,
+ const char *type_id,
+ TAO_ServantBase *servant,
+ CORBA::Boolean collocated,
+ CORBA::Short priority,
+ CORBA_Environment &ACE_TRY_ENV);
+ // Wrapper for the ORB's key_to_object that will alter the object pointer
+ // if the ImplRepo is used.
+
+ TAO_Stub* key_to_stub_i (const TAO_ObjectKey &key,
+ const char *type_id,
+ CORBA::Short priority,
+ CORBA_Environment &ACE_TRY_ENV);
+ // Like key_to_stub() but assume that the ORB is not shutting down.
+
+ int is_servant_in_map (PortableServer::Servant servant);
+
+ int is_user_id_in_map (const PortableServer::ObjectId &user_id,
+ CORBA::Short priority,
+ int &priorities_match);
+
+ PortableServer::ObjectId *activate_object_i (PortableServer::Servant p_servant,
+ CORBA::Short priority,
+ CORBA_Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::ServantAlreadyActive,
+ PortableServer::POA::WrongPolicy));
+
+ void activate_object_with_id_i (const PortableServer::ObjectId &id,
+ PortableServer::Servant p_servant,
+ CORBA::Short priority,
+ CORBA_Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::ServantAlreadyActive,
+ PortableServer::POA::ObjectAlreadyActive,
+ PortableServer::POA::WrongPolicy));
+
+ void deactivate_all_objects_i (CORBA::Boolean etherealize_objects,
+ CORBA::Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::WrongPolicy));
+
+ void deactivate_all_objects_i (CORBA::Boolean etherealize_objects,
+ CORBA::Boolean wait_for_completion,
+ CORBA::Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::WrongPolicy));
+
+ void wait_for_completions (CORBA::Boolean wait_for_completion,
+ CORBA::Environment &ACE_TRY_ENV);
+
+ void check_poa_manager_state (CORBA::Environment &ACE_TRY_ENV);
+
+ void deactivate_object_i (const PortableServer::ObjectId &oid,
+ CORBA_Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::ObjectNotActive,
+ PortableServer::POA::WrongPolicy));
+
+ void cleanup_servant (TAO_Active_Object_Map::Map_Entry *active_object_map_entry,
+ CORBA::Environment &ACE_TRY_ENV);
+
+ CORBA::Object_ptr create_reference_i (const char *intf,
+ CORBA::Short priority,
+ CORBA_Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::WrongPolicy));
+
+ CORBA::Object_ptr create_reference_with_id_i (const PortableServer::ObjectId &oid,
+ const char *intf,
+ CORBA::Short priority,
+ CORBA_Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::WrongPolicy));
+
+ PortableServer::ObjectId *servant_to_id_i (PortableServer::Servant servant,
+ CORBA_Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::ServantNotActive,
+ PortableServer::POA::WrongPolicy));
+
+ PortableServer::ObjectId *servant_to_system_id (PortableServer::Servant p_servant,
+ CORBA::Short &priority,
+ CORBA_Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::ServantNotActive,
+ PortableServer::POA::WrongPolicy));
+
+ PortableServer::ObjectId *servant_to_system_id_i (PortableServer::Servant p_servant,
+ CORBA::Short &priority,
+ CORBA_Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::ServantNotActive,
+ PortableServer::POA::WrongPolicy));
+
+ PortableServer::Servant id_to_servant_i (const PortableServer::ObjectId &oid,
+ CORBA_Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::ObjectNotActive,
+ PortableServer::POA::WrongPolicy));
+
+ CORBA::Object_ptr id_to_reference_i (const PortableServer::ObjectId &oid,
+ CORBA_Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableServer::POA::ObjectNotActive,
+ PortableServer::POA::WrongPolicy));
+//
+// Forwarding related.
+//
+#if (TAO_HAS_MINIMUM_CORBA == 0)
+
+ void forward_object_i (const PortableServer::ObjectId &oid,
+ CORBA::Object_ptr forward_to,
+ CORBA_Environment &ACE_TRY_ENV);
+
+#endif /* TAO_HAS_MINIMUM_CORBA */
+
+ TAO_Active_Object_Map &active_object_map (void) const;
+
+ int delete_child (const String &child);
+
+ void set_folded_name (void);
+
+ TAO_ObjectKey *create_object_key (const PortableServer::ObjectId &id);
+
+ int is_poa_generated_id (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_Temporary_Creation_Time &poa_creation_time);
+
+#if (TAO_HAS_RT_CORBA == 1)
+
+ int valid_priority (RTCORBA::Priority priority);
+
+ void validate_priority_and_policies (RTCORBA::Priority priority,
+ CORBA::Environment &ACE_TRY_ENV);
+
+
+#endif /* TAO_HAS_RT_CORBA == 1 */
+
+protected:
+
+ TAO_SERVANT_LOCATION locate_servant_i (const PortableServer::ObjectId &id,
+ PortableServer::Servant &servant,
+ CORBA_Environment &ACE_TRY_ENV);
+
+ PortableServer::Servant locate_servant_i (const char *operation,
+ const PortableServer::ObjectId &id,
+ TAO_Object_Adapter::Servant_Upcall &servant_upcall,
+ TAO_POA_Current_Impl &poa_current_impl,
+ CORBA_Environment &ACE_TRY_ENV);
+
+ const TAO_Creation_Time &creation_time (void);
+
+ CORBA::Boolean persistent (void);
+
+ char persistent_key_type (void);
+
+ static char persistent_key_char (void);
+
+ static char transient_key_char (void);
+
+ static CORBA::ULong persistent_key_type_length (void);
+
+ CORBA::Boolean system_id (void);
+
+ char system_id_key_type (void);
+
+ static char system_id_key_char (void);
+
+ static char user_id_key_char (void);
+
+ static CORBA::ULong system_id_key_type_length (void);
+
+ CORBA::Boolean root (void);
+
+ 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);
+
+ CORBA::ULong outstanding_requests (void) const;
+
+ void outstanding_requests (CORBA::ULong new_outstanding_requests);
+
+ CORBA::ULong increment_outstanding_requests (void);
+
+ CORBA::ULong decrement_outstanding_requests (void);
+
+ void establish_servant_lock (PortableServer::Servant servant);
+
+ void teardown_servant_lock (PortableServer::Servant servant);
+
+ String name_;
+
+ TAO_Object_Adapter::poa_name folded_name_;
+
+ TAO_Object_Adapter::poa_name_var system_name_;
+
+ TAO_POA_Manager &poa_manager_;
+
+ TAO_POA_Policies policies_;
+
+ TAO_POA *parent_;
+
+ TAO_Active_Object_Map *active_object_map_;
+
+ int delete_active_object_map_;
+
+#if (TAO_HAS_MINIMUM_POA == 0)
+
+ PortableServer::AdapterActivator_var adapter_activator_;
+
+ PortableServer::ServantActivator_var servant_activator_;
+
+ PortableServer::ServantLocator_var servant_locator_;
+
+ PortableServer::ServantBase_var default_servant_;
+
+#endif /* TAO_HAS_MINIMUM_POA == 0 */
+
+#if (TAO_HAS_MINIMUM_CORBA == 0)
+
+ ServerObject_i *server_object_;
+ // Implementation Repository Server Object
+
+ int use_imr_;
+ // Flag for whether the IR should be used or not.
+
+#endif /* TAO_HAS_MINIMUM_CORBA */
+
+ typedef ACE_Hash_Map_Manager<ACE_CString, TAO_POA *, ACE_Null_Mutex>
+ CHILDREN;
+
+ CHILDREN children_;
+
+ ACE_Lock &lock_;
+
+ int persistent_;
+
+ int system_id_;
+
+ TAO_Creation_Time creation_time_;
+
+ TAO_ORB_Core &orb_core_;
+
+ TAO_Object_Adapter *object_adapter_;
+ // The object adapter we belong to
+
+ CORBA::Boolean cleanup_in_progress_;
+
+ CORBA::Boolean etherealize_objects_;
+
+ CORBA::ULong outstanding_requests_;
+
+ ACE_SYNCH_CONDITION outstanding_requests_condition_;
+
+ CORBA::Boolean wait_for_completion_pending_;
+
+ CORBA::Boolean waiting_destruction_;
+
+ ACE_SYNCH_CONDITION servant_deactivation_condition_;
+
+ CORBA::ULong waiting_servant_deactivation_;
+};
+
+
+class TAO_POA_Guard
+{
+public:
+ TAO_POA_Guard (TAO_POA &poa,
+ CORBA::Environment &ACE_TRY_ENV,
+ int check_for_destruction = 1);
+
+private:
+ ACE_Guard<ACE_Lock> guard_;
+};
+
+#if (TAO_HAS_MINIMUM_POA == 0)
+
+class TAO_Export TAO_Adapter_Activator : public PortableServer::AdapterActivator
+{
+public:
+
+ TAO_Adapter_Activator (PortableServer::POAManager_ptr poa_manager);
+
+ CORBA::Boolean unknown_adapter (PortableServer::POA_ptr parent,
+ const char *name,
+ CORBA_Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+protected:
+
+ PortableServer::POAManager_var poa_manager_;
+ // POA Manager
+};
+
+#endif /* TAO_HAS_MINIMUM_POA == 0 */
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#pragma warning(pop)
+#endif /* _MSC_VER */
+
+#if defined (__ACE_INLINE__)
+# include "POA.i"
+#endif /* __ACE_INLINE__ */
+
+#include "ace/post.h"
+#endif /* TAO_POA_H */