TAO_Root_POA Class Reference

Implementation of the PortableServer::POA interface. More...

#include <Root_POA.h>

Inheritance diagram for TAO_Root_POA:

Inheritance graph
[legend]
Collaboration diagram for TAO_Root_POA:

Collaboration graph
[legend]
List of all members.

Public Types

typedef ACE_CString String
enum  { TAO_OBJECTKEY_PREFIX_SIZE = 4 }

Public Member Functions

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)
void destroy (CORBA::Boolean etherealize_objects, CORBA::Boolean wait_for_completion)
PortableServer::ThreadPolicy_ptr create_thread_policy (PortableServer::ThreadPolicyValue value)
PortableServer::LifespanPolicy_ptr create_lifespan_policy (PortableServer::LifespanPolicyValue value)
PortableServer::IdUniquenessPolicy_ptr create_id_uniqueness_policy (PortableServer::IdUniquenessPolicyValue value)
PortableServer::IdAssignmentPolicy_ptr create_id_assignment_policy (PortableServer::IdAssignmentPolicyValue value)
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)
char * the_name (void)
PortableServer::POA_ptr the_parent (void)
PortableServer::POAListthe_children (void)
PortableServer::POAManager_ptr the_POAManager (void)
PortableServer::POAManagerFactory_ptr the_POAManagerFactory (void)
PortableInterceptor::AdapterNameadapter_name (void)
void save_ior_component (const IOP::TaggedComponent &component)
void save_ior_component_and_profile_id (const IOP::TaggedComponent &component, IOP::ProfileId profile_id)
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)
PortableServer::ObjectIdactivate_object (PortableServer::Servant p_servant)
void activate_object_with_id (const PortableServer::ObjectId &id, PortableServer::Servant p_servant)
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::ObjectIdservant_to_id (PortableServer::Servant p_servant)
PortableServer::ObjectIdservant_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::ObjectIdreference_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::OctetSeqid (void)
TAO_POA_Policy_Setpolicies (void)
 Accessor for POA policies.

CORBA::Policy_ptr get_policy (CORBA::PolicyType policy)
 Get the set policy of the given type.

virtual CORBA::PolicyListclient_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)
const TAO_Object_Adapter::poa_namefolded_name (void) const
const TAO_Object_Adapter::poa_namesystem_name (void) const
TAO_ORB_Coreorb_core (void) const
 ORB Core for POA.

TAO::Portable_Server::Cached_Policiescached_policies (void)
 obtain a reference to the cached_profiles

TAO_Network_Priority_Hooknetwork_priority_hook (void)
 obtain a handle to the network priority hooks

TAO::Portable_Server::Cached_Policies::PriorityModel priority_model (void) const
CORBA::Boolean cleanup_in_progress (void)
TAO_Object_Adapterobject_adapter (void)
ACE_Locklock (void)
TAO_Stubkey_to_stub (const TAO::ObjectKey &key, const char *type_id, CORBA::Short priority)
PortableInterceptor::AdapterState get_adapter_state (void)
 Accessor methods to POA state.

virtual void * thread_pool (void) const
virtual CORBA::Policyserver_protocol (void)
CORBA::ULong outstanding_requests (void) const
const ACE_CStringname (void) const
CORBA::Boolean waiting_destruction (void) const
CORBA::Object_ptr invoke_key_to_object (void)
CORBA::Boolean system_id (void)
CORBA::ULong waiting_servant_deactivation (void) const
TAO_POA_Managertao_poa_manager ()
 Return the POA Manager related to this POA.

bool is_poa_generated (CORBA::Object_ptr reference, PortableServer::ObjectId &system_id)
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)
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::ObjectIdactivate_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::ObjectIdservant_to_id_i (PortableServer::Servant servant)
TAO_SYNCH_CONDITIONservant_deactivation_condition (void)
int is_poa_generated_id (const PortableServer::ObjectId &id)
void check_state (void)
 Check the state of this POA.

int delete_child (const String &child)
PortableServer::Servant user_id_to_servant_i (const PortableServer::ObjectId &oid)
virtual CORBA::ORB_ptr _get_orb (void)
virtual void poa_activated_hook ()
 Hook - The POA has been (or is being) activated.

virtual void poa_deactivated_hook ()
 Hook - The POA has been deactivated.

virtual void servant_activated_hook (PortableServer::Servant servant, const PortableServer::ObjectId &oid)
 Hook - A servant has been activated.

virtual void servant_deactivated_hook (PortableServer::Servant servant, const PortableServer::ObjectId &oid)
 Hook - A servant has been deactivated.

CORBA::Object_ptr invoke_key_to_object_helper_i (const char *repository_id, const PortableServer::ObjectId &id)

Static Public Member Functions

char name_separator (void)
CORBA::ULong name_separator_length (void)
void check_for_valid_wait_for_completions (const TAO_ORB_Core &orb_core, CORBA::Boolean wait_for_completion)
int parse_ir_object_key (const TAO::ObjectKey &object_key, PortableServer::ObjectId &user_id)
 Calls protected static method used when POACurrent is not appropriate.

void ort_adapter_factory_name (const char *name)
const char * ort_adapter_factory_name (void)
void imr_client_adapter_name (const char *name)
 Sets the value of TAO_POA_Static_Resources::imr_client_adapter_name_.

const char * imr_client_adapter_name (void)
 Gets the value of TAO_POA_Static_Resources::imr_client_adapter_name_.


Public Attributes

CORBA::ULong caller_key_to_object_
PortableServer::Servant servant_for_key_to_object_
Key_To_Object_Params key_to_object_params_

Static Public Attributes

CORBA::Octet const  objectkey_prefix [TAO_OBJECTKEY_PREFIX_SIZE]

Protected Types

typedef ACE_Hash_Map_Manager_Ex<
ACE_CString, TAO_Root_POA *,
ACE_Hash< ACE_CString >,
ACE_Equal_To< ACE_CString >,
ACE_Null_Mutex
CHILDREN

Protected Member Functions

int enter (void)
int exit (void)
virtual TAO_Root_POAnew_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)
 Template method for creating new POA's of this type.

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_POAfind_POA_i (const ACE_CString &child_name, CORBA::Boolean activate_it)
void destroy_i (CORBA::Boolean etherealize_objects, CORBA::Boolean wait_for_completion)
void complete_destruction_i (void)
PortableServer::POAListthe_children_i (void)
PortableInterceptor::AdapterNameadapter_name_i (void)
void adapter_state_changed (const TAO::ORT_Array &array_obj_ref_template, PortableInterceptor::AdapterState state)
void add_ior_component (TAO_MProfile &mprofile, const IOP::TaggedComponent &component)
 Add the given tagged component to all profiles.

void add_ior_component_to_profile (TAO_MProfile &mprofile, const IOP::TaggedComponent &component, IOP::ProfileId profile_id)
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)
virtual TAO_Stubkey_to_stub_i (const TAO::ObjectKey &key, const char *type_id, CORBA::Short priority)
 Like key_to_stub() but assume that the ORB is not shutting down.

TAO_Stubcreate_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)
void activate_object_with_id_i (const PortableServer::ObjectId &id, PortableServer::Servant p_servant, CORBA::Short priority, bool &wait_occurred_restart_call)
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)
void establish_components (void)
void components_established (PortableInterceptor::IORInfo_ptr info)
void set_folded_name (TAO_Root_POA *parent)
void set_id (TAO_Root_POA *parent)
TAO::ObjectKeycreate_object_key (const PortableServer::ObjectId &id)
PortableInterceptor::ObjectReferenceTemplate * get_adapter_template (void)
 Accessor methods to ObjectReferenceTemplate.

PortableInterceptor::ObjectReferenceTemplate * get_adapter_template_i (void)
 Accessor methods to ObjectReferenceTemplate, non locked version.

PortableInterceptor::ObjectReferenceFactory * get_obj_ref_factory (void)
 Accessor methods to PortableInterceptor::ObjectReferenceFactory.

void set_obj_ref_factory (PortableInterceptor::ObjectReferenceFactory *current_factory)
 Set the object reference 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)
TAO::ORT_AdapterORT_adapter (void)
TAO::ORT_AdapterORT_adapter_i (void)
TAO::ORT_Adapter_FactoryORT_adapter_factory (void)
CORBA::Boolean persistent (void)
virtual CORBA::Boolean root (void) const
virtual char root_key_type (void)
void outstanding_requests (CORBA::ULong new_outstanding_requests)
CORBA::ULong increment_outstanding_requests (void)
CORBA::ULong decrement_outstanding_requests (void)

Static Protected Member Functions

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)
char persistent_key_char (void)
char transient_key_char (void)
CORBA::ULong persistent_key_type_length (void)
char system_id_key_char (void)
char user_id_key_char (void)
CORBA::ULong system_id_key_type_length (void)
char root_key_char (void)
char non_root_key_char (void)
CORBA::ULong root_key_type_length (void)

Protected Attributes

String name_
TAO_POA_Managerpoa_manager_
 Reference to the POAManager that this poa assicuates with.

TAO_POAManager_Factorypoa_manager_factory_
 Reference to the POAManagerFactory that generate the POAManager.

IOP::TaggedComponentSeq tagged_component_
IOP::TaggedComponentSeq tagged_component_id_
ACE_Array_Base< IOP::ProfileIdprofile_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_
TAO::ORT_Adapterort_adapter_
 Pointer to the object reference template adapter.

PortableInterceptor::AdapterState adapter_state_
 Adapter can be accepting, rejecting etc.

TAO::Portable_Server::Cached_Policies cached_policies_
TAO_Network_Priority_Hooknetwork_priority_hook_
TAO::Portable_Server::Active_Policy_Strategies active_policy_strategies_
PortableServer::AdapterActivator_var adapter_activator_
CHILDREN children_
ACE_Locklock_
TAO_ORB_Coreorb_core_
TAO_Object_Adapterobject_adapter_
 The object adapter we belong to.

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_
TAO_Acceptor_Filter_Factoryfilter_factory_

Friends

class TAO_Object_Adapter
class TAO::Portable_Server::Servant_Upcall
class TAO::Portable_Server::Non_Servant_Upcall
class TAO_POA_Manager
class TAO_RT_Collocation_Resolver
class TAO_IORInfo

Detailed Description

Implementation of the PortableServer::POA interface.

Implementation of the PortableServer::POA interface.

Definition at line 114 of file Root_POA.h.


Member Typedef Documentation

typedef ACE_Hash_Map_Manager_Ex< ACE_CString, TAO_Root_POA *, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, ACE_Null_Mutex > TAO_Root_POA::CHILDREN [protected]
 

Definition at line 734 of file Root_POA.h.

typedef ACE_CString TAO_Root_POA::String
 

Definition at line 127 of file Root_POA.h.

Referenced by create_POA_i(), delete_child(), new_POA(), TAO_Object_Adapter::open(), TAO_Regular_POA::TAO_Regular_POA(), and TAO_Root_POA().


Member Enumeration Documentation

anonymous enum
 

Enumeration values:
TAO_OBJECTKEY_PREFIX_SIZE 

Definition at line 275 of file Root_POA.h.

00276   {
00277     TAO_OBJECTKEY_PREFIX_SIZE = 4
00278   };


Constructor & Destructor Documentation

TAO_Root_POA::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
 

Definition at line 186 of file Root_POA.cpp.

References TAO_Local_RefCounted_Object::_add_ref(), active_policy_strategies_, TAO_Object_Adapter::bind_poa(), TAO::Portable_Server::Cached_Policies::implicit_activation(), ACE_Dynamic_Service< TYPE >::instance(), TAO::Portable_Server::Active_Policy_Strategies::lifespan_strategy(), network_priority_hook_, object_adapter(), PortableServer::POAManager_ptr, TAO_POA_Manager::register_poa(), TAO_POA_Manager::remove_poa(), set_folded_name(), set_id(), ACE_OS::strcmp(), String, TAO_DEFAULT_ROOTPOA_NAME, TAO_HAS_MINIMUM_POA, TAO_Object_Adapter::unbind_poa(), TAO::Portable_Server::Active_Policy_Strategies::update(), TAO::Portable_Server::Cached_Policies::update(), and TAO_Network_Priority_Hook::update_network_priority().

00194   : name_ (name),
00195     poa_manager_ (* (dynamic_cast <TAO_POA_Manager*> (poa_manager))),
00196 
00197 #if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
00198     poa_manager_factory_ (* (object_adapter->poa_manager_factory_)),
00199 #endif
00200 
00201     tagged_component_ (),
00202     tagged_component_id_ (),
00203     profile_id_array_ (0),
00204     policies_ (policies),
00205     ort_adapter_ (0),
00206     adapter_state_ (PortableInterceptor::HOLDING),
00207     network_priority_hook_ (0),
00208 
00209 #if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
00210 
00211     adapter_activator_ (),
00212 
00213 #endif /* TAO_HAS_MINIMUM_POA == 0 */
00214 
00215     children_ (),
00216     lock_ (lock),
00217     orb_core_ (orb_core),
00218     object_adapter_ (object_adapter),
00219     cleanup_in_progress_ (0),
00220     outstanding_requests_ (0),
00221     outstanding_requests_condition_ (thread_lock),
00222     wait_for_completion_pending_ (0),
00223     waiting_destruction_ (0),
00224     servant_deactivation_condition_ (thread_lock),
00225 
00226 #if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
00227     filter_factory_ (0),
00228 #endif
00229 
00230     caller_key_to_object_ (0),
00231     servant_for_key_to_object_ (0)
00232 {
00233   // Since we are keeping a reference to a POAManager, we need to
00234   // increment the reference count
00235   this->poa_manager_._add_ref();
00236 
00237   // Parse the policies that are used in the critical path in
00238   // a cache.
00239   this->cached_policies_.update (this->policies_);
00240 
00241   this->network_priority_hook_
00242     = ACE_Dynamic_Service<TAO_Network_Priority_Hook>::instance (
00243         "TAO_Network_Priority_Hook");
00244 
00245   if (this->network_priority_hook_ != 0)
00246     {
00247       this->network_priority_hook_->update_network_priority (
00248         *this, this->policies_);
00249     }
00250 
00251 #if (TAO_HAS_MINIMUM_POA == 1)
00252   // If this is the RootPOA, set the value of the ImplicitActivationPolicy
00253   // to IMPLICIT_ACTIVATION since it is impossible to pass the policy
00254   // as it is not compiled into the library.
00255   //
00256   // If the ImplicitActivationPolicy policy is ever compiled in the
00257   // minimum POA builds, remove this code and remove the guards
00258   // in Object_Adapter.cpp when changing the default policy for the
00259   // RootPOA.
00260   if (ACE_OS::strcmp (this->name_.c_str (),
00261                       TAO_DEFAULT_ROOTPOA_NAME) == 0)
00262     {
00263       this->cached_policies_.implicit_activation
00264         (PortableServer::IMPLICIT_ACTIVATION);
00265     }
00266 #endif /* TAO_HAS_MINIMUM_POA == 1 */
00267 
00268   // Set the active strategies to be used by this POA
00269   this->active_policy_strategies_.update (this->cached_policies_,
00270                                           this);
00271 
00272   // Set the folded name of this POA.
00273   this->set_folded_name (parent);
00274 
00275   // Register self with manager.
00276   int result = this->poa_manager_.register_poa (this);
00277   if (result != 0)
00278     {
00279       throw ::CORBA::OBJ_ADAPTER ();
00280     }
00281 
00282   // Add self to Object Adapter class.
00283   result =
00284     this->object_adapter ().bind_poa (this->folded_name_,
00285                                       this,
00286                                       this->system_name_.out ());
00287   if (result != 0)
00288     {
00289       // Remove from POA Manager in case of errors. No checks of
00290       // further errors...
00291       this->poa_manager_.remove_poa (this);
00292 
00293       throw ::CORBA::OBJ_ADAPTER ();
00294     }
00295 
00296   // Set the id for this POA.
00297   this->set_id (parent);
00298 
00299   // Notify the Lifespan strategy of our startup
00300   try
00301     {
00302       this->active_policy_strategies_.lifespan_strategy()->notify_startup ();
00303     }
00304   catch (const ::CORBA::Exception&)
00305     {
00306       this->poa_manager_.remove_poa (this);
00307       this->object_adapter ().unbind_poa (this,
00308                                           this->folded_name_,
00309                                           this->system_name_.in ());
00310       throw;
00311     }
00312 }

TAO_Root_POA::~TAO_Root_POA void   )  [virtual]
 

Definition at line 314 of file Root_POA.cpp.

References TAO_Local_RefCounted_Object::_remove_ref().

00315 {
00316   this->poa_manager_._remove_ref();
00317 }


Member Function Documentation

CORBA::ORB_ptr TAO_Root_POA::_get_orb void   )  [virtual]
 

Reimplemented from CORBA::LocalObject.

Definition at line 2628 of file Root_POA.cpp.

References CORBA::ORB::_duplicate().

02629 {
02630   return CORBA::ORB::_duplicate (this->orb_core_.orb ());
02631 }

PortableServer::ObjectId * TAO_Root_POA::activate_object PortableServer::Servant  p_servant  ) 
 

Definition at line 1083 of file Root_POA.cpp.

References activate_object_i(), and TAO_POA_GUARD_RETURN.

Referenced by activate_object_i().

01084 {
01085   while (1)
01086     {
01087       bool wait_occurred_restart_call = false;
01088 
01089       // Lock access for the duration of this transaction.
01090       TAO_POA_GUARD_RETURN (0);
01091 
01092       PortableServer::ObjectId *result =
01093         this->activate_object_i (servant,
01094                                  this->server_priority (),
01095                                  wait_occurred_restart_call);
01096 
01097       // If we ended up waiting on a condition variable, the POA state
01098       // may have changed while we are waiting.  Therefore, we need to
01099       // restart this call.
01100       if (wait_occurred_restart_call)
01101         continue;
01102       else
01103         return result;
01104     }
01105 }

PortableServer::ObjectId * TAO_Root_POA::activate_object_i PortableServer::Servant  p_servant,
CORBA::Short  priority,
bool &  wait_occurred_restart_call
 

Definition at line 1072 of file Root_POA.cpp.

References activate_object(), active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::servant_retention_strategy().

Referenced by activate_object().

01075 {
01076   return this->active_policy_strategies_.servant_retention_strategy()->
01077     activate_object (servant,
01078                      priority,
01079                      wait_occurred_restart_call);
01080 }

void TAO_Root_POA::activate_object_with_id const PortableServer::ObjectId id,
PortableServer::Servant  p_servant
 

Definition at line 1109 of file Root_POA.cpp.

References activate_object_with_id_i(), and TAO_POA_GUARD.

Referenced by activate_object_with_id_i().

01111 {
01112   while (1)
01113     {
01114       bool wait_occurred_restart_call = false;
01115 
01116       // Lock access for the duration of this transaction.
01117       TAO_POA_GUARD;
01118 
01119       this->activate_object_with_id_i (id,
01120                                        servant,
01121                                        this->server_priority (),
01122                                        wait_occurred_restart_call);
01123 
01124       // If we ended up waiting on a condition variable, the POA state
01125       // may have changed while we are waiting.  Therefore, we need to
01126       // restart this call.
01127       if (wait_occurred_restart_call)
01128         continue;
01129       else
01130         return;
01131     }
01132 }

void TAO_Root_POA::activate_object_with_id_i const PortableServer::ObjectId id,
PortableServer::Servant  p_servant,
CORBA::Short  priority,
bool &  wait_occurred_restart_call
[protected]
 

Definition at line 1137 of file Root_POA.cpp.

References activate_object_with_id(), active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::servant_retention_strategy().

Referenced by activate_object_with_id().

01141 {
01142   this->active_policy_strategies_.servant_retention_strategy()->
01143     activate_object_with_id (id,
01144                              servant,
01145                              priority,
01146                              wait_occurred_restart_call);
01147 }

ACE_INLINE PortableInterceptor::AdapterName * TAO_Root_POA::adapter_name 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.

Definition at line 32 of file Root_POA.inl.

References adapter_name_i().

Referenced by ORT_adapter_i().

00033 {
00034   return this->adapter_name_i ();
00035 }

PortableInterceptor::AdapterName * TAO_Root_POA::adapter_name_i void   )  [protected]
 

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.

Definition at line 956 of file Root_POA.cpp.

References ACE_ASSERT, ACE_NEW_THROW_EX, TAO_Objref_Var_T< T >::in(), CORBA::is_nil(), PortableServer::POA_var, and CORBA::string_dup().

Referenced by adapter_name(), and ORT_adapter_i().

00957 {
00958   // The adapter name is the sequence of names starting from the
00959   // RootPOA to the one whose name is requested.  The name of the
00960   // RootPOA is "RootPOA".
00961 
00962   PortableServer::POA_var poa = PortableServer::POA::_duplicate (this);
00963 
00964   CORBA::ULong len = 0;
00965 
00966   // Find the length of the adapter name sequence by traversing the
00967   // POA hierarchy until the RootPOA is reached.  The RootPOA has no
00968   // parent.
00969   while (!CORBA::is_nil (poa.in ()))
00970     {
00971       poa = poa->the_parent ();
00972 
00973       ++len;
00974     }
00975 
00976   // Empty adapter name sequence.
00977   PortableInterceptor::AdapterName *names = 0;
00978   ACE_NEW_THROW_EX (names,
00979                     PortableInterceptor::AdapterName (len),
00980                     CORBA::NO_MEMORY (
00981                       CORBA::SystemException::_tao_minor_code (
00982                         TAO::VMCID,
00983                         ENOMEM),
00984                       CORBA::COMPLETED_NO));
00985 
00986   PortableInterceptor::AdapterName_var safe_names (names);
00987 
00988   names->length (len);
00989 
00990   poa = PortableServer::POA::_duplicate (this);
00991 
00992   (*names)[0] = CORBA::string_dup ("RootPOA");
00993 
00994   // Fill in the AdapterName sequence as the POA hierarchy is
00995   // traversed.
00996   CORBA::ULong ilen = len;
00997   for (CORBA::ULong i = 1; i < len; ++i)
00998     {
00999       (*names)[--ilen] = poa->the_name ();
01000 
01001       poa = poa->the_parent ();
01002 
01003       // If this condition asserts, the POA hierarchy was modified
01004       // (i.e. reduced in size) by another thread!
01005       ACE_ASSERT ((ilen > 0 ? !CORBA::is_nil (poa.in ()) : 1));
01006     }
01007 
01008   return safe_names._retn ();
01009 }

void TAO_Root_POA::adapter_state_changed const TAO::ORT_Array array_obj_ref_template,
PortableInterceptor::AdapterState  state
[protected]
 

Method to notify the IOR Interceptors when there is a state changed not related to POAManager.

Definition at line 1058 of file Root_POA.cpp.

References TAO_IORInterceptor_Adapter::adapter_state_changed(), and TAO_ORB_Core::ior_interceptor_adapter().

Referenced by destroy_i().

01061 {
01062   TAO_IORInterceptor_Adapter *ior_adapter =
01063     this->orb_core_.ior_interceptor_adapter ();
01064 
01065   if (ior_adapter)
01066     {
01067       ior_adapter->adapter_state_changed (array_obj_ref_template, state);
01068     }
01069 }

void TAO_Root_POA::add_ior_component TAO_MProfile mprofile,
const IOP::TaggedComponent component
[protected]
 

Add the given tagged component to all profiles.

Definition at line 1012 of file Root_POA.cpp.

References TAO_Profile::add_tagged_component(), TAO_MProfile::get_profile(), and TAO_MProfile::profile_count().

Referenced by create_stub_object().

01014 {
01015   // Add the given tagged component to all profiles.
01016   const CORBA::ULong profile_count = mprofile.profile_count ();
01017 
01018   for (CORBA::ULong i = 0; i < profile_count; ++i)
01019     {
01020       TAO_Profile *profile = mprofile.get_profile (i);
01021 
01022       profile->add_tagged_component (component);
01023     }
01024 }

void TAO_Root_POA::add_ior_component_to_profile TAO_MProfile mprofile,
const IOP::TaggedComponent component,
IOP::ProfileId  profile_id
[protected]
 

Add the given tagged component to all profiles matching the given ProfileId.

Definition at line 1027 of file Root_POA.cpp.

References TAO_Profile::add_tagged_component(), TAO_MProfile::get_profile(), TAO_MProfile::profile_count(), and TAO_Profile::tag().

Referenced by create_stub_object().

01031 {
01032   // Add the given tagged component to all profiles matching the given
01033   // ProfileId.
01034   bool found_profile = false;
01035 
01036   CORBA::ULong const profile_count = mprofile.profile_count ();
01037 
01038   for (CORBA::ULong i = 0; i < profile_count; ++i)
01039     {
01040       TAO_Profile *profile = mprofile.get_profile (i);
01041 
01042       if (profile->tag () == profile_id)
01043         {
01044           profile->add_tagged_component (component);
01045 
01046           found_profile = true;
01047         }
01048     }
01049 
01050   // According to the Portable Interceptor specification, we're
01051   // supposed to throw a CORBA::BAD_PARAM exception if no profile
01052   // matched the given ProfileId.
01053   if (found_profile == false)
01054     throw ::CORBA::BAD_PARAM (CORBA::OMGVMCID | 29, CORBA::COMPLETED_NO);
01055 }

bool TAO_Root_POA::allow_implicit_activation void   )  const
 

Definition at line 2443 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::implicit_activation_strategy().

Referenced by TAO::Portable_Server::ServantRetentionStrategyRetain::servant_to_system_id_i(), and TAO::Portable_Server::ServantRetentionStrategyRetain::servant_to_user_id().

02444 {
02445   return this->active_policy_strategies_.implicit_activation_strategy ()->
02446     allow_implicit_activation ();
02447 }

bool TAO_Root_POA::allow_multiple_activations void   )  const
 

Definition at line 2450 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::id_uniqueness_strategy().

Referenced by TAO::Portable_Server::ServantRetentionStrategyRetain::servant_to_system_id_i(), and TAO::Portable_Server::ServantRetentionStrategyRetain::servant_to_user_id().

02451 {
02452   return this->active_policy_strategies_.id_uniqueness_strategy ()->
02453     allow_multiple_activations ();
02454 }

TAO::Portable_Server::Cached_Policies & TAO_Root_POA::cached_policies void   ) 
 

obtain a reference to the cached_profiles

Definition at line 2481 of file Root_POA.cpp.

Referenced by TAO_Network_Priority_Hook::update_network_priority().

02482 {
02483   return this->cached_policies_;
02484 }

void TAO_Root_POA::check_for_valid_wait_for_completions const TAO_ORB_Core orb_core,
CORBA::Boolean  wait_for_completion
[static]
 

Definition at line 1178 of file Root_POA.cpp.

References TAO_TSS_Resources::instance(), TAO::Portable_Server::POA_Current_Impl::orb_core(), TAO_TSS_Resources::poa_current_impl_, and TAO::Portable_Server::POA_Current_Impl::previous_current_impl_.

Referenced by TAO_Object_Adapter::check_close(), TAO_POA_Manager::deactivate_i(), destroy_i(), TAO_POA_Manager::discard_requests_i(), and TAO_POA_Manager::hold_requests_i().

01180 {
01181   if (wait_for_completion)
01182     {
01183       TAO::Portable_Server::POA_Current_Impl *poa_current_impl =
01184         static_cast <TAO::Portable_Server::POA_Current_Impl *>
01185                     (TAO_TSS_Resources::instance ()->poa_current_impl_);
01186 
01187       while (1)
01188         {
01189           // If wait_for_completion is TRUE and the current thread is
01190           // in an invocation context dispatched from some POA
01191           // belonging to the same ORB as this POA, the BAD_INV_ORDER
01192           // system exception with standard minor code 3 is raised and
01193           // POA destruction does not occur.
01194           if (poa_current_impl != 0)
01195             {
01196               if (&orb_core == &poa_current_impl->orb_core ())
01197                 {
01198                   // CORBA 2.3 specifies which minor code corresponds
01199                   // to this particular problem.
01200                   throw ::CORBA::BAD_INV_ORDER (CORBA::OMGVMCID | 3,
01201                                                    CORBA::COMPLETED_NO);
01202                 }
01203             }
01204           else
01205             break;
01206 
01207           poa_current_impl =
01208             poa_current_impl->previous_current_impl_;
01209         }
01210     }
01211 }

void TAO_Root_POA::check_state void   ) 
 

Check the state of this POA.

Definition at line 2590 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::lifespan_strategy().

Referenced by find_POA_i(), and TAO::Portable_Server::Servant_Upcall::prepare_for_upcall_i().

02591 {
02592   this->active_policy_strategies_.lifespan_strategy ()->check_state ();
02593 }

TAO_BEGIN_VERSIONED_NAMESPACE_DECL ACE_INLINE CORBA::Boolean TAO_Root_POA::cleanup_in_progress void   ) 
 

Definition at line 8 of file Root_POA.inl.

References cleanup_in_progress_.

Referenced by TAO::Portable_Server::POA_Guard::POA_Guard().

00009 {
00010   return this->cleanup_in_progress_;
00011 }

void TAO_Root_POA::cleanup_servant PortableServer::Servant  servant,
const PortableServer::ObjectId user_id
 

Definition at line 1455 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::request_processing_strategy().

Referenced by TAO::Portable_Server::ServantRetentionStrategyRetain::deactivate_map_entry(), and TAO::Portable_Server::Servant_Upcall::servant_cleanup().

01459 {
01460   this->active_policy_strategies_.request_processing_strategy()->
01461     cleanup_servant (servant, user_id);
01462 }

CORBA::PolicyList * TAO_Root_POA::client_exposed_policies CORBA::Short  object_priority  )  [virtual]
 

This method gives the policies that are exposed to the client. These policies are shipped within the IOR.

Definition at line 2206 of file Root_POA.cpp.

References ACE_NEW_THROW_EX, TAO_POA_Policy_Set::add_client_exposed_fixed_policies(), and client_exposed_policies().

Referenced by client_exposed_policies(), and key_to_stub_i().

02207 {
02208   CORBA::PolicyList *client_exposed_policies = 0;
02209   ACE_NEW_THROW_EX (client_exposed_policies,
02210                     CORBA::PolicyList (),
02211                     CORBA::NO_MEMORY (TAO::VMCID,
02212                                       CORBA::COMPLETED_NO));
02213 
02214   CORBA::PolicyList_var policies = client_exposed_policies;
02215 
02216   // Add in all of the client exposed policies.
02217   this->policies_.add_client_exposed_fixed_policies (client_exposed_policies);
02218 
02219   return policies._retn ();
02220 }

void TAO_Root_POA::complete_destruction_i void   )  [protected]
 

Definition at line 320 of file Root_POA.cpp.

References active_policy_strategies_, adapter_activator_, TAO::Portable_Server::Active_Policy_Strategies::cleanup(), object_adapter(), TAO_POA_Manager::remove_poa(), TAO_Object_Adapter::unbind_poa(), and waiting_destruction_.

Referenced by destroy_i(), TAO::Portable_Server::Servant_Upcall::poa_cleanup(), and TAO::Portable_Server::Non_Servant_Upcall::~Non_Servant_Upcall().

00321 {
00322   // No longer awaiting destruction.
00323   this->waiting_destruction_ = 0;
00324 
00325   // Remove POA from the POAManager.
00326   int result = this->poa_manager_.remove_poa (this);
00327 
00328   if (result != 0)
00329     throw ::CORBA::OBJ_ADAPTER ();
00330 
00331   // Remove POA from the Object Adapter.
00332   result = this->object_adapter ().unbind_poa (this,
00333                                                this->folded_name_,
00334                                                this->system_name_.in ());
00335   if (result != 0)
00336     throw ::CORBA::OBJ_ADAPTER ();
00337 
00338   // Cleanup all strategies
00339   this->active_policy_strategies_.cleanup ();
00340 
00341   // Forced cleanup.  The new memory management scheme is evil and can
00342   // lead to reference deadlock, i.e., POA holds object A, but POA
00343   // cannot die because object A hold POA.
00344   {
00345     //
00346     // If new things are added to this cleanup code, make sure to move
00347     // the minimum CORBA #define after the declaration of
00348     // <non_servant_upcall>.
00349     //
00350 
00351 #if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
00352 
00353     // ATTENTION: Trick locking here, see class header for details
00354     TAO::Portable_Server::Non_Servant_Upcall non_servant_upcall (*this);
00355     ACE_UNUSED_ARG (non_servant_upcall);
00356 
00357     this->adapter_activator_ = PortableServer::AdapterActivator::_nil ();
00358 
00359 #endif /* TAO_HAS_MINIMUM_POA == 0 */
00360 
00361   }
00362 
00363   ::CORBA::release (this);
00364 }

void TAO_Root_POA::components_established PortableInterceptor::IORInfo_ptr  info  )  [protected]
 

Call the IORInterceptor::components_established() method on all registered IORInterceptors.

Definition at line 2084 of file Root_POA.cpp.

References TAO_IORInterceptor_Adapter::components_established(), and TAO_ORB_Core::ior_interceptor_adapter().

02085 {
02086   TAO_IORInterceptor_Adapter *ior_adapter =
02087     this->orb_core_.ior_interceptor_adapter ();
02088 
02089   if (ior_adapter)
02090     {
02091       ior_adapter->components_established (info);
02092     }
02093 }

PortableServer::IdAssignmentPolicy_ptr TAO_Root_POA::create_id_assignment_policy PortableServer::IdAssignmentPolicyValue  value  ) 
 

Definition at line 125 of file Root_POA.cpp.

References ACE_NEW_THROW_EX.

00126 {
00127   TAO::Portable_Server::IdAssignmentPolicy *policy = 0;
00128   ACE_NEW_THROW_EX (policy,
00129                     TAO::Portable_Server::IdAssignmentPolicy (value),
00130                     CORBA::NO_MEMORY ());
00131 
00132   return policy;
00133 }

PortableServer::IdUniquenessPolicy_ptr TAO_Root_POA::create_id_uniqueness_policy PortableServer::IdUniquenessPolicyValue  value  ) 
 

Definition at line 112 of file Root_POA.cpp.

References ACE_NEW_THROW_EX.

00113 {
00114   TAO::Portable_Server::IdUniquenessPolicy *policy = 0;
00115   ACE_NEW_THROW_EX (policy,
00116                     TAO::Portable_Server::IdUniquenessPolicy (value),
00117                     CORBA::NO_MEMORY ());
00118 
00119   return policy;
00120 }

PortableServer::ImplicitActivationPolicy_ptr TAO_Root_POA::create_implicit_activation_policy PortableServer::ImplicitActivationPolicyValue  value  ) 
 

Definition at line 139 of file Root_POA.cpp.

References ACE_NEW_THROW_EX.

00140 {
00141   TAO::Portable_Server::ImplicitActivationPolicy *policy = 0;
00142   ACE_NEW_THROW_EX (policy,
00143                     TAO::Portable_Server::ImplicitActivationPolicy (value),
00144                     CORBA::NO_MEMORY ());
00145 
00146   return policy;
00147 }

PortableServer::LifespanPolicy_ptr TAO_Root_POA::create_lifespan_policy PortableServer::LifespanPolicyValue  value  ) 
 

Definition at line 98 of file Root_POA.cpp.

References ACE_NEW_THROW_EX.

00099 {
00100   TAO::Portable_Server::LifespanPolicy *policy = 0;
00101   ACE_NEW_THROW_EX (policy,
00102                     TAO::Portable_Server::LifespanPolicy (value),
00103                     CORBA::NO_MEMORY ());
00104 
00105   return policy;
00106 }

TAO::ObjectKey * TAO_Root_POA::create_object_key const PortableServer::ObjectId id  )  [protected]
 

Definition at line 1673 of file Root_POA.cpp.

References ACE_NEW_RETURN, TAO::unbounded_value_sequence< T >::allocbuf(), and ACE_OS::memcpy().

Referenced by invoke_key_to_object().

01674 {
01675   // Calculate the space required for the key.
01676   CORBA::ULong buffer_size =
01677     this->id_.length () +
01678     id.length ();
01679 
01680   // Create the buffer for the key.
01681   CORBA::Octet *buffer = TAO::ObjectKey::allocbuf (buffer_size);
01682 
01683   // First copy the POA id into the key.
01684   ACE_OS::memcpy (&buffer[0],
01685                   this->id_.get_buffer (),
01686                   this->id_.length ());
01687 
01688   // Then copy the object id into the key.
01689   ACE_OS::memcpy (&buffer[this->id_.length ()],
01690                   id.get_buffer (),
01691                   id.length ());
01692 
01693   // Create the key, giving the ownership of the buffer to the
01694   // sequence.
01695   TAO::ObjectKey *key = 0;
01696   ACE_NEW_RETURN (key,
01697                   TAO::ObjectKey (buffer_size,
01698                                   buffer_size,
01699                                   buffer,
01700                                   1),
01701                   0);
01702 
01703   return key;
01704 }

PortableServer::POA_ptr TAO_Root_POA::create_POA const char *  adapter_name,
PortableServer::POAManager_ptr  poa_manager,
const CORBA::PolicyList policies
 

Definition at line 648 of file Root_POA.cpp.

References create_POA_i(), PortableServer::POAManager_ptr, and TAO_POA_GUARD_RETURN.

00651 {
00652   // Lock access for the duration of this transaction.
00653   TAO_POA_GUARD_RETURN (0);
00654 
00655   return this->create_POA_i (adapter_name, poa_manager, policies);
00656 }

PortableServer::POA_ptr TAO_Root_POA::create_POA_i const String adapter_name,
PortableServer::POAManager_ptr  poa_manager,
const TAO_POA_Policy_Set policies
[protected]
 

Definition at line 475 of file Root_POA.cpp.

References TAO_Objref_Var_T< T >::_retn(), ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::bind(), children_, ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::find(), new_POA(), object_adapter(), PortableServer::POA_var, PortableServer::POAManager_ptr, String, and TAO_Object_Adapter::thread_lock().

00478 {
00479   // This operaton creates a new POA as a child of the target POA. The
00480   // specified name identifies the new POA with respect to other POAs
00481   // with the same parent POA. If the target POA already has a child
00482   // POA with the specified name, the AdapterAlreadyExists exception
00483   // is raised.
00484   // Child was found
00485   if (this->children_.find (adapter_name) != -1)
00486     {
00487       throw PortableServer::POA::AdapterAlreadyExists ();
00488     }
00489 
00490   //
00491   // Child was not found.  Create one.
00492   //
00493 
00494   // The specified policy objects are associated with the POA and used
00495   // to control its behavior. The policy objects are effectively
00496   // copied before this operation returns, so the application is free
00497   // to destroy them while the POA is in use. Policies are not
00498   // inherited from the parent POA.
00499   TAO_Root_POA * poa = this->new_POA (adapter_name,
00500                                       poa_manager,
00501                                       policies,
00502                                       this,
00503                                       this->object_adapter ().lock (),
00504                                       this->object_adapter ().thread_lock (),
00505                                       this->orb_core_,
00506                                       this->object_adapter_);
00507 
00508   // Give ownership of the new map to the POA_var.  Note, that it
00509   // is important for the POA_var to take ownership before
00510   // checking for exception since we may need to delete the new map.
00511   PortableServer::POA_var new_poa = poa;
00512 
00513   // Check for exception in construction of the POA.
00514 
00515   // Add to children map
00516   if (this->children_.bind (adapter_name, poa) != 0)
00517     {
00518       throw ::CORBA::OBJ_ADAPTER ();
00519     }
00520 
00521   // Increment the reference count on the child POA since the children
00522   // map must retain ownership.  Do so immediately before any other
00523   // operations to prevent memory cleanup problems induced from
00524   // errors below.
00525   poa->_add_ref ();
00526 
00527   // Iterate over the registered IOR interceptors so that they may be
00528   // given the opportunity to add tagged components to the profiles
00529   // for this servant.
00530   poa->establish_components ();
00531 
00532   // Note: Creating a POA using a POA manager that is in the active
00533   // state can lead to race conditions if the POA supports preexisting
00534   // objects, because the new POA may receive a request before its
00535   // adapter activator, servant manager, or default servant have been
00536   // initialized. These problems do not occur if the POA is created by
00537   // an adapter activator registered with a parent of the new POA,
00538   // because requests are queued until the adapter activator
00539   // returns. To avoid these problems when a POA must be explicitly
00540   // initialized, the application can initialize the POA by invoking
00541   // find_POA with a TRUE activate parameter.
00542 
00543   // Everything is fine. Don't let the POA_var release the
00544   // implementation.
00545   return new_poa._retn ();
00546 }

PortableServer::POA_ptr TAO_Root_POA::create_POA_i const char *  adapter_name,
PortableServer::POAManager_ptr  poa_manager,
const CORBA::PolicyList policies
[protected]
 

Definition at line 368 of file Root_POA.cpp.

References TAO_Objref_Var_T< T >::_retn(), ACE_NEW_THROW_EX, TAO_Objref_Var_T< T >::in(), CORBA::is_nil(), TAO_POA_Policy_Set::merge_policies(), TAO_Policy_Validator::merge_policies(), object_adapter(), PortableServer::POA_var, PortableServer::POAManager_ptr, PortableServer::POAManager_var, TAO_POA_Policy_Set::policies(), TAO_POA_Policy_Set::validate_policies(), and TAO_Object_Adapter::validator().

Referenced by create_POA().

00371 {
00372   // Initialize a TAO_POA_Policy_Set instance so that it contains the
00373   // default POA policies.
00374   TAO_POA_Policy_Set tao_policies (this->object_adapter ().default_poa_policies ());
00375 
00376   // Merge policies from the ORB level.
00377   this->object_adapter ().validator ().merge_policies (tao_policies.policies ());
00378 
00379   // Merge in any policies that the user may have specified.
00380   tao_policies.merge_policies (policies);
00381 
00382   // If any of the policy objects specified are not valid for the ORB
00383   // implementation, if conflicting policy objects are specified, or
00384   // if any of the specified policy objects require prior
00385   // administrative action that has not been performed, an
00386   // InvalidPolicy exception is raised containing the index in the
00387   // policies parameter value of the first offending policy object.
00388   tao_policies.validate_policies (this->object_adapter ().validator (),
00389                                   this->orb_core_);
00390 
00391   // If the poa_manager parameter is null, a new POAManager object is
00392   // created and associated with the new POA. Otherwise, the specified
00393   // POAManager object is associated with the new POA. The POAManager
00394   // object can be obtained using the attribute name the_POAManager.
00395 
00396   PortableServer::POAManager_var the_poa_manager;
00397 
00398   if (CORBA::is_nil (poa_manager))
00399     {
00400 #if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT)
00401 
00402       PortableServer::POA_var poa = PortableServer::POA::_duplicate (this);
00403       PortableServer::POA_var root_poa;
00404 
00405       // Find the RootPOA by traversing the POA hierarchy until the
00406       // RootPOA is reached.  The RootPOA has no parent.
00407       while (!CORBA::is_nil (poa.in ()))
00408       {
00409         root_poa = poa;
00410         poa = poa->the_parent ();
00411       }
00412 
00413       // Get the POAManagerFactory instance owned by RootPOA.
00414       PortableServer::POAManagerFactory_var tao_poa_manager_factory
00415         = root_poa->the_POAManagerFactory ();
00416 
00417       CORBA::PolicyList empty_policies;
00418 
00419       // The POAManager name will be generated when the POAManager instance
00420       // is created.
00421       the_poa_manager
00422         = tao_poa_manager_factory->create_POAManager (0,
00423                                                       empty_policies);
00424 #else
00425 
00426       PortableServer::POAManager_ptr the_poa_manager_ptr;
00427       ACE_NEW_THROW_EX (the_poa_manager_ptr,
00428                         TAO_POA_Manager (this->object_adapter (), 0),
00429                         CORBA::NO_MEMORY ());
00430       the_poa_manager = the_poa_manager_ptr;
00431 #endif /* TAO_HAS_MINIMUM_POA == 0 && ! CORBA_E_COMPACT) */
00432 
00433     }
00434   else
00435     {
00436       the_poa_manager = PortableServer::POAManager::_duplicate (poa_manager);
00437     }
00438 
00439   PortableServer::POA_var poa = this->create_POA_i (adapter_name,
00440                                                     the_poa_manager.in (),
00441                                                     tao_policies);
00442 
00443   return poa._retn ();
00444 }

CORBA::Object_ptr TAO_Root_POA::create_reference const char *  intf  ) 
 

Definition at line 1247 of file Root_POA.cpp.

References create_reference_i(), and TAO_POA_GUARD_RETURN.

Referenced by create_reference_i().

01248 {
01249   // Lock access for the duration of this transaction.
01250   TAO_POA_GUARD_RETURN (CORBA::Object::_nil ());
01251 
01252   return this->create_reference_i (intf,
01253                                    this->server_priority ());
01254 }

CORBA::Object_ptr TAO_Root_POA::create_reference_i const char *  intf,
CORBA::Short  priority
[protected]
 

Definition at line 1257 of file Root_POA.cpp.

References active_policy_strategies_, create_reference(), has_system_id(), and TAO::Portable_Server::Active_Policy_Strategies::servant_retention_strategy().

Referenced by create_reference().

01259 {
01260   if (!this->has_system_id ())
01261     {
01262       throw PortableServer::POA::WrongPolicy ();
01263     }
01264 
01265   return this->active_policy_strategies_.servant_retention_strategy()->
01266     create_reference (intf, priority);
01267 }

CORBA::Object_ptr TAO_Root_POA::create_reference_with_id const PortableServer::ObjectId oid,
const char *  intf
 

Definition at line 724 of file Root_POA.cpp.

References create_reference_with_id_i(), and TAO_POA_GUARD_RETURN.

Referenced by create_reference_with_id_i().

00726 {
00727   // Lock access for the duration of this transaction.
00728   TAO_POA_GUARD_RETURN (CORBA::Object::_nil ());
00729 
00730   return this->create_reference_with_id_i (id,
00731                                            intf,
00732                                            this->server_priority ());
00733 }

CORBA::Object_ptr TAO_Root_POA::create_reference_with_id_i const PortableServer::ObjectId oid,
const char *  intf,
CORBA::Short  priority
[protected]
 

Definition at line 1290 of file Root_POA.cpp.

References active_policy_strategies_, create_reference_with_id(), has_system_id(), is_poa_generated_id(), and TAO::Portable_Server::Active_Policy_Strategies::servant_retention_strategy().

Referenced by create_reference_with_id().

01293 {
01294   // If the POA has the SYSTEM_ID policy and it detects that the
01295   // Object Id value was not generated by the system or for this POA,
01296   // the create_reference_with_id operation may raise the BAD_PARAM
01297   // system exception. An ORB is not required to detect all such
01298   // invalid Object Id values, but a portable application must not
01299   // invoke this operation on a POA that has the SYSTEM_ID policy with
01300   // an Object Id value that was not previously generated by the
01301   // system for that POA, or, if the POA also has the PERSISTENT
01302   // policy, for a previous instantiation of the same POA.
01303   if (this->has_system_id () &&
01304       !this->is_poa_generated_id (user_id))
01305     {
01306       throw ::CORBA::BAD_PARAM (CORBA::OMGVMCID | 14, CORBA::COMPLETED_NO);
01307     }
01308 
01309   return this->active_policy_strategies_.servant_retention_strategy()->
01310     create_reference_with_id (user_id, intf, priority);
01311 }

PortableServer::RequestProcessingPolicy_ptr TAO_Root_POA::create_request_processing_policy PortableServer::RequestProcessingPolicyValue  value  ) 
 

Definition at line 161 of file Root_POA.cpp.

References ACE_NEW_THROW_EX.

00162 {
00163   TAO::Portable_Server::RequestProcessingPolicy *policy = 0;
00164   ACE_NEW_THROW_EX (policy,
00165                     TAO::Portable_Server::RequestProcessingPolicy (value),
00166                     CORBA::NO_MEMORY ());
00167 
00168   return policy;
00169 }

PortableServer::ServantRetentionPolicy_ptr TAO_Root_POA::create_servant_retention_policy PortableServer::ServantRetentionPolicyValue  value  ) 
 

Definition at line 150 of file Root_POA.cpp.

References ACE_NEW_THROW_EX.

00151 {
00152   TAO::Portable_Server::ServantRetentionPolicy *policy = 0;
00153   ACE_NEW_THROW_EX (policy,
00154                     TAO::Portable_Server::ServantRetentionPolicy (value),
00155                     CORBA::NO_MEMORY ());
00156 
00157   return policy;
00158 }

TAO_Stub * TAO_Root_POA::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
[protected]
 

Definition at line 2127 of file Root_POA.cpp.

References add_ior_component(), add_ior_component_to_profile(), TAO_Acceptor_Registry::begin(), TAO_ORB_Core::create_stub_object(), TAO_Acceptor_Filter::encode_endpoints(), TAO_Acceptor_Registry::end(), TAO_Acceptor_Registry::endpoint_count(), TAO_Acceptor_Filter::fill_profile(), TAO_MProfile::profile_count(), TAO_MProfile::set(), tagged_component_, tagged_component_id_, and TAO_MPROFILE_CREATION_ERROR.

Referenced by key_to_stub_i().

02132 {
02133   bool error = false;
02134 
02135   // Count the number of endpoints.
02136   size_t const profile_count = acceptor_registry.endpoint_count ();
02137 
02138   // Create a profile container and have acceptor registries populate
02139   // it with profiles as appropriate.
02140   TAO_MProfile mprofile (0);
02141 
02142   // Allocate space for storing the profiles.  There can never be more
02143   // profiles than there are endpoints.  In some cases, there can be
02144   // less profiles than endpoints.
02145   int result = mprofile.set (static_cast <CORBA::ULong> (profile_count));
02146   if (result == -1)
02147     error = true;
02148 
02149   if (!error)
02150     {
02151       result =
02152         filter->fill_profile (object_key,
02153                               mprofile,
02154                               acceptor_registry.begin (),
02155                               acceptor_registry.end ());
02156       if (result == -1)
02157         error = true;
02158     }
02159 
02160   if (!error)
02161     result = filter->encode_endpoints (mprofile);
02162 
02163   if (result == -1)
02164     error = true;
02165 
02166   if (error)
02167     throw ::CORBA::INTERNAL (
02168       CORBA::SystemException::_tao_minor_code (
02169         TAO_MPROFILE_CREATION_ERROR,
02170         0),
02171       CORBA::COMPLETED_NO);
02172 
02173   // Make sure we have at least one profile.  <mp> may end up being
02174   // empty if none of the acceptor endpoints have the right priority
02175   // for this object, for example.
02176   if (mprofile.profile_count () == 0)
02177     throw ::CORBA::BAD_PARAM (
02178       CORBA::SystemException::_tao_minor_code (
02179         TAO_MPROFILE_CREATION_ERROR,
02180         0),
02181       CORBA::COMPLETED_NO);
02182 
02183   TAO_Stub *stub =
02184     this->orb_core_.create_stub_object (mprofile, type_id, policy_list);
02185 
02186   // Add the saved tagged components methods to the profiles.
02187   CORBA::ULong len = this->tagged_component_.length ();
02188   for (CORBA::ULong i = 0; i != len; ++i)
02189     {
02190       this->add_ior_component (mprofile, this->tagged_component_[i]);
02191       }
02192 
02193   len = this->tagged_component_id_.length ();
02194 
02195   for (CORBA::ULong k = 0; k != len; ++k)
02196     {
02197       this->add_ior_component_to_profile (mprofile,
02198                                           this->tagged_component_id_[k],
02199                                           this->profile_id_array_[k]);
02200     }
02201 
02202   return stub;
02203 }

PortableServer::ThreadPolicy_ptr TAO_Root_POA::create_thread_policy PortableServer::ThreadPolicyValue  value  ) 
 

Definition at line 83 of file Root_POA.cpp.

References ACE_NEW_THROW_EX.

00084 {
00085   TAO::Portable_Server::ThreadPolicy *policy = 0;
00086   ACE_NEW_THROW_EX (policy,
00087                     TAO::Portable_Server::ThreadPolicy (value),
00088                     CORBA::NO_MEMORY ());
00089 
00090   return policy;
00091 }

void TAO_Root_POA::deactivate_all_objects_i CORBA::Boolean  etherealize_objects,
CORBA::Boolean  wait_for_completion
[protected]
 

Definition at line 1151 of file Root_POA.cpp.

References deactivate_all_objects_i(), and wait_for_completions().

01153 {
01154   this->deactivate_all_objects_i (etherealize_objects);
01155 
01156   this->wait_for_completions (wait_for_completion);
01157 }

void TAO_Root_POA::deactivate_all_objects_i CORBA::Boolean  etherealize_objects  )  [protected]
 

Definition at line 1214 of file Root_POA.cpp.

References active_policy_strategies_, TAO::Portable_Server::Active_Policy_Strategies::request_processing_strategy(), and TAO::Portable_Server::Active_Policy_Strategies::servant_retention_strategy().

Referenced by deactivate_all_objects_i(), TAO_POA_Manager::deactivate_i(), and destroy_i().

01215 {
01216   this->active_policy_strategies_.request_processing_strategy ()->
01217     etherealize_objects (etherealize_objects);
01218 
01219   this->active_policy_strategies_.servant_retention_strategy ()->
01220     deactivate_all_objects ();
01221 }

void TAO_Root_POA::deactivate_object const PortableServer::ObjectId oid  ) 
 

Definition at line 1224 of file Root_POA.cpp.

References deactivate_object_i(), and TAO_POA_GUARD.

Referenced by deactivate_object_i().

01225 {
01226   // Lock access for the duration of this transaction.
01227   TAO_POA_GUARD;
01228 
01229   this->deactivate_object_i (oid);
01230 }

void TAO_Root_POA::deactivate_object_i const PortableServer::ObjectId oid  ) 
 

Definition at line 1234 of file Root_POA.cpp.

References active_policy_strategies_, deactivate_object(), and TAO::Portable_Server::Active_Policy_Strategies::servant_retention_strategy().

Referenced by deactivate_object().

01235 {
01236   this->active_policy_strategies_.servant_retention_strategy()->
01237     deactivate_object (id);
01238 }

ACE_INLINE CORBA::ULong TAO_Root_POA::decrement_outstanding_requests void   )  [protected]
 

Definition at line 201 of file Root_POA.inl.

References outstanding_requests_.

Referenced by TAO::Portable_Server::Servant_Upcall::poa_cleanup().

00202 {
00203   return --this->outstanding_requests_;
00204 }

int TAO_Root_POA::delete_child const String child  ) 
 

Definition at line 915 of file Root_POA.cpp.

References children_, cleanup_in_progress_, String, and ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::unbind().

Referenced by TAO_Regular_POA::remove_from_parent_i().

00916 {
00917   int result = 0;
00918 
00919   // If we are not closing down, we must remove this child from our
00920   // collection.
00921   if (!this->cleanup_in_progress_)
00922     result = this->children_.unbind (child);
00923 
00924   // Otherwise, if we are closing down, we are currently iterating
00925   // over our children and there is not need to remove this child from
00926   // our collection.
00927 
00928   return result;
00929 }

void TAO_Root_POA::destroy CORBA::Boolean  etherealize_objects,
CORBA::Boolean  wait_for_completion
 

Definition at line 737 of file Root_POA.cpp.

References destroy_i().

Referenced by TAO_Object_Adapter::close().

00739 {
00740   // Lock access for the duration of this transaction.
00741   TAO::Portable_Server::POA_Guard poa_guard (*this , 0);
00742   ACE_UNUSED_ARG (poa_guard);
00743 
00744   this->destroy_i (etherealize_objects,
00745                    wait_for_completion);
00746 }

void TAO_Root_POA::destroy_i CORBA::Boolean  etherealize_objects,
CORBA::Boolean  wait_for_completion
[protected]
 

Definition at line 755 of file Root_POA.cpp.

References active_policy_strategies_, adapter_state_, adapter_state_changed(), ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::begin(), check_for_valid_wait_for_completions(), children_, cleanup_in_progress_, complete_destruction_i(), deactivate_all_objects_i(), TAO::ORT_Adapter_Factory::destroy(), ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::end(), TAO::ORT_Adapter::get_adapter_template(), TAO::Portable_Server::Active_Policy_Strategies::lifespan_strategy(), TAO_Object_Adapter::non_servant_upcall_in_progress(), object_adapter(), ort_adapter_, ORT_adapter_factory(), ORT_adapter_i(), outstanding_requests_, TAO::Portable_Server::Non_Servant_Upcall::poa(), poa_deactivated_hook(), PortableServer::POA_var, TAO::ORT_Adapter::release(), remove_from_parent_i(), ACE_Array_Base< T >::size(), and waiting_destruction_.

Referenced by destroy().

00757 {
00758   if (this->cleanup_in_progress_)
00759     return;
00760 
00761   // Is the <wait_for_completion> semantics for this thread correct?
00762   TAO_Root_POA::check_for_valid_wait_for_completions (this->orb_core (),
00763                                                       wait_for_completion);
00764 
00765   this->cleanup_in_progress_ = 1;
00766 
00767   // Inform the custom servant dispatching strategy to stop the working
00768   // threads when the poa is destroyed.
00769   this->poa_deactivated_hook ();
00770 
00771   // This operation destroys the POA and all descendant POAs. The POA
00772   // so destroyed (that is, the POA with its name) may be re-created
00773   // later in the same process. (This differs from the
00774   // POAManager::deactivate operation that does not allow a
00775   // re-creation of its associated POA in the same process.)
00776 
00777   // Remove POA from the parent
00778   this->remove_from_parent_i ();
00779 
00780   TAO::ORT_Array array_obj_ref_template (1);
00781 
00782   CORBA::ULong i = 0;
00783 
00784   // Gather all ObjectReferenceTemplates and change all adapter states
00785   // to INACTIVE.
00786   for (CHILDREN::iterator iterator = this->children_.begin ();
00787        iterator != this->children_.end ();
00788        ++iterator)
00789     {
00790       TAO_Root_POA * const child_poa = (*iterator).int_id_;
00791 
00792       TAO::ORT_Adapter * const adapter = child_poa->ORT_adapter_i ();
00793 
00794       // In case no ORT library is linked we get zero.
00795       if (adapter != 0)
00796         {
00797           // Get the ObjectReferenceTemplate for the child POA.
00798           PortableInterceptor::ObjectReferenceTemplate * const ort =
00799             adapter->get_adapter_template ();
00800 
00801           // Add it to the sequence of object reference templates that
00802           // will be destroyed.
00803           array_obj_ref_template.size (1);
00804 
00805           array_obj_ref_template[0] = ort;
00806         }
00807 
00808       child_poa->adapter_state_ =
00809         PortableInterceptor::INACTIVE;
00810 
00811       // Notify the state changes to the IORInterceptors
00812       this->adapter_state_changed (array_obj_ref_template,
00813                                    PortableInterceptor::INACTIVE);
00814 
00815       if (adapter != 0)
00816         adapter->release (array_obj_ref_template[0]);
00817 
00818       ++i;
00819     }
00820 
00821   // Destroy all child POA's now.
00822   for (CHILDREN::iterator destroy_iterator = this->children_.begin ();
00823        destroy_iterator != this->children_.end ();
00824        ++destroy_iterator)
00825     {
00826       TAO_Root_POA *destroy_child_poa = (*destroy_iterator).int_id_;
00827 
00828       destroy_child_poa->destroy_i (etherealize_objects,
00829                                     wait_for_completion);
00830     }
00831 
00832   // Notify the lifespan strategy of our shutdown
00833   this->active_policy_strategies_.lifespan_strategy()->notify_shutdown ();
00834 
00835 // @todo, is the exception handling above correct, should we just fail when
00836 // the notify above fails
00837 
00838   // When a POA is destroyed, any requests that have started execution
00839   // continue to completion. Any requests that have not started
00840   // execution are processed as if they were newly arrived, that is,
00841   // the POA will attempt to cause recreation of the POA by invoking
00842   // one or more adapter activators as described in Section 3.3.3.
00843   // If the wait_for_completion parameter is TRUE, the destroy
00844   // operation will return only after all requests in process have
00845   // completed and all invocations of etherealize have
00846   // completed. Otherwise, the destroy operation returns after
00847   // destroying the POAs.
00848 
00849   this->deactivate_all_objects_i (etherealize_objects,
00850                                   wait_for_completion);
00851 
00852   // If there are no outstanding requests and that we are not in a
00853   // non-servant upcall or if we are in a non-servant upcall, make
00854   // sure we are the POA related to the non-servant upcall.
00855   TAO::Portable_Server::Non_Servant_Upcall *non_servant_upcall_in_progress =
00856     this->object_adapter ().non_servant_upcall_in_progress ();
00857   if (this->outstanding_requests_ == 0 &&
00858       (non_servant_upcall_in_progress == 0 ||
00859        &non_servant_upcall_in_progress->poa () != this))
00860     {
00861       TAO::ORT_Array my_array_obj_ref_template;
00862 
00863       TAO::ORT_Adapter * const ort_adapter =
00864         this->ORT_adapter_i ();
00865 
00866       // In case no ORT library is linked we get zero.
00867       if (ort_adapter != 0)
00868         {
00869           // Get the ObjectReferenceTemplate.
00870           PortableInterceptor::ObjectReferenceTemplate * const ort =
00871             ort_adapter->get_adapter_template ();
00872 
00873           // Add it to the sequence of object reference templates, we
00874           // just notify for ourselves that we are now non_existent,
00875           // our childs will do it for themselves.
00876           my_array_obj_ref_template.size (1);
00877           my_array_obj_ref_template[0] = ort;
00878         }
00879 
00880       // According to the ORT spec, after a POA is destroyed, its state
00881       // has to be changed to NON_EXISTENT and all the registered
00882       // interceptors are to be informed. Since, the POA is destroyed
00883       // and is released in the complete_destruction_i method, we are
00884       // trying to keep the poa still around by doing a duplicate of
00885       // it. (a hack).
00886       PortableServer::POA_var poa = PortableServer::POA::_duplicate (this);
00887 
00888       this->complete_destruction_i ();
00889 
00890       this->adapter_state_ = PortableInterceptor::NON_EXISTENT;
00891 
00892       this->adapter_state_changed (my_array_obj_ref_template,
00893                                    this->adapter_state_);
00894 
00895       if (ort_adapter != 0)
00896         {
00897           ort_adapter->release (my_array_obj_ref_template[0]);
00898 
00899           TAO::ORT_Adapter_Factory *ort_factory =
00900             this->ORT_adapter_factory ();
00901 
00902           ort_factory->destroy (ort_adapter);
00903 
00904           this->ort_adapter_ = 0;
00905         }
00906     }
00907   else
00908     {
00909       // Mark that we are ready for destruction.
00910       this->waiting_destruction_ = 1;
00911     }
00912 }

int TAO_Root_POA::enter void   )  [protected]
 

Definition at line 2500 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::thread_strategy().

Referenced by TAO::Portable_Server::Servant_Upcall::single_threaded_poa_setup().

02501 {
02502   return this->active_policy_strategies_.thread_strategy ()->enter();
02503 }

void TAO_Root_POA::establish_components void   )  [protected]
 

This method calls IORInterceptor::establish_components() method on all registered IORInterceptors, and IORInterceptor::components_established() once the former is completed.

Definition at line 2072 of file Root_POA.cpp.

References TAO_IORInterceptor_Adapter::establish_components(), and TAO_ORB_Core::ior_interceptor_adapter().

Referenced by TAO_Object_Adapter::open().

02073 {
02074   TAO_IORInterceptor_Adapter *ior_adapter =
02075     this->orb_core_.ior_interceptor_adapter ();
02076 
02077   if (ior_adapter)
02078     {
02079       ior_adapter->establish_components (this);
02080     }
02081 }

int TAO_Root_POA::exit void   )  [protected]
 

Definition at line 2508 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::thread_strategy().

Referenced by TAO::Portable_Server::Servant_Upcall::single_threaded_poa_cleanup().

02509 {
02510   return this->active_policy_strategies_.thread_strategy ()->exit();
02511 }

PortableServer::POA_ptr TAO_Root_POA::find_POA const char *  adapter_name,
CORBA::Boolean  activate_it
 

Definition at line 551 of file Root_POA.cpp.

References find_POA_i(), and TAO_POA_GUARD_RETURN.

00553 {
00554   // Lock access for the duration of this transaction.
00555   TAO_POA_GUARD_RETURN (0);
00556 
00557   TAO_Root_POA *poa = this->find_POA_i (adapter_name, activate_it);
00558 
00559   return PortableServer::POA::_duplicate (poa);
00560 }

TAO_Root_POA * TAO_Root_POA::find_POA_i const ACE_CString child_name,
CORBA::Boolean  activate_it
[protected]
 

Definition at line 565 of file Root_POA.cpp.

References adapter_activator_, check_state(), children_, ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::find(), and CORBA::is_nil().

Referenced by TAO_Object_Adapter::activate_poa(), and find_POA().

00567 {
00568   TAO_Root_POA *child = 0;
00569   int result = this->children_.find (child_name, child);
00570 
00571 #if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT)
00572 
00573   if (result != 0)
00574     {
00575       if (activate_it)
00576         {
00577           if (!CORBA::is_nil (this->adapter_activator_.in ()))
00578             {
00579               // Check our state
00580               this->check_state ();
00581 
00582               CORBA::Boolean success = false;
00583               try
00584                 {
00585                   // ATTENTION: Trick locking here, see class header for details
00586                   TAO::Portable_Server::Non_Servant_Upcall non_servant_upcall (
00587                     *this);
00588                   ACE_UNUSED_ARG (non_servant_upcall);
00589 
00590                   // When unknown_adapter gives a system exception, the POA
00591                   // should raise OBJ_ADAPTER with standard minor code 1.
00592                   // See 11.3.9.2 of the Corba spec
00593                   success =
00594                     this->adapter_activator_->unknown_adapter (
00595                       this,
00596                       child_name.c_str ());
00597                 }
00598               catch (const ::CORBA::SystemException&)
00599                 {
00600                   throw ::CORBA::OBJ_ADAPTER (CORBA::OMGVMCID | 1,
00601                                               CORBA::COMPLETED_NO);
00602                 }
00603 
00604               if (success)
00605                 {
00606                   result = this->children_.find (child_name,
00607                                                  child);
00608                 }
00609               else
00610                 {
00611                   result = -1;
00612                 }
00613             }
00614           else
00615             {
00616               result = -1;
00617             }
00618         }
00619       else
00620         {
00621           result = -1;
00622         }
00623     }
00624 #else
00625   ACE_UNUSED_ARG (activate_it);
00626 #endif /* TAO_HAS_MINIMUM_POA == 0 */
00627 
00628   if (result == 0)
00629     {
00630       return child;
00631     }
00632   else
00633     {
00634       // Otherwise, the AdapterNonExistent exception is raised.
00635       throw PortableServer::POA::AdapterNonExistent ();
00636     }
00637 }

PortableServer::Servant TAO_Root_POA::find_servant const PortableServer::ObjectId system_id,
TAO::Portable_Server::Servant_Upcall servant_upcall,
TAO::Portable_Server::POA_Current_Impl poa_current_impl
 

Definition at line 2239 of file Root_POA.cpp.

References active_policy_strategies_, find_servant(), and TAO::Portable_Server::Active_Policy_Strategies::servant_retention_strategy().

02243 {
02244   return this->active_policy_strategies_.servant_retention_strategy()->
02245           find_servant (system_id,
02246                         servant_upcall,
02247                         poa_current_impl);
02248 }

PortableServer::Servant TAO_Root_POA::find_servant const PortableServer::ObjectId system_id  ) 
 

Definition at line 1440 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::servant_retention_strategy().

Referenced by find_servant(), TAO::Portable_Server::RequestProcessingStrategyServantLocator::locate_servant(), TAO::Portable_Server::RequestProcessingStrategyServantActivator::locate_servant(), TAO::Portable_Server::RequestProcessingStrategyDefaultServant::locate_servant(), TAO::Portable_Server::RequestProcessingStrategyAOMOnly::locate_servant(), TAO::Portable_Server::RequestProcessingStrategyServantManager::system_id_to_servant(), TAO::Portable_Server::RequestProcessingStrategyDefaultServant::system_id_to_servant(), and TAO::Portable_Server::RequestProcessingStrategyAOMOnly::system_id_to_servant().

01442 {
01443   return this->active_policy_strategies_.servant_retention_strategy()->
01444     find_servant (system_id);
01445 }

int TAO_Root_POA::find_servant_priority const PortableServer::ObjectId system_id,
CORBA::Short priority
 

Find the the servant with ObjectId , and retrieve its priority.Usually used in RT CORBA with SERVER_DECLARED priority model.

Returns:
-1 if servant does not exist, else 0 indicating the servant exists and priority successfully retrieved.

Definition at line 2251 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::servant_retention_strategy().

02254 {
02255   return this->active_policy_strategies_.servant_retention_strategy()->
02256           find_servant_priority (system_id, priority);
02257 }

ACE_INLINE const TAO_Object_Adapter::poa_name & TAO_Root_POA::folded_name void   )  const
 

Definition at line 99 of file Root_POA.inl.

Referenced by TAO_Object_Adapter::Active_Hint_Strategy::find_persistent_poa(), and set_folded_name().

00100 {
00101   return this->folded_name_;
00102 }

ACE_INLINE PortableInterceptor::AdapterState TAO_Root_POA::get_adapter_state void   ) 
 

Accessor methods to POA state.

The POA can be in one of HOLDING, ACTIVE, DISCARDING, INACTIVE and NON_EXISTENT states.

Definition at line 219 of file Root_POA.inl.

References adapter_state_.

00220 {
00221   return this->adapter_state_;
00222 }

ACE_INLINE PortableInterceptor::ObjectReferenceTemplate * TAO_Root_POA::get_adapter_template void   )  [protected]
 

Accessor methods to ObjectReferenceTemplate.

Definition at line 38 of file Root_POA.inl.

References TAO::ORT_Adapter::get_adapter_template(), ORT_adapter(), and ort_adapter_.

00039 {
00040   TAO::ORT_Adapter *adapter = this->ORT_adapter ();
00041 
00042   if (adapter)
00043     {
00044       return this->ort_adapter_->get_adapter_template();
00045     }
00046 
00047   return 0;
00048 }

ACE_INLINE PortableInterceptor::ObjectReferenceTemplate * TAO_Root_POA::get_adapter_template_i void   )  [protected]
 

Accessor methods to ObjectReferenceTemplate, non locked version.

Definition at line 51 of file Root_POA.inl.

References TAO::ORT_Adapter::get_adapter_template(), ort_adapter_, and ORT_adapter_i().

00052 {
00053   if (this->ORT_adapter_i ())
00054     {
00055       return this->ort_adapter_->get_adapter_template ();
00056     }
00057 
00058   return 0;
00059 }

ACE_INLINE PortableInterceptor::ObjectReferenceFactory * TAO_Root_POA::get_obj_ref_factory void   )  [protected]
 

Accessor methods to PortableInterceptor::ObjectReferenceFactory.

Definition at line 62 of file Root_POA.inl.

References TAO::ORT_Adapter::get_obj_ref_factory(), ORT_adapter(), and ort_adapter_.

00063 {
00064   TAO::ORT_Adapter *adapter = this->ORT_adapter ();
00065 
00066   if (adapter)
00067     {
00068       return this->ort_adapter_->get_obj_ref_factory();
00069     }
00070 
00071   return 0;
00072 }

CORBA::Policy_ptr TAO_Root_POA::get_policy CORBA::PolicyType  policy  ) 
 

Get the set policy of the given type.

Definition at line 2584 of file Root_POA.cpp.

References TAO_POA_Policy_Set::get_policy().

02585 {
02586   return this->policies_.get_policy (policy);
02587 }

PortableServer::Servant TAO_Root_POA::get_servant void   ) 
 

Implements PortableServer::POA.

Definition at line 2362 of file Root_POA.cpp.

References get_servant_i(), and TAO_POA_GUARD_RETURN.

Referenced by get_servant_i().

02363 {
02364   // Lock access for the duration of this transaction.
02365   TAO_POA_GUARD_RETURN (0);
02366 
02367   PortableServer::Servant servant = this->get_servant_i ();
02368 
02369   if (servant != 0)
02370     {
02371       // ATTENTION: Trick locking here, see class header for details
02372       TAO::Portable_Server::Non_Servant_Upcall non_servant_upcall (*this);
02373       ACE_UNUSED_ARG (non_servant_upcall);
02374 
02375       // The POA invokes _add_ref once on the Servant before returning
02376       // it. If the application uses reference counting, the caller of
02377       // get_servant is responsible for invoking _remove_ref once on
02378       // the returned Servant when it is finished with it. A
02379       // conforming caller need not invoke _remove_ref on the returned
02380       // Servant if the type of the Servant uses the default reference
02381       // counting inherited from ServantBase.
02382       servant->_add_ref ();
02383 
02384       return servant;
02385     }
02386   else
02387     {
02388       // If no servant has been associated with the POA, the NoServant
02389       // exception is raised.
02390       throw PortableServer::POA::NoServant ();
02391     }
02392 }

PortableServer::Servant TAO_Root_POA::get_servant_i void   )  [protected]
 

Definition at line 2355 of file Root_POA.cpp.

References active_policy_strategies_, get_servant(), and TAO::Portable_Server::Active_Policy_Strategies::request_processing_strategy().

Referenced by get_servant().

02356 {
02357   return this->active_policy_strategies_.request_processing_strategy()->
02358     get_servant ();
02359 }

PortableServer::ServantManager_ptr TAO_Root_POA::get_servant_manager void   ) 
 

Implements PortableServer::POA.

Definition at line 2335 of file Root_POA.cpp.

References active_policy_strategies_, TAO::Portable_Server::Active_Policy_Strategies::request_processing_strategy(), and TAO_POA_GUARD_RETURN.

02336 {
02337   // Lock access for the duration of this transaction.
02338   TAO_POA_GUARD_RETURN (PortableServer::ServantManager::_nil ());
02339 
02340   return this->active_policy_strategies_.request_processing_strategy()->
02341     get_servant_manager ();
02342 }

bool TAO_Root_POA::has_system_id void   )  const
 

Definition at line 2415 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::id_assignment_strategy().

Referenced by TAO::Portable_Server::ServantRetentionStrategyRetain::activate_object(), TAO::Portable_Server::ServantRetentionStrategyRetain::activate_object_with_id(), create_reference_i(), and create_reference_with_id_i().

02416 {
02417   return this->active_policy_strategies_.id_assignment_strategy ()->
02418     has_system_id ();
02419 }

CORBA::OctetSeq * TAO_Root_POA::id void   ) 
 

Definition at line 1510 of file Root_POA.cpp.

References ACE_NEW_THROW_EX.

01511 {
01512   CORBA::OctetSeq *id = 0;
01513   ACE_NEW_THROW_EX (id,
01514                     CORBA::OctetSeq (this->id_),
01515                     CORBA::NO_MEMORY ());
01516 
01517   return id;
01518 }

CORBA::Object_ptr TAO_Root_POA::id_to_reference const PortableServer::ObjectId oid  ) 
 

Definition at line 714 of file Root_POA.cpp.

References id_to_reference_i(), and TAO_POA_GUARD_RETURN.

Referenced by TAO::Portable_Server::POA_Current_Impl::get_reference(), and id_to_reference_i().

00715 {
00716   // Lock access for the duration of this transaction.
00717   TAO_POA_GUARD_RETURN (0);
00718 
00719   return this->id_to_reference_i (oid, true);
00720 }

CORBA::Object_ptr TAO_Root_POA::id_to_reference_i const PortableServer::ObjectId oid,
bool  indirect
 

Definition at line 1501 of file Root_POA.cpp.

References active_policy_strategies_, id_to_reference(), and TAO::Portable_Server::Active_Policy_Strategies::servant_retention_strategy().

Referenced by id_to_reference().

01504 {
01505   return this->active_policy_strategies_.servant_retention_strategy()->
01506     id_to_reference (id, indirect);
01507 }

PortableServer::Servant TAO_Root_POA::id_to_servant const PortableServer::ObjectId oid  ) 
 

Definition at line 705 of file Root_POA.cpp.

References id_to_servant_i(), and TAO_POA_GUARD_RETURN.

Referenced by id_to_servant_i().

00706 {
00707   // Lock access for the duration of this transaction.
00708   TAO_POA_GUARD_RETURN (0);
00709 
00710   return this->id_to_servant_i (oid);
00711 }

PortableServer::Servant TAO_Root_POA::id_to_servant_i const PortableServer::ObjectId oid  )  [protected]
 

Definition at line 1465 of file Root_POA.cpp.

References active_policy_strategies_, id_to_servant(), and TAO::Portable_Server::Active_Policy_Strategies::request_processing_strategy().

Referenced by id_to_servant().

01467 {
01468 
01469   PortableServer::Servant servant =
01470     this->active_policy_strategies_.request_processing_strategy()->
01471       id_to_servant (id);
01472 
01473   if (servant != 0)
01474     {
01475       // ATTENTION: Trick locking here, see class header for details
01476       TAO::Portable_Server::Non_Servant_Upcall non_servant_upcall (*this);
01477       ACE_UNUSED_ARG (non_servant_upcall);
01478 
01479       // The POA invokes _add_ref once on the Servant before returning
01480       // it. If the application uses reference counting, the caller of
01481       // id_to_servant is responsible for invoking _remove_ref once on
01482       // the returned Servant when it is finished with it. A
01483       // conforming caller need not invoke _remove_ref on the returned
01484       // Servant if the type of the Servant uses the default reference
01485       // counting inherited from ServantBase.
01486       servant->_add_ref ();
01487     }
01488 
01489   return servant;
01490 }

const char * TAO_Root_POA::imr_client_adapter_name void   )  [static]
 

Gets the value of TAO_POA_Static_Resources::imr_client_adapter_name_.

Definition at line 2608 of file Root_POA.cpp.

References TAO_POA_Static_Resources::imr_client_adapter_name_, and TAO_POA_Static_Resources::instance().

02609 {
02610   return TAO_POA_Static_Resources::instance ()->imr_client_adapter_name_.c_str();
02611 }

void TAO_Root_POA::imr_client_adapter_name const char *  name  )  [static]
 

Sets the value of TAO_POA_Static_Resources::imr_client_adapter_name_.

Definition at line 2602 of file Root_POA.cpp.

References TAO_POA_Static_Resources::imr_client_adapter_name_, and TAO_POA_Static_Resources::instance().

ACE_INLINE CORBA::ULong TAO_Root_POA::increment_outstanding_requests void   )  [protected]
 

Definition at line 195 of file Root_POA.inl.

References outstanding_requests_.

Referenced by TAO::Portable_Server::Servant_Upcall::prepare_for_upcall_i().

00196 {
00197   return ++this->outstanding_requests_;
00198 }

CORBA::Object_ptr TAO_Root_POA::invoke_key_to_object void   ) 
 

Definition at line 1884 of file Root_POA.cpp.

References TAO_Root_POA::Key_To_Object_Params::collocated_, create_object_key(), TAO_Root_POA::Key_To_Object_Params::indirect_, key_to_object(), key_to_object_params_, TAO_Root_POA::Key_To_Object_Params::priority_, TAO_Root_POA::Key_To_Object_Params::servant_, TAO_Root_POA::Key_To_Object_Params::system_id_, and TAO_Root_POA::Key_To_Object_Params::type_id_.

Referenced by invoke_key_to_object_helper_i().

01885 {
01886   PortableServer::ObjectId_var &system_id =
01887     *this->key_to_object_params_.system_id_;
01888 
01889   // Create object key.
01890   TAO::ObjectKey_var key =
01891     this->create_object_key (system_id.in ());
01892 
01893   return this->key_to_object (key.in (),
01894                               this->key_to_object_params_.type_id_,
01895                               this->key_to_object_params_.servant_,
01896                               this->key_to_object_params_.collocated_,
01897                               this->key_to_object_params_.priority_,
01898                               this->key_to_object_params_.indirect_);
01899 }

CORBA::Object_ptr TAO_Root_POA::invoke_key_to_object_helper_i const char *  repository_id,
const PortableServer::ObjectId id
 

Definition at line 1270 of file Root_POA.cpp.

References invoke_key_to_object(), TAO::ORT_Adapter::make_object(), ort_adapter_, and ORT_adapter_i().

Referenced by TAO::Portable_Server::ServantRetentionStrategyRetain::create_reference(), TAO::Portable_Server::ServantRetentionStrategyNonRetain::create_reference(), TAO::Portable_Server::ServantRetentionStrategyRetain::create_reference_with_id(), TAO::Portable_Server::ServantRetentionStrategyNonRetain::create_reference_with_id(), TAO::Portable_Server::ServantRetentionStrategyRetain::id_to_reference(), and TAO::Portable_Server::ServantRetentionStrategyRetain::servant_to_reference().

01272 {
01273   const PortableInterceptor::ObjectId &user_oid =
01274     reinterpret_cast <const PortableInterceptor::ObjectId &>(id);
01275 
01276   // Ask the ORT to create the object.
01277   if (this->ORT_adapter_i ())
01278     {
01279       // Ask the ORT to create the object.
01280       return this->ort_adapter_->make_object (repository_id,
01281                                               user_oid);
01282     }
01283   else
01284     {
01285       return this->invoke_key_to_object ();
01286     }
01287 }

CORBA::Boolean TAO_Root_POA::is_persistent void   )  const
 

Definition at line 1241 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::lifespan_strategy().

Referenced by set_id().

01242 {
01243   return active_policy_strategies_.lifespan_strategy()->is_persistent ();
01244 }

bool TAO_Root_POA::is_poa_generated CORBA::Object_ptr  reference,
PortableServer::ObjectId system_id
 

Definition at line 1371 of file Root_POA.cpp.

References parse_key(), TAO_Object_Adapter::poa_name, root(), system_id(), system_name(), and validate_lifespan().

Referenced by reference_to_id(), and reference_to_servant_i().

01373 {
01374   TAO::ObjectKey_var key = reference->_key ();
01375 
01376   TAO_Object_Adapter::poa_name poa_system_name;
01377   CORBA::Boolean is_root = false;
01378   CORBA::Boolean is_persistent = false;
01379   CORBA::Boolean is_system_id = false;
01380   TAO::Portable_Server::Temporary_Creation_Time poa_creation_time;
01381 
01382   int const result = this->parse_key (key.in (),
01383                                       poa_system_name,
01384                                       system_id,
01385                                       is_root,
01386                                       is_persistent,
01387                                       is_system_id,
01388                                       poa_creation_time);
01389   if (result != 0 ||
01390       !this->root () &&
01391       poa_system_name != this->system_name () ||
01392       is_root != this->root () ||
01393       is_system_id != this->system_id () ||
01394       !this->validate_lifespan (is_persistent, poa_creation_time))
01395     {
01396       // The passed reference is NOT generated by this POA
01397       return false;
01398     }
01399   else
01400     {
01401       // The passed reference is generated by this POA
01402       return true;
01403     }
01404 }

int TAO_Root_POA::is_poa_generated_id const PortableServer::ObjectId id  ) 
 

Definition at line 1805 of file Root_POA.cpp.

References ACE_OS::strncmp().

Referenced by TAO::Portable_Server::ServantRetentionStrategyRetain::activate_object_with_id(), and create_reference_with_id_i().

01806 {
01807 #if defined (POA_NAME_IN_POA_GENERATED_ID)
01808 
01809   // Grab the buffer
01810   const char *id_buffer = (const char *) id.get_buffer ();
01811 
01812   // Check to see if the POA name is the first part of the id
01813   return
01814     this->name_.length () < id.length () &&
01815     ACE_OS::strncmp (id_buffer,
01816                      this->name_.c_str (),
01817                      this->name_.length ()) == 0;
01818 #else /* POA_NAME_IN_POA_GENERATED_ID */
01819 
01820   ACE_UNUSED_ARG (id);
01821   return 1;
01822 
01823 #endif /* POA_NAME_IN_POA_GENERATED_ID */
01824 }

bool TAO_Root_POA::is_servant_activation_allowed PortableServer::Servant  servant,
bool &  wait_occurred_restart_call
 

Definition at line 2407 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::id_uniqueness_strategy().

Referenced by TAO::Portable_Server::ServantRetentionStrategyRetain::activate_object(), TAO::Portable_Server::ServantRetentionStrategyRetain::activate_object_with_id(), and TAO::Portable_Server::RequestProcessingStrategyServantActivator::locate_servant().

02409 {
02410   return this->active_policy_strategies_.id_uniqueness_strategy ()->
02411     is_servant_activation_allowed (servant, wait_occurred_restart_call);
02412 }

int TAO_Root_POA::is_servant_active PortableServer::Servant  servant,
bool &  wait_occurred_restart_call
 

Definition at line 2472 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::servant_retention_strategy().

Referenced by TAO::Portable_Server::IdUniquenessStrategyUnique::is_servant_activation_allowed().

02475 {
02476   return this->active_policy_strategies_.servant_retention_strategy ()->
02477     is_servant_in_map (servant, wait_occurred_restart_call);
02478 }

CORBA::Object_ptr TAO_Root_POA::key_to_object const TAO::ObjectKey key,
const char *  type_id,
TAO_ServantBase servant,
CORBA::Boolean  collocated,
CORBA::Short  priority,
bool  indirect
[protected]
 

Wrapper for the ORB's key_to_object that will alter the object pointer if the ImplRepo is used.

Definition at line 1902 of file Root_POA.cpp.

References CORBA::Object::_nil(), ACE_CString, ACE_DEBUG, ACE_ERROR, ACE_NEW_THROW_EX, ACE_TEXT_CHAR_TO_TCHAR, active_policy_strategies_, TAO_ORB_Core::check_shutdown(), TAO::ObjectKey::encode_sequence_to_string(), TAO_ORB_Core::implrepo_service(), TAO_ORB_Core::imr_endpoints_in_ior(), CORBA::Object::ior(), CORBA::is_nil(), key_to_stub_i(), TAO::Portable_Server::Active_Policy_Strategies::lifespan_strategy(), LM_DEBUG, LM_ERROR, TAO_ORB_Core::optimize_collocation_objects(), TAO_ORB_Core::orb(), orb_core(), TAO_Stub_Auto_Ptr::release(), TAO_Stub::servant_orb(), ACE_OS::strchr(), ACE_OS::strstr(), and TAO_debug_level.

Referenced by invoke_key_to_object().

01908 {
01909   // Check if the ORB is still running, otherwise throw an exception.
01910   // @@ What if the ORB was destroyed?  In that case we shouldn't even
01911   //    get here!
01912   this->orb_core_.check_shutdown ();
01913 
01914   //
01915   // ImplRepo related.
01916   //
01917 #if (TAO_HAS_MINIMUM_CORBA == 0)
01918 
01919   CORBA::Object_ptr obj = CORBA::Object::_nil ();
01920 
01921   if (indirect && this->active_policy_strategies_.lifespan_strategy()->use_imr ()
01922          && this->orb_core ().imr_endpoints_in_ior ())
01923     {
01924       // Check to see if we alter the IOR.
01925       CORBA::Object_var imr = this->orb_core ().implrepo_service ();
01926 
01927       if (CORBA::is_nil (imr.in ())
01928           || !imr->_stubobj ()
01929           || !imr->_stubobj ()->profile_in_use ())
01930         {
01931           if (TAO_debug_level > 1)
01932             {
01933               ACE_DEBUG ((LM_DEBUG,
01934                           "Missing ImR IOR, will not use the ImR\n"));
01935             }
01936           goto orbkey;
01937         }
01938 
01939       CORBA::String_var imr_str =
01940         imr->_stubobj ()->profile_in_use ()->to_string ();
01941 
01942       if (TAO_debug_level > 0)
01943         ACE_DEBUG ((LM_DEBUG,
01944                     "IMR IOR = \n%s\n",
01945                     ACE_TEXT_CHAR_TO_TCHAR (imr_str.in ())));
01946 
01947       // Search for "corbaloc:" alone, without the protocol.  This code
01948       // should be protocol neutral.
01949       const char corbaloc[] = "corbaloc:";
01950       char *pos = ACE_OS::strstr (imr_str.inout (), corbaloc);
01951       pos = ACE_OS::strchr (pos + sizeof (corbaloc), ':');
01952 
01953       pos = ACE_OS::strchr (pos + 1,
01954                             imr->_stubobj ()->profile_in_use ()->object_key_delimiter ());
01955 
01956       if (pos)
01957         pos[1] = 0;  // Crop the string.
01958       else
01959         {
01960           if (TAO_debug_level > 0)
01961             ACE_ERROR ((LM_ERROR,
01962                         "Could not parse ImR IOR, skipping ImRification\n"));
01963           goto orbkey;
01964         }
01965 
01966       ACE_CString ior (imr_str.in ());
01967 
01968       // Add the key.
01969 
01970       CORBA::String_var key_str;
01971       TAO::ObjectKey::encode_sequence_to_string (key_str.inout (), key);
01972 
01973       ior += key_str.in ();
01974 
01975       if (TAO_debug_level > 0)
01976         ACE_DEBUG ((LM_DEBUG,
01977                     "ImR-ified IOR = \n%s\n",
01978                     ACE_TEXT_CHAR_TO_TCHAR (ior.c_str ())));
01979 
01980       obj = this->orb_core_.orb ()->string_to_object (ior.c_str ());
01981 
01982       return obj;
01983     }
01984 
01985 orbkey:
01986 
01987 #else
01988   ACE_UNUSED_ARG (indirect);
01989 #endif /* TAO_HAS_MINIMUM_CORBA */
01990 
01991   TAO_Stub *data = this->key_to_stub_i (key, type_id, priority);
01992 
01993   TAO_Stub_Auto_Ptr safe_data (data);
01994 
01995   CORBA::Object_ptr tmp;
01996 
01997   if (this->orb_core_.optimize_collocation_objects ())
01998     {
01999       ACE_NEW_THROW_EX (tmp, CORBA::Object (data,
02000                                             collocated,
02001                                             servant),
02002                         CORBA::INTERNAL ());
02003 
02004     }
02005   else
02006     {
02007       ACE_NEW_THROW_EX (tmp,
02008                         CORBA::Object (data,
02009                                        collocated),
02010                         CORBA::INTERNAL ());
02011     }
02012 
02013   data->servant_orb (this->orb_core_.orb ());
02014 
02015   // Transfer ownership to the Object.
02016   (void) safe_data.release ();
02017 
02018   return tmp;
02019 }

TAO_Stub * TAO_Root_POA::key_to_stub const TAO::ObjectKey key,
const char *  type_id,
CORBA::Short  priority
 

Create the correct stub, properly initialized with the attributes and policies attached to the current POA.

Definition at line 2022 of file Root_POA.cpp.

References TAO_ORB_Core::check_shutdown(), and key_to_stub_i().

02025 {
02026   // Check if the ORB is still running, otherwise throw an exception.
02027   // @@ What if the ORB was destroyed?  In that case we shouldn't even
02028   //    get here!
02029   this->orb_core_.check_shutdown ();
02030 
02031   return this->key_to_stub_i (key, type_id, priority);
02032 }

TAO_Stub * TAO_Root_POA::key_to_stub_i const TAO::ObjectKey key,
const char *  type_id,
CORBA::Short  priority
[protected, virtual]
 

Like key_to_stub() but assume that the ORB is not shutting down.

Definition at line 2035 of file Root_POA.cpp.

References TAO_Thread_Lane_Resources::acceptor_registry(), ACE_NEW_RETURN, client_exposed_policies(), TAO_Acceptor_Filter_Factory::create_object(), create_stub_object(), filter_factory_, ACE_Dynamic_Service< TYPE >::instance(), and TAO_ORB_Core::lane_resources().

Referenced by key_to_object(), and key_to_stub().

02038 {
02039   CORBA::PolicyList_var client_exposed_policies =
02040     this->client_exposed_policies (priority);
02041 
02042   TAO_Acceptor_Filter* filter = 0;
02043 
02044 #if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
02045   if (this->filter_factory_ == 0)
02046     this->filter_factory_
02047       = ACE_Dynamic_Service<TAO_Acceptor_Filter_Factory>::instance ("TAO_Acceptor_Filter_Factory");
02048 
02049   filter =
02050     this->filter_factory_->create_object (this->poa_manager_);
02051 #else
02052   ACE_NEW_RETURN (filter,
02053                   TAO_Default_Acceptor_Filter (),
02054                   0);
02055 #endif
02056 
02057   // Give ownership to the auto pointer.
02058   auto_ptr<TAO_Acceptor_Filter> new_filter (filter);
02059 
02060   TAO_Stub *data =
02061     this->create_stub_object (
02062       key,
02063       type_id,
02064       client_exposed_policies._retn (),
02065       filter,
02066       this->orb_core_.lane_resources ().acceptor_registry ());
02067 
02068   return data;
02069 }

PortableServer::Servant TAO_Root_POA::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
[protected]
 

Definition at line 1521 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::request_processing_strategy().

01527 {
01528   return this->active_policy_strategies_.request_processing_strategy()->
01529     locate_servant (operation,
01530                     system_id,
01531                     servant_upcall,
01532                     poa_current_impl,
01533                     wait_occurred_restart_call
01534                    );
01535 }

TAO_SERVANT_LOCATION TAO_Root_POA::locate_servant_i const PortableServer::ObjectId id,
PortableServer::Servant servant
[protected]
 

Definition at line 2223 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::request_processing_strategy().

Referenced by TAO_Object_Adapter::find_servant_i(), TAO_Object_Adapter::locate_servant_i(), and TAO::Portable_Server::Servant_Upcall::prepare_for_upcall_i().

02225 {
02226   return this->active_policy_strategies_.request_processing_strategy()->
02227           locate_servant (system_id, servant);
02228 }

ACE_INLINE ACE_Lock & TAO_Root_POA::lock void   ) 
 

Definition at line 14 of file Root_POA.inl.

00015 {
00016   return this->lock_;
00017 }

ACE_INLINE const ACE_CString & TAO_Root_POA::name void   )  const
 

Definition at line 87 of file Root_POA.inl.

Referenced by TAO_Object_Adapter::activate_poa().

00088 {
00089   return this->name_;
00090 }

ACE_INLINE char TAO_Root_POA::name_separator void   )  [static]
 

Definition at line 111 of file Root_POA.inl.

Referenced by TAO_Object_Adapter::poa_name_iterator::operator++(), and set_folded_name().

00112 {
00113   return '\0';
00114 }

ACE_INLINE CORBA::ULong TAO_Root_POA::name_separator_length void   )  [static]
 

Definition at line 117 of file Root_POA.inl.

Referenced by TAO_Object_Adapter::poa_name_iterator::operator *(), and set_folded_name().

00118 {
00119   return sizeof (char);
00120 }

TAO_Network_Priority_Hook * TAO_Root_POA::network_priority_hook void   ) 
 

obtain a handle to the network priority hooks

Definition at line 2487 of file Root_POA.cpp.

References network_priority_hook_.

Referenced by TAO_Default_Servant_Dispatcher::pre_invoke_remote_request().

02488 {
02489   return this->network_priority_hook_;
02490 }

TAO_Root_POA * 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
[protected, virtual]
 

Template method for creating new POA's of this type.

Definition at line 449 of file Root_POA.cpp.

References ACE_NEW_THROW_EX, PortableServer::POAManager_ptr, and String.

Referenced by create_POA_i().

00457 {
00458   TAO_Regular_POA *poa = 0;
00459 
00460   ACE_NEW_THROW_EX (poa,
00461                     TAO_Regular_POA (name,
00462                              poa_manager,
00463                              policies,
00464                              parent,
00465                              lock,
00466                              thread_lock,
00467                              orb_core,
00468                              object_adapter),
00469                     CORBA::NO_MEMORY ());
00470 
00471   return poa;
00472 }

ACE_INLINE char TAO_Root_POA::non_root_key_char void   )  [static, protected]
 

Definition at line 165 of file Root_POA.inl.

Referenced by parse_key(), TAO_Regular_POA::root_key_type(), and set_id().

00166 {
00167   return 'N';
00168 }

TAO_Object_Adapter & TAO_Root_POA::object_adapter void   ) 
 

Definition at line 1878 of file Root_POA.cpp.

Referenced by complete_destruction_i(), create_POA_i(), destroy_i(), TAO::Portable_Server::ServantRetentionStrategyRetain::is_servant_in_map(), TAO::Portable_Server::ServantRetentionStrategyRetain::is_user_id_in_map(), TAO::Portable_Server::RequestProcessingStrategyServantLocator::locate_servant(), TAO::Portable_Server::POA_Guard::POA_Guard(), TAO_Root_POA(), and wait_for_completions().

01879 {
01880   return *this->object_adapter_;
01881 }

ACE_INLINE TAO_ORB_Core & TAO_Root_POA::orb_core void   )  const
 

ORB Core for POA.

Reimplemented from CORBA::Object.

Definition at line 213 of file Root_POA.inl.

Referenced by key_to_object(), TAO::Portable_Server::POA_Current_Impl::orb_core(), and TAO::Portable_Server::LifespanStrategyPersistent::strategy_init().

00214 {
00215   return this->orb_core_;
00216 }

TAO::ORT_Adapter * TAO_Root_POA::ORT_adapter void   )  [protected]
 

Get the ORT adapter, in case there is no adapter yet, this method will try to create one and hold the POA lock

Definition at line 2530 of file Root_POA.cpp.

References ort_adapter_, ORT_adapter_i(), and TAO_POA_GUARD_RETURN.

Referenced by get_adapter_template(), get_obj_ref_factory(), and set_obj_ref_factory().

02531 {
02532   if (this->ort_adapter_ != 0)
02533     return this->ort_adapter_;
02534 
02535   // Lock access for the duration of this transaction.
02536   TAO_POA_GUARD_RETURN (0);
02537 
02538   // DCL ..
02539   if (this->ort_adapter_ != 0)
02540     {
02541       return this->ort_adapter_;
02542     }
02543 
02544   return this->ORT_adapter_i ();
02545 }

TAO::ORT_Adapter_Factory * TAO_Root_POA::ORT_adapter_factory void   )  [protected]
 

Definition at line 2260 of file Root_POA.cpp.

References TAO_ORB_Core::configuration(), and ort_adapter_factory_name().

Referenced by destroy_i(), and ORT_adapter_i().

const char * TAO_Root_POA::ort_adapter_factory_name void   )  [static]
 

Definition at line 2596 of file Root_POA.cpp.

References TAO_POA_Static_Resources::instance(), and TAO_POA_Static_Resources::ort_adapter_factory_name_.

Referenced by ORT_adapter_factory().

02597 {
02598   return TAO_POA_Static_Resources::instance ()->ort_adapter_factory_name_.c_str();
02599 }

void TAO_Root_POA::ort_adapter_factory_name const char *  name  )  [static]
 

Definition at line 2577 of file Root_POA.cpp.

References TAO_POA_Static_Resources::instance(), and TAO_POA_Static_Resources::ort_adapter_factory_name_.

02578 {
02579   TAO_POA_Static_Resources::instance ()->ort_adapter_factory_name_ =
02580     name;
02581 }

TAO::ORT_Adapter * TAO_Root_POA::ORT_adapter_i void   )  [protected]
 

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

Definition at line 2268 of file Root_POA.cpp.

References TAO::ORT_Adapter::activate(), adapter_name(), adapter_name_i(), TAO::ORT_Adapter_Factory::create(), TAO_ORB_Core::orbid(), ort_adapter_, and ORT_adapter_factory().

Referenced by destroy_i(), get_adapter_template_i(), invoke_key_to_object_helper_i(), and ORT_adapter().

02269 {
02270   if (this->ort_adapter_ != 0)
02271     return this->ort_adapter_;
02272 
02273   try
02274     {
02275       TAO::ORT_Adapter_Factory * ort_ap_factory = this->ORT_adapter_factory ();
02276 
02277       if (!ort_ap_factory)
02278         return 0;
02279 
02280       // Get the full adapter name of this POA, do this before we
02281       // create the adapter so that in case this fails, we just
02282       // return 0 and not a not activated adapter
02283       PortableInterceptor::AdapterName *adapter_name = this->adapter_name_i ();
02284 
02285       this->ort_adapter_ = ort_ap_factory->create ();
02286 
02287       if (!this->ort_adapter_)
02288         return 0;
02289 
02290       // @todo We have to look at this, we activate it but hold the POA lock,
02291       // in case we are called by ORT_adapter, we shouldn't keep the lock
02292       // here, but then the ort_adapter should be guarded against multiple
02293       // activations.
02294       this->ort_adapter_->activate (this->orb_core_.server_id (),
02295                                     this->orb_core_.orbid (),
02296                                     adapter_name,
02297                                     this);
02298     }
02299   catch (const ::CORBA::Exception& ex)
02300     {
02301       ex._tao_print_exception (
02302         "(%P|%t) Cannot initialize the "
02303         "object_reference_template_adapter\n");
02304     }
02305 
02306   return this->ort_adapter_;
02307 }

ACE_INLINE void TAO_Root_POA::outstanding_requests CORBA::ULong  new_outstanding_requests  )  [protected]
 

Definition at line 189 of file Root_POA.inl.

References outstanding_requests_.

00190 {
00191   this->outstanding_requests_ = new_outstanding_requests;
00192 }

ACE_INLINE CORBA::ULong TAO_Root_POA::outstanding_requests void   )  const
 

Definition at line 183 of file Root_POA.inl.

References outstanding_requests_.

Referenced by TAO::Portable_Server::Non_Servant_Upcall::~Non_Servant_Upcall().

00184 {
00185   return this->outstanding_requests_;
00186 }

int TAO_Root_POA::parse_ir_object_key const TAO::ObjectKey object_key,
PortableServer::ObjectId user_id
[static]
 

Calls protected static method used when POACurrent is not appropriate.

Definition at line 1859 of file Root_POA.cpp.

References parse_key(), and TAO_Object_Adapter::poa_name.

01861 {
01862   TAO_Object_Adapter::poa_name poa_system_name;
01863   CORBA::Boolean is_root = false;
01864   CORBA::Boolean is_persistent = false;
01865   CORBA::Boolean is_system_id = false;
01866   TAO::Portable_Server::Temporary_Creation_Time poa_creation_time;
01867 
01868   return TAO_Root_POA::parse_key (object_key,
01869                                   poa_system_name,
01870                                   user_id,
01871                                   is_root,
01872                                   is_persistent,
01873                                   is_system_id,
01874                                   poa_creation_time);
01875 }

int TAO_Root_POA::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
[static, protected]
 

Definition at line 1539 of file Root_POA.cpp.

References ACE_NTOHL, TAO::Portable_Server::Temporary_Creation_Time::creation_time(), TAO::Portable_Server::Creation_Time::creation_time_length(), TAO::unbounded_value_sequence< T >::get_buffer(), TAO::unbounded_value_sequence< T >::length(), ACE_OS::memcpy(), non_root_key_char(), persistent_key_char(), persistent_key_type_length(), TAO_Object_Adapter::poa_name, root_key_char(), root_key_type_length(), system_id_key_char(), system_id_key_type_length(), TAO_Active_Object_Map::system_id_size(), TAO_OBJECTKEY_PREFIX_SIZE, transient_key_char(), TAO_Object_Adapter::transient_poa_name_size(), and user_id_key_char().

Referenced by is_poa_generated(), TAO_Object_Adapter::locate_poa(), and parse_ir_object_key().

01546 {
01547   // Get the object key octets.
01548   const CORBA::Octet *key_data = key.get_buffer ();
01549 
01550   // Skip the object key prefix since we have already checked for this.
01551   CORBA::ULong starting_at = TAO_OBJECTKEY_PREFIX_SIZE;
01552 
01553   // Check the root indicator.
01554   char root_key_type = key_data[starting_at];
01555   if (root_key_type == TAO_Root_POA::root_key_char ())
01556     {
01557       is_root = true;
01558     }
01559   else if (root_key_type == TAO_Root_POA::non_root_key_char ())
01560     {
01561       is_root = false;
01562     }
01563   else
01564     {
01565       // Incorrect key
01566       return -1;
01567     }
01568 
01569   // Skip past the system id indicator
01570   starting_at += TAO_Root_POA::root_key_type_length ();
01571 
01572   // Check the system id indicator.
01573   char system_id_key_type = key_data[starting_at];
01574   if (system_id_key_type == TAO_Root_POA::system_id_key_char ())
01575     {
01576       is_system_id = true;
01577     }
01578   else if (system_id_key_type == TAO_Root_POA::user_id_key_char ())
01579     {
01580       is_system_id = false;
01581     }
01582   else
01583     {
01584       // Incorrect key
01585       return -1;
01586     }
01587 
01588   // Skip past the system id indicator
01589   starting_at += TAO_Root_POA::system_id_key_type_length ();
01590 
01591   // Check the persistence indicator
01592   char persistent_key_type = key_data[starting_at];
01593   if (persistent_key_type == TAO_Root_POA::persistent_key_char ())
01594     {
01595       is_persistent = true;
01596     }
01597   else if (persistent_key_type == TAO_Root_POA::transient_key_char ())
01598     {
01599       is_persistent = false;
01600     }
01601   else
01602     {
01603       // Incorrect key
01604       return -1;
01605     }
01606 
01607   // Skip past the persistent indicator
01608   starting_at += TAO_Root_POA::persistent_key_type_length ();
01609 
01610 #if (POA_NO_TIMESTAMP == 0)
01611   // Grab the timestamp for transient POAs.
01612   if (!is_persistent)
01613     {
01614       // Take the creation time for the timestamp
01615       poa_creation_time.creation_time (key_data + starting_at);
01616 
01617       // Skip past the timestamp
01618       starting_at += TAO::Portable_Server::Creation_Time::creation_time_length ();
01619     }
01620 #else
01621   ACE_UNUSED_ARG (poa_creation_time);
01622 #endif /* POA_NO_TIMESTAMP */
01623 
01624   // Calculate the size of the POA name.
01625   CORBA::ULong poa_name_size = 0;
01626   if (!is_persistent)
01627     {
01628       // Transient POAs have fixed size.
01629       poa_name_size = TAO_Object_Adapter::transient_poa_name_size ();
01630     }
01631   else if (is_system_id)
01632     {
01633       // System ids have fixed size.
01634       poa_name_size = static_cast <CORBA::ULong>
01635                                   (key.length () - starting_at -
01636                                    TAO_Active_Object_Map::system_id_size ());
01637     }
01638   else
01639     {
01640       // Get the size from the object key.
01641       ACE_OS::memcpy (&poa_name_size,
01642                       key_data + starting_at,
01643                       sizeof (poa_name_size));
01644       poa_name_size = ACE_NTOHL (poa_name_size);
01645 
01646       starting_at += sizeof (poa_name_size);
01647     }
01648 
01649   // Grep the name if there is a name
01650   if (!is_root)
01651     {
01652       poa_system_name.replace (poa_name_size,
01653                                poa_name_size,
01654                                (CORBA::Octet *) key_data + starting_at,
01655                                0);
01656 
01657       starting_at += poa_name_size;
01658     }
01659 
01660   // The rest is the system id.
01661   CORBA::ULong system_id_size = key.length () - starting_at;
01662 
01663   // Reset <system_id>.
01664   system_id.length (system_id_size);
01665   CORBA::Octet * buf = system_id.get_buffer ();
01666   ACE_OS::memcpy (buf, key_data + starting_at, system_id_size);
01667 
01668   // Success
01669   return 0;
01670 }

ACE_INLINE CORBA::Boolean TAO_Root_POA::persistent void   )  [protected]
 

Definition at line 81 of file Root_POA.inl.

References TAO::Portable_Server::Cached_Policies::lifespan().

Referenced by TAO_Object_Adapter::bind_poa(), and TAO_Object_Adapter::unbind_poa().

00082 {
00083   return (this->cached_policies_.lifespan () == PortableServer::PERSISTENT);
00084 }

ACE_INLINE char TAO_Root_POA::persistent_key_char void   )  [static, protected]
 

Definition at line 123 of file Root_POA.inl.

Referenced by parse_key().

00124 {
00125   return 'P';
00126 }

ACE_INLINE CORBA::ULong TAO_Root_POA::persistent_key_type_length void   )  [static, protected]
 

Definition at line 135 of file Root_POA.inl.

Referenced by parse_key().

00136 {
00137   return sizeof (char);
00138 }

void TAO_Root_POA::poa_activated_hook  )  [virtual]
 

Hook - The POA has been (or is being) activated.

These hooks are needed by the CSD strategy to override and no-ops by default.

Definition at line 2669 of file Root_POA.cpp.

02670 {
02671 }

void TAO_Root_POA::poa_deactivated_hook  )  [virtual]
 

Hook - The POA has been deactivated.

Definition at line 2674 of file Root_POA.cpp.

Referenced by TAO_POA_Manager::deactivate_i(), and destroy_i().

02675 {
02676 }

ACE_INLINE TAO_POA_Policy_Set & TAO_Root_POA::policies void   ) 
 

Accessor for POA policies.

Definition at line 20 of file Root_POA.inl.

00021 {
00022   return this->policies_;
00023 }

void TAO_Root_POA::post_invoke_servant_cleanup const PortableServer::ObjectId system_id,
const TAO::Portable_Server::Servant_Upcall servant_upcall
 

Definition at line 2457 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::request_processing_strategy().

Referenced by TAO::Portable_Server::Servant_Upcall::post_invoke_servant_cleanup().

02460 {
02461   this->active_policy_strategies_.request_processing_strategy ()->
02462     post_invoke_servant_cleanup (system_id, servant_upcall);
02463 }

TAO::Portable_Server::Cached_Policies::PriorityModel TAO_Root_POA::priority_model void   )  const
 

Definition at line 2493 of file Root_POA.cpp.

References TAO::Portable_Server::Cached_Policies::priority_model().

02494 {
02495   return cached_policies_.priority_model ();
02496 }

int TAO_Root_POA::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
 

Definition at line 2422 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::servant_retention_strategy().

02427 {
02428   return this->active_policy_strategies_.servant_retention_strategy ()->
02429     rebind_using_user_id_and_system_id (servant,
02430                                         user_id,
02431                                         system_id,
02432                                         servant_upcall);
02433 }

PortableServer::ObjectId * TAO_Root_POA::reference_to_id CORBA::Object_ptr  reference  ) 
 

Definition at line 1407 of file Root_POA.cpp.

References active_policy_strategies_, CORBA::is_nil(), is_poa_generated(), TAO::Portable_Server::Active_Policy_Strategies::servant_retention_strategy(), and TAO_POA_GUARD_RETURN.

01409 {
01410   // Make sure that the reference is valid.
01411   if (CORBA::is_nil (reference))
01412     {
01413       throw ::CORBA::BAD_PARAM ();
01414     }
01415 
01416   // The WrongPolicy exception is declared to allow future extensions.
01417 
01418   // This operation is valid only if the reference was created by the
01419   // POA on which the operation is being performed.  If the object
01420   // reference was not created by this POA, the WrongAdapter exception
01421   // is raised.
01422   PortableServer::ObjectId system_id;
01423   bool const is_generated = this->is_poa_generated (reference,
01424                                                     system_id
01425                                                    );
01426 
01427   if (!is_generated)
01428     {
01429       throw PortableServer::POA::WrongAdapter ();
01430     }
01431 
01432   // Lock access for the duration of this transaction.
01433   TAO_POA_GUARD_RETURN (0);
01434 
01435   return this->active_policy_strategies_.servant_retention_strategy()->
01436     system_id_to_object_id (system_id);
01437 }

PortableServer::Servant TAO_Root_POA::reference_to_servant CORBA::Object_ptr  reference  ) 
 

Definition at line 678 of file Root_POA.cpp.

References reference_to_servant_i(), and TAO_POA_GUARD_RETURN.

00679 {
00680   // Lock access for the duration of this transaction.
00681   TAO_POA_GUARD_RETURN (0);
00682 
00683   return this->reference_to_servant_i (reference);
00684 }

PortableServer::Servant TAO_Root_POA::reference_to_servant_i CORBA::Object_ptr  reference  )  [protected]
 

Definition at line 1328 of file Root_POA.cpp.

References active_policy_strategies_, CORBA::is_nil(), is_poa_generated(), and TAO::Portable_Server::Active_Policy_Strategies::request_processing_strategy().

Referenced by reference_to_servant().

01329 {
01330   // Make sure that the reference is valid.
01331   if (CORBA::is_nil (reference))
01332     {
01333       throw ::CORBA::BAD_PARAM ();
01334     }
01335 
01336   PortableServer::ObjectId system_id;
01337   bool const is_generated =
01338     this->is_poa_generated (reference, system_id);
01339 
01340   if (!is_generated)
01341     {
01342       // In case this object reference is not generated by this POA throw
01343       // an exception
01344       throw PortableServer::POA::WrongAdapter ();
01345     }
01346 
01347   PortableServer::Servant servant =
01348     this->active_policy_strategies_.request_processing_strategy()->
01349       system_id_to_servant (system_id);
01350 
01351   if (servant != 0)
01352     {
01353       // ATTENTION: Trick locking here, see class header for details
01354       TAO::Portable_Server::Non_Servant_Upcall non_servant_upcall (*this);
01355       ACE_UNUSED_ARG (non_servant_upcall);
01356 
01357       // The POA invokes _add_ref once on the Servant before returning
01358       // it. If the application uses reference counting, the caller of
01359       // id_to_servant is responsible for invoking _remove_ref once on
01360       // the returned Servant when it is finished with it. A
01361       // conforming caller need not invoke _remove_ref on the returned
01362       // Servant if the type of the Servant uses the default reference
01363       // counting inherited from ServantBase.
01364       servant->_add_ref ();
01365     }
01366 
01367   return servant;
01368 }

void TAO_Root_POA::remove_from_parent_i void   )  [protected, virtual]
 

Reimplemented in TAO_Regular_POA.

Definition at line 749 of file Root_POA.cpp.

Referenced by destroy_i().

00750 {
00751   // The root poa has no parent, so this is a noop
00752 }

CORBA::Boolean TAO_Root_POA::root void   )  const [protected, virtual]
 

Reimplemented in TAO_Regular_POA.

Definition at line 2524 of file Root_POA.cpp.

Referenced by is_poa_generated().

02525 {
02526   return true;
02527 }

ACE_INLINE char TAO_Root_POA::root_key_char void   )  [static, protected]
 

Definition at line 159 of file Root_POA.inl.

Referenced by parse_key(), root_key_type(), and set_id().

00160 {
00161   return 'R';
00162 }

ACE_INLINE char TAO_Root_POA::root_key_type void   )  [protected, virtual]
 

Reimplemented in TAO_Regular_POA.

Definition at line 171 of file Root_POA.inl.

References root_key_char().

Referenced by TAO_Regular_POA::root_key_type().

00172 {
00173   return TAO_Root_POA::root_key_char ();
00174 }

ACE_INLINE CORBA::ULong TAO_Root_POA::root_key_type_length void   )  [static, protected]
 

Definition at line 177 of file Root_POA.inl.

Referenced by parse_key(), and set_id().

00178 {
00179   return sizeof (char);
00180 }

void TAO_Root_POA::save_ior_component const IOP::TaggedComponent component  ) 
 

Store the given TaggedComponent for eventual insertion into all object reference profiles.

Definition at line 2096 of file Root_POA.cpp.

References tagged_component_.

02097 {
02098   CORBA::ULong const old_len = this->tagged_component_.length ();
02099 
02100   this->tagged_component_.length (old_len + 1);
02101   this->tagged_component_[old_len] = component;
02102 }

void TAO_Root_POA::save_ior_component_and_profile_id const IOP::TaggedComponent component,
IOP::ProfileId  profile_id
 

Store the given TaggedComponent for eventual insertion into all object reference profiles with the given ProfileId.

Definition at line 2106 of file Root_POA.cpp.

References profile_id_array_, and tagged_component_id_.

02108 {
02109   // The length of this->tagged_component_id_ is the same as the
02110   // length of the profile_id_array_ since we are trying to make a
02111   // one-to-one link between these two arrays. So, whenever
02112   // this->tagged_component_id_ is increased, we need to increase the
02113   // size of this->profile_id_array_ also.
02114 
02115   CORBA::ULong const old_len = this->tagged_component_id_.length ();
02116 
02117   CORBA::ULong const new_len = old_len + 1;
02118 
02119   this->tagged_component_id_.length (new_len);
02120   this->tagged_component_id_[old_len] = component;
02121 
02122   this->profile_id_array_.size (new_len);
02123   this->profile_id_array_[old_len] = profile_id;
02124 }

void TAO_Root_POA::servant_activated_hook PortableServer::Servant  servant,
const PortableServer::ObjectId oid
[virtual]
 

Hook - A servant has been activated.

Definition at line 2679 of file Root_POA.cpp.

Referenced by TAO::Portable_Server::ServantRetentionStrategyRetain::activate_object(), TAO::Portable_Server::ServantRetentionStrategyRetain::activate_object_with_id(), TAO::Portable_Server::ServantRetentionStrategyRetain::servant_to_system_id_i(), and TAO::Portable_Server::ServantRetentionStrategyRetain::servant_to_user_id().

02681 {
02682 }

void TAO_Root_POA::servant_deactivated_hook PortableServer::Servant  servant,
const PortableServer::ObjectId oid
[virtual]
 

Hook - A servant has been deactivated.

Definition at line 2685 of file Root_POA.cpp.

Referenced by TAO::Portable_Server::ServantRetentionStrategyRetain::deactivate_map_entry().

02687 {
02688 }

ACE_INLINE TAO_SYNCH_CONDITION & TAO_Root_POA::servant_deactivation_condition void   ) 
 

Definition at line 231 of file Root_POA.inl.

References servant_deactivation_condition_.

Referenced by TAO::Portable_Server::ServantRetentionStrategyRetain::is_servant_in_map(), and TAO::Portable_Server::ServantRetentionStrategyRetain::is_user_id_in_map().

00232 {
00233   return servant_deactivation_condition_;
00234 }

CORBA::Boolean TAO_Root_POA::servant_has_remaining_activations PortableServer::Servant  servant  ) 
 

Definition at line 2436 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::servant_retention_strategy().

Referenced by TAO::Portable_Server::RequestProcessingStrategyServantActivator::etherealize_servant().

02437 {
02438   return this->active_policy_strategies_.servant_retention_strategy ()->
02439     servant_has_remaining_activations (servant);
02440 }

TAO_SERVANT_LOCATION TAO_Root_POA::servant_present const PortableServer::ObjectId system_id,
PortableServer::Servant servant
 

Definition at line 2231 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::servant_retention_strategy().

Referenced by TAO::Portable_Server::RequestProcessingStrategyServantLocator::locate_servant(), TAO::Portable_Server::RequestProcessingStrategyServantActivator::locate_servant(), TAO::Portable_Server::RequestProcessingStrategyDefaultServant::locate_servant(), and TAO::Portable_Server::RequestProcessingStrategyAOMOnly::locate_servant().

02233 {
02234   return this->active_policy_strategies_.servant_retention_strategy()->
02235           servant_present (system_id, servant);
02236 }

PortableServer::ObjectId * TAO_Root_POA::servant_to_id PortableServer::Servant  p_servant  ) 
 

Definition at line 660 of file Root_POA.cpp.

References servant_to_id_i(), and TAO_POA_GUARD_RETURN.

Referenced by servant_to_id_i().

00661 {
00662   // If we had upgradeable locks, this would initially be a read lock
00663   //
00664   // Lock access for the duration of this transaction.
00665   TAO_POA_GUARD_RETURN (0);
00666 
00667   return this->servant_to_id_i (servant);
00668 }

PortableServer::ObjectId * TAO_Root_POA::servant_to_id_i PortableServer::Servant  servant  ) 
 

Definition at line 1314 of file Root_POA.cpp.

References active_policy_strategies_, TAO::Portable_Server::Active_Policy_Strategies::request_processing_strategy(), and servant_to_id().

Referenced by servant_to_id().

01315 {
01316   return this->active_policy_strategies_.request_processing_strategy()->
01317     servant_to_id (servant);
01318 }

CORBA::Object_ptr TAO_Root_POA::servant_to_reference PortableServer::Servant  p_servant  ) 
 

Definition at line 687 of file Root_POA.cpp.

References servant_to_reference_i(), and TAO_POA_GUARD_RETURN.

Referenced by servant_to_reference_i().

00688 {
00689   TAO_POA_GUARD_RETURN (CORBA::Object::_nil ());
00690 
00691   return this->servant_to_reference_i (servant);
00692 }

CORBA::Object_ptr TAO_Root_POA::servant_to_reference_i PortableServer::Servant  p_servant  )  [protected]
 

Definition at line 1321 of file Root_POA.cpp.

References active_policy_strategies_, TAO::Portable_Server::Active_Policy_Strategies::servant_retention_strategy(), and servant_to_reference().

Referenced by servant_to_reference().

01322 {
01323   return this->active_policy_strategies_.servant_retention_strategy()->
01324     servant_to_reference (servant);
01325 }

PortableServer::ObjectId * TAO_Root_POA::servant_to_user_id PortableServer::Servant  p_servant  ) 
 

Definition at line 671 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::servant_retention_strategy().

Referenced by TAO::Portable_Server::RequestProcessingStrategyServantManager::servant_to_id(), TAO::Portable_Server::RequestProcessingStrategyDefaultServant::servant_to_id(), and TAO::Portable_Server::RequestProcessingStrategyAOMOnly::servant_to_id().

00672 {
00673   return this->active_policy_strategies_.servant_retention_strategy()->
00674     servant_to_user_id (servant);
00675 }

CORBA::Short TAO_Root_POA::server_priority void   )  const
 

Definition at line 2466 of file Root_POA.cpp.

References TAO::Portable_Server::Cached_Policies::server_priority().

Referenced by TAO::Portable_Server::ServantRetentionStrategyRetain::servant_to_reference().

02467 {
02468   return this->cached_policies_.server_priority ();
02469 }

CORBA::Policy * TAO_Root_POA::server_protocol void   )  [virtual]
 

Definition at line 2548 of file Root_POA.cpp.

02549 {
02550   return 0;
02551 }

void TAO_Root_POA::set_folded_name TAO_Root_POA parent  )  [protected]
 

Definition at line 1827 of file Root_POA.cpp.

References folded_name(), ACE_OS::memcpy(), name_separator(), and name_separator_length().

Referenced by TAO_Root_POA().

01828 {
01829   size_t length = 0;
01830   size_t parent_length = 0;
01831 
01832   if (parent != 0)
01833     {
01834       parent_length = parent->folded_name ().length ();
01835       length += parent_length;
01836     }
01837 
01838   length += this->name_.length ();
01839   length += TAO_Root_POA::name_separator_length ();
01840 
01841   this->folded_name_.length (static_cast <CORBA::ULong> (length));
01842   CORBA::Octet *folded_name_buffer = this->folded_name_.get_buffer ();
01843 
01844   if (parent != 0)
01845     {
01846       ACE_OS::memcpy (folded_name_buffer,
01847                       parent->folded_name ().get_buffer (),
01848                       parent_length);
01849     }
01850 
01851   ACE_OS::memcpy (&folded_name_buffer[parent_length],
01852                   this->name_.c_str (),
01853                   this->name_.length ());
01854 
01855   folded_name_buffer[length - TAO_Root_POA::name_separator_length ()] = TAO_Root_POA::name_separator ();
01856 }

void TAO_Root_POA::set_id TAO_Root_POA parent  )  [protected]
 

Definition at line 1707 of file Root_POA.cpp.

References ACE_HTONL, active_policy_strategies_, TAO::Portable_Server::Active_Policy_Strategies::id_assignment_strategy(), is_persistent(), TAO::Portable_Server::Active_Policy_Strategies::lifespan_strategy(), ACE_OS::memcpy(), non_root_key_char(), objectkey_prefix, root_key_char(), root_key_type_length(), system_id(), system_name_, and TAO_OBJECTKEY_PREFIX_SIZE.

Referenced by TAO_Root_POA().

01708 {
01709   // Calculate the prefix size.
01710   CORBA::ULong prefix_size = 0;
01711   prefix_size += TAO_OBJECTKEY_PREFIX_SIZE;
01712 
01713   // If we are dealing with a persistent POA and user ids are being
01714   // used, then we need to add the POA name length field to the object
01715   // key. Otherwise, the POA name length can be calculated by looking
01716   // at the remainder after extracting other parts of the key.
01717   bool const add_poa_name_length =
01718     this->is_persistent () &&
01719     !this->system_id ();
01720 
01721   // Size required by the POA name.
01722   CORBA::ULong poa_name = 0;
01723 
01724   // Calculate the space required for the POA name.
01725   CORBA::ULong poa_name_length = this->system_name_->length ();
01726   if (parent != 0)
01727     {
01728       poa_name += poa_name_length;
01729     }
01730 
01731   // Check if we need to added the length of the POA name.
01732   if (add_poa_name_length)
01733     {
01734       poa_name += sizeof (poa_name_length);
01735     }
01736 
01737   // Get the space needed for the lifespan length
01738   // byte.
01739   CORBA::ULong const lifespan_key_length =
01740     this->active_policy_strategies_.lifespan_strategy()->key_length ();
01741 
01742   CORBA::ULong const id_assignment_key_length =
01743     this->active_policy_strategies_.id_assignment_strategy()->key_type_length ();
01744 
01745   // Calculate the space required for the POA id.
01746   CORBA::ULong const buffer_size =
01747     prefix_size +
01748     this->root_key_type_length () +
01749     id_assignment_key_length +
01750     lifespan_key_length +
01751     poa_name;
01752 
01753   // Create the buffer for the POA id.
01754   this->id_.length (buffer_size);
01755   CORBA::Octet *buffer = &this->id_[0];
01756 
01757   // Keeps track of where the next infomation goes; start at 0 byte.
01758   CORBA::ULong starting_at = 0;
01759 
01760   // Add the object key prefix.
01761   ACE_OS::memcpy (&buffer[starting_at],
01762                   &objectkey_prefix[0],
01763                   TAO_OBJECTKEY_PREFIX_SIZE);
01764 
01765   starting_at += TAO_OBJECTKEY_PREFIX_SIZE;
01766 
01767   // Copy the root byte.
01768   if (parent != 0)
01769     {
01770       buffer[starting_at] = (CORBA::Octet) TAO_Root_POA::non_root_key_char ();
01771     }
01772   else
01773     {
01774       buffer[starting_at] = (CORBA::Octet) TAO_Root_POA::root_key_char ();
01775     }
01776   starting_at += this->root_key_type_length ();
01777 
01778   // Add the id_assignment part
01779   this->active_policy_strategies_.id_assignment_strategy()->create_key (buffer, starting_at);
01780 
01781   // Add the lifespan part
01782   this->active_policy_strategies_.lifespan_strategy()->create_key (buffer, starting_at);
01783 
01784   // Check if we need to added the length of the POA name.
01785   if (add_poa_name_length)
01786     {
01787       poa_name_length = ACE_HTONL (poa_name_length);
01788       ACE_OS::memcpy (&buffer[starting_at],
01789                       &poa_name_length,
01790                       sizeof (poa_name_length));
01791       starting_at += sizeof (poa_name_length);
01792     }
01793 
01794   // Put the POA name into the key (for non-root POAs).
01795   if (parent != 0)
01796     {
01797       ACE_OS::memcpy (&buffer[starting_at],
01798                       this->system_name_->get_buffer (),
01799                       this->system_name_->length ());
01800       starting_at += this->system_name_->length ();
01801     }
01802 }

void TAO_Root_POA::set_obj_ref_factory PortableInterceptor::ObjectReferenceFactory *  current_factory  )  [protected]
 

Set the object reference factory.

Definition at line 174 of file Root_POA.cpp.

References ORT_adapter(), ort_adapter_, and TAO::ORT_Adapter::set_obj_ref_factory().

00176 {
00177   TAO::ORT_Adapter *adapter = this->ORT_adapter ();
00178 
00179   if (adapter)
00180     {
00181       // Activate a different factory
00182       this->ort_adapter_->set_obj_ref_factory (current_factory);
00183     }
00184 }

void TAO_Root_POA::set_servant PortableServer::Servant  servant  ) 
 

Definition at line 2395 of file Root_POA.cpp.

References active_policy_strategies_, TAO::Portable_Server::Active_Policy_Strategies::request_processing_strategy(), and TAO_POA_GUARD.

02396 {
02397   // Lock access for the duration of this transaction.
02398   TAO_POA_GUARD;
02399 
02400   this->active_policy_strategies_.request_processing_strategy()->
02401     set_servant (servant);
02402 }

void TAO_Root_POA::set_servant_manager PortableServer::ServantManager_ptr  imgr  ) 
 

Definition at line 2345 of file Root_POA.cpp.

References active_policy_strategies_, TAO::Portable_Server::Active_Policy_Strategies::request_processing_strategy(), PortableServer::ServantManager_ptr, and TAO_POA_GUARD.

02346 {
02347   // Lock access for the duration of this transaction.
02348   TAO_POA_GUARD;
02349 
02350   this->active_policy_strategies_.request_processing_strategy()->
02351     set_servant_manager (imgr);
02352 }

ACE_INLINE CORBA::Boolean TAO_Root_POA::system_id void   ) 
 

Definition at line 75 of file Root_POA.inl.

References TAO::Portable_Server::Cached_Policies::id_assignment().

Referenced by is_poa_generated(), and set_id().

00076 {
00077   return (this->cached_policies_.id_assignment () == PortableServer::SYSTEM_ID);
00078 }

ACE_INLINE char TAO_Root_POA::system_id_key_char void   )  [static, protected]
 

Definition at line 141 of file Root_POA.inl.

Referenced by parse_key().

00142 {
00143   return 'S';
00144 }

ACE_INLINE CORBA::ULong TAO_Root_POA::system_id_key_type_length void   )  [static, protected]
 

Definition at line 153 of file Root_POA.inl.

Referenced by parse_key().

00154 {
00155   return sizeof (char);
00156 }

ACE_INLINE const TAO_Object_Adapter::poa_name & TAO_Root_POA::system_name void   )  const
 

Definition at line 105 of file Root_POA.inl.

References system_name_.

Referenced by is_poa_generated().

00106 {
00107   return this->system_name_.in ();
00108 }

TAO_POA_Manager & TAO_Root_POA::tao_poa_manager  ) 
 

Return the POA Manager related to this POA.

Definition at line 641 of file Root_POA.cpp.

Referenced by TAO::Portable_Server::LifespanStrategyTransient::check_state(), and TAO::Portable_Server::LifespanStrategyPersistent::check_state().

00642 {
00643   return poa_manager_;
00644 }

void TAO_Root_POA::the_activator PortableServer::AdapterActivator_ptr  adapter_activator  ) 
 

Definition at line 2321 of file Root_POA.cpp.

References adapter_activator_, and TAO_POA_GUARD.

02323 {
02324   // Lock access for the duration of this transaction.
02325   TAO_POA_GUARD;
02326 
02327   this->adapter_activator_ = PortableServer::AdapterActivator::_duplicate (adapter_activator);
02328 }

PortableServer::AdapterActivator_ptr TAO_Root_POA::the_activator void   ) 
 

Definition at line 2312 of file Root_POA.cpp.

References TAO_POA_GUARD_RETURN.

02313 {
02314   // Lock access for the duration of this transaction.
02315   TAO_POA_GUARD_RETURN (PortableServer::AdapterActivator::_nil ());
02316 
02317   return PortableServer::AdapterActivator::_duplicate (this->adapter_activator_.in ());
02318 }

PortableServer::POAList * TAO_Root_POA::the_children void   ) 
 

Definition at line 695 of file Root_POA.cpp.

References TAO_POA_GUARD_RETURN, and the_children_i().

00696 {
00697   // Lock access for the duration of this transaction.
00698   TAO_POA_GUARD_RETURN (0);
00699 
00700   return this->the_children_i ();
00701 }

PortableServer::POAList * TAO_Root_POA::the_children_i void   )  [protected]
 

Definition at line 932 of file Root_POA.cpp.

References ACE_NEW_THROW_EX, ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::begin(), children_, ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::current_size(), ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::end(), and PortableServer::POAList.

Referenced by the_children().

00933 {
00934   PortableServer::POAList_var children;
00935   CORBA::ULong child_current = static_cast <CORBA::ULong>
00936                                            (this->children_.current_size ());
00937   ACE_NEW_THROW_EX (children,
00938                     PortableServer::POAList (child_current),
00939                     CORBA::NO_MEMORY ());
00940 
00941   children->length (child_current);
00942 
00943   CORBA::ULong index = 0;
00944   for (CHILDREN::iterator iterator = this->children_.begin ();
00945        iterator != this->children_.end ();
00946        ++iterator, ++index)
00947     {
00948       TAO_Root_POA *child_poa = (*iterator).int_id_;
00949       children[index] = PortableServer::POA::_duplicate (child_poa);
00950     }
00951 
00952   return children._retn ();
00953 }

ACE_INLINE char * TAO_Root_POA::the_name void   ) 
 

Definition at line 93 of file Root_POA.inl.

References CORBA::string_dup().

00094 {
00095   return CORBA::string_dup (this->name_.c_str ());
00096 }

ACE_INLINE PortableServer::POA_ptr TAO_Root_POA::the_parent void   ) 
 

Reimplemented in TAO_Regular_POA.

Definition at line 26 of file Root_POA.inl.

00027 {
00028   return PortableServer::POA::_nil ();
00029 }

PortableServer::POAManager_ptr TAO_Root_POA::the_POAManager void   ) 
 

Definition at line 2614 of file Root_POA.cpp.

02615 {
02616   return PortableServer::POAManager::_duplicate (&this->poa_manager_);
02617 }

PortableServer::POAManagerFactory_ptr TAO_Root_POA::the_POAManagerFactory void   ) 
 

Definition at line 2621 of file Root_POA.cpp.

02622 {
02623   return PortableServer::POAManagerFactory::_duplicate (&this->poa_manager_factory_);
02624 }

ACE_INLINE void * TAO_Root_POA::thread_pool void   )  const [virtual]
 

Definition at line 225 of file Root_POA.inl.

00226 {
00227   return 0;
00228 }

ACE_INLINE char TAO_Root_POA::transient_key_char void   )  [static, protected]
 

Definition at line 129 of file Root_POA.inl.

Referenced by parse_key().

00130 {
00131   return 'T';
00132 }

int TAO_Root_POA::unbind_using_user_id const PortableServer::ObjectId user_id  ) 
 

Definition at line 1448 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::servant_retention_strategy().

Referenced by TAO::Portable_Server::RequestProcessingStrategyServantLocator::cleanup_servant(), TAO::Portable_Server::RequestProcessingStrategyServantActivator::cleanup_servant(), TAO::Portable_Server::RequestProcessingStrategyDefaultServant::cleanup_servant(), and TAO::Portable_Server::RequestProcessingStrategyAOMOnly::cleanup_servant().

01449 {
01450   return this->active_policy_strategies_.servant_retention_strategy()->
01451     unbind_using_user_id  (user_id);
01452 }

ACE_INLINE char TAO_Root_POA::user_id_key_char void   )  [static, protected]
 

Definition at line 147 of file Root_POA.inl.

Referenced by parse_key().

00148 {
00149   return 'U';
00150 }

PortableServer::Servant TAO_Root_POA::user_id_to_servant_i const PortableServer::ObjectId oid  ) 
 

Definition at line 1493 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::servant_retention_strategy().

Referenced by TAO::Portable_Server::RequestProcessingStrategyServantManager::id_to_servant(), and TAO::Portable_Server::RequestProcessingStrategyAOMOnly::id_to_servant().

01495 {
01496   return this->active_policy_strategies_.servant_retention_strategy()->
01497     user_id_to_servant (id);
01498 }

bool TAO_Root_POA::validate_lifespan CORBA::Boolean  is_persistent,
const TAO::Portable_Server::Temporary_Creation_Time creation_time
const
 

Definition at line 2515 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::lifespan_strategy().

Referenced by TAO_Object_Adapter::find_transient_poa(), and is_poa_generated().

02518 {
02519   return this->active_policy_strategies_.lifespan_strategy()->
02520     validate (is_persistent, creation_time);
02521 }

void TAO_Root_POA::wait_for_completions CORBA::Boolean  wait_for_completion  )  [protected]
 

Definition at line 1160 of file Root_POA.cpp.

References TAO_Object_Adapter::enable_locking_, object_adapter(), outstanding_requests_, outstanding_requests_condition_, and wait_for_completion_pending_.

Referenced by deactivate_all_objects_i(), TAO_POA_Manager::discard_requests_i(), and TAO_POA_Manager::hold_requests_i().

01161 {
01162   while (this->object_adapter ().enable_locking_ &&
01163          wait_for_completion &&
01164          this->outstanding_requests_ > 0)
01165     {
01166       this->wait_for_completion_pending_ = 1;
01167 
01168       int result = this->outstanding_requests_condition_.wait ();
01169       if (result == -1)
01170         {
01171           throw ::CORBA::OBJ_ADAPTER ();
01172         }
01173     }
01174 }

ACE_INLINE CORBA::Boolean TAO_Root_POA::waiting_destruction void   )  const
 

Definition at line 207 of file Root_POA.inl.

References waiting_destruction_.

Referenced by TAO::Portable_Server::Non_Servant_Upcall::~Non_Servant_Upcall().

00208 {
00209   return this->waiting_destruction_;
00210 }

CORBA::ULong TAO_Root_POA::waiting_servant_deactivation void   )  const
 

Definition at line 2570 of file Root_POA.cpp.

References active_policy_strategies_, and TAO::Portable_Server::Active_Policy_Strategies::servant_retention_strategy().

Referenced by TAO::Portable_Server::Servant_Upcall::servant_cleanup().

02571 {
02572   return this->active_policy_strategies_.servant_retention_strategy ()->
02573           waiting_servant_deactivation ();
02574 }


Friends And Related Function Documentation

friend class TAO::Portable_Server::Non_Servant_Upcall [friend]
 

Definition at line 122 of file Root_POA.h.

friend class TAO::Portable_Server::Servant_Upcall [friend]
 

Definition at line 121 of file Root_POA.h.

friend class TAO_IORInfo [friend]
 

Definition at line 125 of file Root_POA.h.

friend class TAO_Object_Adapter [friend]
 

Definition at line 120 of file Root_POA.h.

friend class TAO_POA_Manager [friend]
 

Definition at line 123 of file Root_POA.h.

friend class TAO_RT_Collocation_Resolver [friend]
 

Definition at line 124 of file Root_POA.h.


Member Data Documentation

TAO::Portable_Server::Active_Policy_Strategies TAO_Root_POA::active_policy_strategies_ [protected]
 

Definition at line 721 of file Root_POA.h.

Referenced by activate_object_i(), activate_object_with_id_i(), allow_implicit_activation(), allow_multiple_activations(), check_state(), cleanup_servant(), complete_destruction_i(), create_reference_i(), create_reference_with_id_i(), deactivate_all_objects_i(), deactivate_object_i(), destroy_i(), enter(), exit(), find_servant(), find_servant_priority(), get_servant_i(), get_servant_manager(), has_system_id(), id_to_reference_i(), id_to_servant_i(), is_persistent(), is_servant_activation_allowed(), is_servant_active(), key_to_object(), locate_servant_i(), post_invoke_servant_cleanup(), rebind_using_user_id_and_system_id(), reference_to_id(), reference_to_servant_i(), servant_has_remaining_activations(), servant_present(), servant_to_id_i(), servant_to_reference_i(), servant_to_user_id(), set_id(), set_servant(), set_servant_manager(), TAO_Root_POA(), unbind_using_user_id(), user_id_to_servant_i(), validate_lifespan(), and waiting_servant_deactivation().

PortableServer::AdapterActivator_var TAO_Root_POA::adapter_activator_ [protected]
 

Definition at line 724 of file Root_POA.h.

Referenced by complete_destruction_i(), find_POA_i(), and the_activator().

PortableInterceptor::AdapterState TAO_Root_POA::adapter_state_ [protected]
 

Adapter can be accepting, rejecting etc.

Definition at line 715 of file Root_POA.h.

Referenced by destroy_i(), and get_adapter_state().

TAO::Portable_Server::Cached_Policies TAO_Root_POA::cached_policies_ [protected]
 

Definition at line 717 of file Root_POA.h.

CORBA::ULong TAO_Root_POA::caller_key_to_object_
 

Definition at line 763 of file Root_POA.h.

CHILDREN TAO_Root_POA::children_ [protected]
 

Definition at line 736 of file Root_POA.h.

Referenced by create_POA_i(), delete_child(), destroy_i(), find_POA_i(), and the_children_i().

CORBA::Boolean TAO_Root_POA::cleanup_in_progress_ [protected]
 

Definition at line 745 of file Root_POA.h.

Referenced by cleanup_in_progress(), delete_child(), and destroy_i().

TAO_Acceptor_Filter_Factory* TAO_Root_POA::filter_factory_ [protected]
 

Definition at line 758 of file Root_POA.h.

Referenced by key_to_stub_i().

TAO_Object_Adapter::poa_name TAO_Root_POA::folded_name_ [protected]
 

Definition at line 705 of file Root_POA.h.

CORBA::OctetSeq TAO_Root_POA::id_ [protected]
 

Definition at line 709 of file Root_POA.h.

Key_To_Object_Params TAO_Root_POA::key_to_object_params_
 

Definition at line 784 of file Root_POA.h.

Referenced by TAO::Portable_Server::ServantRetentionStrategyRetain::create_reference(), TAO::Portable_Server::ServantRetentionStrategyNonRetain::create_reference(), TAO::Portable_Server::ServantRetentionStrategyRetain::create_reference_with_id(), TAO::Portable_Server::ServantRetentionStrategyNonRetain::create_reference_with_id(), TAO::Portable_Server::ServantRetentionStrategyRetain::id_to_reference(), invoke_key_to_object(), and TAO::Portable_Server::ServantRetentionStrategyRetain::servant_to_reference().

ACE_Lock& TAO_Root_POA::lock_ [protected]
 

Definition at line 738 of file Root_POA.h.

String TAO_Root_POA::name_ [protected]
 

Definition at line 687 of file Root_POA.h.

TAO_Network_Priority_Hook* TAO_Root_POA::network_priority_hook_ [protected]
 

Definition at line 719 of file Root_POA.h.

Referenced by network_priority_hook(), and TAO_Root_POA().

TAO_Object_Adapter* TAO_Root_POA::object_adapter_ [protected]
 

The object adapter we belong to.

Definition at line 743 of file Root_POA.h.

TAO_BEGIN_VERSIONED_NAMESPACE_DECL CORBA::Octet const TAO_Root_POA::objectkey_prefix [static]
 

Initial value:

 {
  024, 
  001, 
  017, 
  000
}

Definition at line 73 of file Root_POA.cpp.

Referenced by set_id().

TAO_ORB_Core& TAO_Root_POA::orb_core_ [protected]
 

Reimplemented from CORBA::Object.

Definition at line 740 of file Root_POA.h.

TAO::ORT_Adapter* TAO_Root_POA::ort_adapter_ [protected]
 

Pointer to the object reference template adapter.

Definition at line 712 of file Root_POA.h.

Referenced by destroy_i(), get_adapter_template(), get_adapter_template_i(), get_obj_ref_factory(), invoke_key_to_object_helper_i(), ORT_adapter(), ORT_adapter_i(), and set_obj_ref_factory().

CORBA::ULong TAO_Root_POA::outstanding_requests_ [protected]
 

Definition at line 747 of file Root_POA.h.

Referenced by decrement_outstanding_requests(), destroy_i(), increment_outstanding_requests(), outstanding_requests(), and wait_for_completions().

TAO_SYNCH_CONDITION TAO_Root_POA::outstanding_requests_condition_ [protected]
 

Definition at line 749 of file Root_POA.h.

Referenced by TAO::Portable_Server::Servant_Upcall::poa_cleanup(), and wait_for_completions().

TAO_POA_Manager& TAO_Root_POA::poa_manager_ [protected]
 

Reference to the POAManager that this poa assicuates with.

Definition at line 690 of file Root_POA.h.

TAO_POAManager_Factory& TAO_Root_POA::poa_manager_factory_ [protected]
 

Reference to the POAManagerFactory that generate the POAManager.

Definition at line 694 of file Root_POA.h.

TAO_POA_Policy_Set TAO_Root_POA::policies_ [protected]
 

Definition at line 703 of file Root_POA.h.

ACE_Array_Base<IOP::ProfileId> TAO_Root_POA::profile_id_array_ [protected]
 

Definition at line 701 of file Root_POA.h.

Referenced by save_ior_component_and_profile_id().

TAO_SYNCH_CONDITION TAO_Root_POA::servant_deactivation_condition_ [protected]
 

Definition at line 755 of file Root_POA.h.

Referenced by TAO::Portable_Server::Servant_Upcall::servant_cleanup(), and servant_deactivation_condition().

PortableServer::Servant TAO_Root_POA::servant_for_key_to_object_
 

Definition at line 765 of file Root_POA.h.

TAO_Object_Adapter::poa_name_var TAO_Root_POA::system_name_ [protected]
 

Definition at line 707 of file Root_POA.h.

Referenced by set_id(), and system_name().

IOP::TaggedComponentSeq TAO_Root_POA::tagged_component_ [protected]
 

Definition at line 697 of file Root_POA.h.

Referenced by create_stub_object(), and save_ior_component().

IOP::TaggedComponentSeq TAO_Root_POA::tagged_component_id_ [protected]
 

Definition at line 699 of file Root_POA.h.

Referenced by create_stub_object(), and save_ior_component_and_profile_id().

CORBA::Boolean TAO_Root_POA::wait_for_completion_pending_ [protected]
 

Definition at line 751 of file Root_POA.h.

Referenced by TAO::Portable_Server::Servant_Upcall::poa_cleanup(), and wait_for_completions().

CORBA::Boolean TAO_Root_POA::waiting_destruction_ [protected]
 

Definition at line 753 of file Root_POA.h.

Referenced by complete_destruction_i(), destroy_i(), TAO::Portable_Server::Servant_Upcall::poa_cleanup(), and waiting_destruction().


The documentation for this class was generated from the following files:
Generated on Sun Jan 27 13:27:45 2008 for TAO_PortableServer by doxygen 1.3.6