00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 #ifndef TAO_ROOT_POA_H
00016 #define TAO_ROOT_POA_H
00017 
00018 #include  "ace/pre.h"
00019 
00020 #include "tao/PortableServer/portableserver_export.h"
00021 
00022 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00023 # pragma once
00024 #endif 
00025 
00026 
00027 #include "tao/PortableServer/Object_Adapter.h"
00028 
00029 
00030 #include "tao/PortableServer/POA_Policy_Set.h"
00031 
00032 
00033 #include "tao/PortableServer/POA_Cached_Policies.h"
00034 #include "tao/PortableServer/Active_Policy_Strategies.h"
00035 
00036 #include "tao/PortableServer/ORT_Adapter.h"
00037 
00038 #include "tao/PortableServer/PortableServer.h"
00039 
00040 
00041 #include "tao/Object_KeyC.h"
00042 
00043 
00044 #include "tao/LocalObject.h"
00045 
00046 
00047 #include "tao/PI_ForwardC.h"
00048 
00049 
00050 #include "tao/OctetSeqC.h"
00051 
00052 #include "ace/SString.h"
00053 #include "ace/Hash_Map_Manager_T.h"
00054 #include "ace/Array_Base.h"
00055 #include "ace/Synch_Traits.h"
00056 #include "ace/Thread_Mutex.h"
00057 #include "ace/Recursive_Thread_Mutex.h"
00058 #include "ace/Null_Mutex.h"
00059 
00060 
00061 
00062 #if defined(_MSC_VER)
00063 #pragma warning(push)
00064 #pragma warning(disable:4250)
00065 #endif 
00066 
00067 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00068 
00069 
00070 class TAO_Acceptor_Filter;
00071 class TAO_Acceptor_Filter_Factory;
00072 class TAO_Acceptor_Registry;
00073 class TAO_IORInfo;
00074 class TAO_Regular_POA;
00075 class TAO_POAManager_Factory;
00076 
00077 namespace PortableInterceptor
00078 {
00079   class IORInfo;
00080   typedef IORInfo *IORInfo_ptr;
00081 }
00082 
00083 namespace TAO
00084 {
00085   class ORT_Adapter;
00086   class ORT_Adapter_Factory;
00087 
00088   namespace Portable_Server
00089   {
00090     class Servant_Upcall;
00091     class POA_Current_Impl;
00092     class Temporary_Creation_Time;
00093   }
00094 }
00095 
00096 namespace PortableServer
00097 {
00098   class POAManager;
00099   typedef POAManager *POAManager_ptr;
00100 }
00101 
00102 
00103 
00104 
00105 
00106 
00107 
00108 
00109 class TAO_PortableServer_Export TAO_Root_POA
00110   : public virtual PortableServer::POA,
00111     public virtual TAO_Local_RefCounted_Object
00112 {
00113 public:
00114 
00115   friend class TAO_Object_Adapter;
00116   friend class TAO::Portable_Server::Servant_Upcall;
00117   friend class TAO::Portable_Server::Non_Servant_Upcall;
00118   friend class TAO_POA_Manager;
00119   friend class TAO_RT_Collocation_Resolver;
00120   friend class TAO_IORInfo;
00121 
00122   typedef ACE_CString String;
00123 
00124 #if !defined (CORBA_E_MICRO)
00125   PortableServer::POA_ptr create_POA (
00126       const char *adapter_name,
00127       PortableServer::POAManager_ptr poa_manager,
00128       const CORBA::PolicyList &policies
00129       ACE_ENV_ARG_DECL_WITH_DEFAULTS
00130     )
00131     ACE_THROW_SPEC ((CORBA::SystemException,
00132                      PortableServer::POA::AdapterAlreadyExists,
00133                      PortableServer::POA::InvalidPolicy));
00134 
00135   PortableServer::POA_ptr find_POA (const char *adapter_name,
00136                                     CORBA::Boolean activate_it
00137                                     ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00138     ACE_THROW_SPEC ((CORBA::SystemException,
00139                      PortableServer::POA::AdapterNonExistent));
00140 #endif
00141 
00142   void destroy (CORBA::Boolean etherealize_objects,
00143                 CORBA::Boolean wait_for_completion
00144                 ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00145     ACE_THROW_SPEC ((CORBA::SystemException));
00146 
00147 #if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
00148   PortableServer::ThreadPolicy_ptr create_thread_policy (
00149       PortableServer::ThreadPolicyValue value
00150       ACE_ENV_ARG_DECL_WITH_DEFAULTS
00151     )
00152     ACE_THROW_SPEC ((CORBA::SystemException));
00153 #endif 
00154 
00155 #if !defined (CORBA_E_MICRO)
00156   PortableServer::LifespanPolicy_ptr create_lifespan_policy (
00157       PortableServer::LifespanPolicyValue value
00158       ACE_ENV_ARG_DECL_WITH_DEFAULTS
00159     )
00160     ACE_THROW_SPEC ((CORBA::SystemException));
00161 #endif
00162 
00163 #if !defined (CORBA_E_MICRO)
00164   PortableServer::IdUniquenessPolicy_ptr create_id_uniqueness_policy (
00165       PortableServer::IdUniquenessPolicyValue value
00166       ACE_ENV_ARG_DECL_WITH_DEFAULTS
00167     )
00168     ACE_THROW_SPEC ((CORBA::SystemException));
00169 #endif
00170 
00171 #if !defined (CORBA_E_MICRO)
00172   PortableServer::IdAssignmentPolicy_ptr create_id_assignment_policy (
00173       PortableServer::IdAssignmentPolicyValue value
00174       ACE_ENV_ARG_DECL_WITH_DEFAULTS
00175     )
00176     ACE_THROW_SPEC ((CORBA::SystemException));
00177 #endif
00178 
00179 #if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
00180 
00181   PortableServer::ImplicitActivationPolicy_ptr
00182   create_implicit_activation_policy (
00183       PortableServer::ImplicitActivationPolicyValue value
00184       ACE_ENV_ARG_DECL_WITH_DEFAULTS
00185     )
00186     ACE_THROW_SPEC ((CORBA::SystemException));
00187 
00188   PortableServer::ServantRetentionPolicy_ptr
00189   create_servant_retention_policy (
00190       PortableServer::ServantRetentionPolicyValue value
00191       ACE_ENV_ARG_DECL_WITH_DEFAULTS
00192     )
00193     ACE_THROW_SPEC ((CORBA::SystemException));
00194 
00195   PortableServer::RequestProcessingPolicy_ptr
00196   create_request_processing_policy (
00197       PortableServer::RequestProcessingPolicyValue value
00198       ACE_ENV_ARG_DECL_WITH_DEFAULTS
00199     )
00200     ACE_THROW_SPEC ((CORBA::SystemException));
00201 
00202 #endif 
00203 
00204   char * the_name (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
00205     ACE_THROW_SPEC ((CORBA::SystemException));
00206 
00207   PortableServer::POA_ptr the_parent (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
00208     ACE_THROW_SPEC ((CORBA::SystemException));
00209 
00210   PortableServer::POAList *the_children (
00211       ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
00212     )
00213     ACE_THROW_SPEC ((CORBA::SystemException));
00214 
00215   PortableServer::POAManager_ptr the_POAManager (
00216       ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
00217     ACE_THROW_SPEC ((CORBA::SystemException));
00218 
00219 #if !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
00220   PortableServer::POAManagerFactory_ptr the_POAManagerFactory (
00221       ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
00222     ACE_THROW_SPEC ((CORBA::SystemException));
00223 #endif
00224 
00225 
00226 
00227 
00228   PortableInterceptor::AdapterName *adapter_name (ACE_ENV_SINGLE_ARG_DECL)
00229     ACE_THROW_SPEC ((CORBA::SystemException));
00230 
00231 
00232 
00233   void save_ior_component (const IOP::TaggedComponent &component
00234                            ACE_ENV_ARG_DECL);
00235 
00236 
00237 
00238   void save_ior_component_and_profile_id (
00239     const IOP::TaggedComponent &component,
00240     IOP::ProfileId profile_id
00241     ACE_ENV_ARG_DECL);
00242 
00243 #if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
00244   PortableServer::AdapterActivator_ptr the_activator (
00245       ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
00246     ACE_THROW_SPEC ((CORBA::SystemException));
00247 
00248   void the_activator (PortableServer::AdapterActivator_ptr adapter_activator
00249                       ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00250     ACE_THROW_SPEC ((CORBA::SystemException));
00251 
00252   PortableServer::ServantManager_ptr get_servant_manager (
00253       ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
00254     ACE_THROW_SPEC ((CORBA::SystemException,
00255                      PortableServer::POA::WrongPolicy));
00256 
00257   void set_servant_manager (PortableServer::ServantManager_ptr imgr
00258                             ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00259     ACE_THROW_SPEC ((CORBA::SystemException,
00260                      PortableServer::POA::WrongPolicy));
00261 
00262   PortableServer::Servant get_servant (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
00263     ACE_THROW_SPEC ((CORBA::SystemException,
00264                      PortableServer::POA::NoServant,
00265                      PortableServer::POA::WrongPolicy));
00266 
00267   void set_servant (PortableServer::Servant servant
00268                     ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00269     ACE_THROW_SPEC ((CORBA::SystemException,
00270                      PortableServer::POA::WrongPolicy));
00271 #endif 
00272 
00273   PortableServer::ObjectId *activate_object (PortableServer::Servant p_servant
00274                                              ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00275     ACE_THROW_SPEC ((CORBA::SystemException,
00276                      PortableServer::POA::ServantAlreadyActive,
00277                      PortableServer::POA::WrongPolicy));
00278 
00279 #if !defined (CORBA_E_MICRO)
00280   void activate_object_with_id (const PortableServer::ObjectId &id,
00281                                 PortableServer::Servant p_servant
00282                                 ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00283     ACE_THROW_SPEC ((CORBA::SystemException,
00284                      PortableServer::POA::ServantAlreadyActive,
00285                      PortableServer::POA::ObjectAlreadyActive,
00286                      PortableServer::POA::WrongPolicy));
00287 #endif
00288 
00289   void deactivate_object (const PortableServer::ObjectId &oid
00290                           ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00291     ACE_THROW_SPEC ((CORBA::SystemException,
00292                      PortableServer::POA::ObjectNotActive,
00293                      PortableServer::POA::WrongPolicy));
00294 
00295   CORBA::Object_ptr create_reference (const char *intf
00296                                       ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00297     ACE_THROW_SPEC ((CORBA::SystemException,
00298                      PortableServer::POA::WrongPolicy));
00299 
00300   CORBA::Object_ptr create_reference_with_id (
00301       const PortableServer::ObjectId &oid,
00302       const char *intf
00303       ACE_ENV_ARG_DECL_WITH_DEFAULTS
00304     )
00305     ACE_THROW_SPEC ((CORBA::SystemException));
00306 
00307   PortableServer::ObjectId *servant_to_id (PortableServer::Servant p_servant
00308                                            ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00309     ACE_THROW_SPEC ((CORBA::SystemException,
00310                      PortableServer::POA::ServantNotActive,
00311                      PortableServer::POA::WrongPolicy));
00312 
00313   PortableServer::ObjectId *servant_to_user_id (PortableServer::Servant p_servant
00314                                                 ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00315     ACE_THROW_SPEC ((CORBA::SystemException,
00316                      PortableServer::POA::ServantNotActive,
00317                      PortableServer::POA::WrongPolicy));
00318 
00319   CORBA::Object_ptr servant_to_reference (PortableServer::Servant p_servant
00320                                           ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00321     ACE_THROW_SPEC ((CORBA::SystemException,
00322                      PortableServer::POA::ServantNotActive,
00323                      PortableServer::POA::WrongPolicy));
00324 
00325   PortableServer::Servant reference_to_servant (
00326       CORBA::Object_ptr reference
00327       ACE_ENV_ARG_DECL_WITH_DEFAULTS
00328     )
00329     ACE_THROW_SPEC ((CORBA::SystemException,
00330                      PortableServer::POA::ObjectNotActive,
00331                      PortableServer::POA::WrongAdapter,
00332                      PortableServer::POA::WrongPolicy));
00333 
00334   PortableServer::ObjectId *reference_to_id (CORBA::Object_ptr reference
00335                                              ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00336     ACE_THROW_SPEC ((CORBA::SystemException,
00337                      PortableServer::POA::WrongAdapter,
00338                      PortableServer::POA::WrongPolicy));
00339 
00340   PortableServer::Servant id_to_servant (const PortableServer::ObjectId &oid
00341                                          ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00342     ACE_THROW_SPEC ((CORBA::SystemException,
00343                      PortableServer::POA::ObjectNotActive,
00344                      PortableServer::POA::WrongPolicy));
00345 
00346   CORBA::Object_ptr id_to_reference (const PortableServer::ObjectId &oid
00347                                      ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00348     ACE_THROW_SPEC ((CORBA::SystemException,
00349                      PortableServer::POA::ObjectNotActive,
00350                      PortableServer::POA::WrongPolicy));
00351 
00352   CORBA::OctetSeq *id (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
00353     ACE_THROW_SPEC ((CORBA::SystemException));
00354 
00355 
00356   TAO_POA_Policy_Set &policies (void);
00357 
00358 
00359   CORBA::Policy_ptr get_policy (CORBA::PolicyType policy ACE_ENV_ARG_DECL);
00360 
00361 
00362 
00363   virtual CORBA::PolicyList *client_exposed_policies (
00364       CORBA::Short object_priority
00365       ACE_ENV_ARG_DECL
00366     );
00367 
00368   TAO_Root_POA (const String &name,
00369                 PortableServer::POAManager_ptr poa_manager,
00370                 const TAO_POA_Policy_Set &policies,
00371                 TAO_Root_POA *parent,
00372                 ACE_Lock &lock,
00373                 TAO_SYNCH_MUTEX &thread_lock,
00374                 TAO_ORB_Core &orb_core,
00375                 TAO_Object_Adapter *object_adapter
00376                 ACE_ENV_ARG_DECL);
00377 
00378   virtual ~TAO_Root_POA (void);
00379 
00380   static char name_separator (void);
00381 
00382   static CORBA::ULong name_separator_length (void);
00383 
00384   enum
00385   {
00386     TAO_OBJECTKEY_PREFIX_SIZE = 4
00387   };
00388 
00389   static CORBA::Octet const objectkey_prefix[TAO_OBJECTKEY_PREFIX_SIZE];
00390 
00391   const TAO_Object_Adapter::poa_name &folded_name (void) const;
00392 
00393   const TAO_Object_Adapter::poa_name &system_name (void) const;
00394 
00395   static void check_for_valid_wait_for_completions (
00396       const TAO_ORB_Core &orb_core,
00397       CORBA::Boolean wait_for_completion
00398       ACE_ENV_ARG_DECL
00399     );
00400 
00401 
00402   TAO_ORB_Core &orb_core (void) const;
00403 
00404   TAO::Portable_Server::Cached_Policies::PriorityModel priority_model (void) const;
00405 
00406   CORBA::Boolean cleanup_in_progress (void);
00407 
00408 
00409   static int parse_ir_object_key (const TAO::ObjectKey &object_key,
00410                                   PortableServer::ObjectId &user_id);
00411 
00412   TAO_Object_Adapter &object_adapter (void);
00413 
00414   ACE_Lock &lock (void);
00415 
00416 
00417 
00418   TAO_Stub* key_to_stub (const TAO::ObjectKey &key,
00419                          const char *type_id,
00420                          CORBA::Short priority
00421                          ACE_ENV_ARG_DECL);
00422 
00423 
00424 
00425 
00426 
00427 
00428   PortableInterceptor::AdapterState get_adapter_state (
00429     ACE_ENV_SINGLE_ARG_DECL);
00430 
00431   virtual void *thread_pool (void) const;
00432 
00433   virtual CORBA::Policy *server_protocol (void);
00434 
00435   CORBA::ULong outstanding_requests (void) const;
00436 
00437   const ACE_CString &name (void) const;
00438 
00439   CORBA::Boolean waiting_destruction (void) const;
00440 
00441   static void ort_adapter_factory_name (const char *name);
00442 
00443   static const char *ort_adapter_factory_name (void);
00444 
00445 
00446   static void imr_client_adapter_name (const char *name);
00447 
00448 
00449   static const char *imr_client_adapter_name (void);
00450 
00451   CORBA::Object_ptr invoke_key_to_object (ACE_ENV_SINGLE_ARG_DECL);
00452 
00453   CORBA::Boolean system_id (void);
00454 
00455   CORBA::ULong waiting_servant_deactivation (void) const;
00456 
00457 
00458   TAO_POA_Manager &tao_poa_manager ();
00459 
00460   bool is_poa_generated (CORBA::Object_ptr reference,
00461                          PortableServer::ObjectId &system_id
00462                          ACE_ENV_ARG_DECL);
00463 
00464   
00465 
00466 
00467 
00468 
00469   bool is_servant_activation_allowed (
00470     PortableServer::Servant servant,
00471     int &wait_occurred_restart_call);
00472 
00473   int rebind_using_user_id_and_system_id (
00474     PortableServer::Servant servant,
00475     const PortableServer::ObjectId &user_id,
00476     const PortableServer::ObjectId &system_id,
00477     TAO::Portable_Server::Servant_Upcall &servant_upcall);
00478 
00479   CORBA::Boolean servant_has_remaining_activations (
00480     PortableServer::Servant servant);
00481 
00482   bool allow_implicit_activation (void) const;
00483 
00484   bool allow_multiple_activations (void) const;
00485 
00486   int is_servant_active (
00487     PortableServer::Servant servant,
00488     int &wait_occurred_restart_call);
00489 
00490   void deactivate_object_i (const PortableServer::ObjectId &oid
00491                             ACE_ENV_ARG_DECL)
00492   ACE_THROW_SPEC ((CORBA::SystemException,
00493                    PortableServer::POA::ObjectNotActive,
00494                    PortableServer::POA::WrongPolicy));
00495 
00496   CORBA::Boolean is_persistent (void) const;
00497 
00498   CORBA::Short server_priority (void) const;
00499 
00500   bool has_system_id (void) const;
00501 
00502   PortableServer::Servant find_servant (const PortableServer::ObjectId &system_id
00503                                         ACE_ENV_ARG_DECL);
00504 
00505   TAO_SERVANT_LOCATION servant_present (
00506     const PortableServer::ObjectId &system_id,
00507     PortableServer::Servant &servant
00508     ACE_ENV_ARG_DECL);
00509 
00510   PortableServer::Servant find_servant (
00511         const PortableServer::ObjectId &system_id,
00512         TAO::Portable_Server::Servant_Upcall &servant_upcall,
00513         TAO::Portable_Server::POA_Current_Impl &poa_current_impl
00514         ACE_ENV_ARG_DECL);
00515 
00516 
00517 
00518 
00519 
00520 
00521 
00522 
00523 
00524   int find_servant_priority (
00525         const PortableServer::ObjectId &system_id,
00526         CORBA::Short &priority
00527         ACE_ENV_ARG_DECL);
00528 
00529   int unbind_using_user_id (const PortableServer::ObjectId &user_id);
00530 
00531   void cleanup_servant (
00532     PortableServer::Servant servant,
00533     const PortableServer::ObjectId &user_id
00534     ACE_ENV_ARG_DECL);
00535 
00536   void post_invoke_servant_cleanup(
00537     const PortableServer::ObjectId &system_id,
00538     const TAO::Portable_Server::Servant_Upcall &servant_upcall);
00539 
00540    bool validate_lifespan (
00541     CORBA::Boolean is_persistent,
00542     const TAO::Portable_Server::Temporary_Creation_Time& creation_time) const;
00543 
00544   PortableServer::ObjectId *activate_object_i (
00545       PortableServer::Servant p_servant,
00546       CORBA::Short priority,
00547       int &wait_occurred_restart_call
00548       ACE_ENV_ARG_DECL
00549     )
00550     ACE_THROW_SPEC ((CORBA::SystemException,
00551                      PortableServer::POA::ServantAlreadyActive,
00552                      PortableServer::POA::WrongPolicy));
00553 
00554   CORBA::Object_ptr id_to_reference_i (const PortableServer::ObjectId &oid,
00555                                        bool indirect
00556                                        ACE_ENV_ARG_DECL)
00557     ACE_THROW_SPEC ((CORBA::SystemException,
00558                      PortableServer::POA::ObjectNotActive,
00559                      PortableServer::POA::WrongPolicy));
00560 
00561   PortableServer::ObjectId *servant_to_id_i (PortableServer::Servant servant
00562                                              ACE_ENV_ARG_DECL)
00563     ACE_THROW_SPEC ((CORBA::SystemException,
00564                      PortableServer::POA::ServantNotActive,
00565                      PortableServer::POA::WrongPolicy));
00566 
00567   TAO_SYNCH_CONDITION &servant_deactivation_condition (void);
00568 
00569   int is_poa_generated_id (const PortableServer::ObjectId &id);
00570 
00571 
00572   void check_state (ACE_ENV_SINGLE_ARG_DECL);
00573 
00574   int delete_child (const String &child);
00575 
00576   PortableServer::Servant user_id_to_servant_i (const PortableServer::ObjectId &oid
00577                                                 ACE_ENV_ARG_DECL)
00578     ACE_THROW_SPEC ((CORBA::SystemException,
00579                      PortableServer::POA::ObjectNotActive,
00580                      PortableServer::POA::WrongPolicy));
00581 
00582   virtual CORBA::ORB_ptr _get_orb (
00583       ACE_ENV_SINGLE_ARG_DECL
00584     );
00585 
00586 
00587 
00588 
00589 
00590   virtual void poa_activated_hook ();
00591 
00592 
00593   virtual void poa_deactivated_hook ();
00594 
00595 
00596   virtual void servant_activated_hook (PortableServer::Servant servant,
00597                                const PortableServer::ObjectId& oid
00598                                ACE_ENV_ARG_DECL);
00599 
00600 
00601   virtual void servant_deactivated_hook (PortableServer::Servant servant,
00602                                  const PortableServer::ObjectId& oid
00603                                  ACE_ENV_ARG_DECL);
00604 
00605 protected:
00606 
00607 #if (TAO_HAS_MINIMUM_POA == 0)
00608   int enter (void);
00609 
00610   int exit (void);
00611 #endif 
00612 
00613 
00614   virtual TAO_Root_POA *new_POA (const String &name,
00615                             PortableServer::POAManager_ptr poa_manager,
00616                             const TAO_POA_Policy_Set &policies,
00617                             TAO_Root_POA *parent,
00618                             ACE_Lock &lock,
00619                             TAO_SYNCH_MUTEX &thread_lock,
00620                             TAO_ORB_Core &orb_core,
00621                             TAO_Object_Adapter *object_adapter
00622                             ACE_ENV_ARG_DECL);
00623 
00624 #if ! defined (CORBA_E_MICRO)
00625   PortableServer::POA_ptr create_POA_i (
00626       const char *adapter_name,
00627       PortableServer::POAManager_ptr poa_manager,
00628       const CORBA::PolicyList &policies
00629       ACE_ENV_ARG_DECL
00630     )
00631     ACE_THROW_SPEC ((CORBA::SystemException,
00632                      PortableServer::POA::AdapterAlreadyExists,
00633                      PortableServer::POA::InvalidPolicy));
00634 
00635   PortableServer::POA_ptr create_POA_i (const String &adapter_name,
00636                                         PortableServer::POAManager_ptr poa_manager,
00637                                         const TAO_POA_Policy_Set &policies
00638                                         ACE_ENV_ARG_DECL)
00639     ACE_THROW_SPEC ((CORBA::SystemException,
00640                      PortableServer::POA::AdapterAlreadyExists,
00641                      PortableServer::POA::InvalidPolicy));
00642 
00643   TAO_Root_POA *find_POA_i (const ACE_CString &child_name,
00644                        CORBA::Boolean activate_it
00645                        ACE_ENV_ARG_DECL)
00646     ACE_THROW_SPEC ((CORBA::SystemException,
00647                      PortableServer::POA::AdapterNonExistent));
00648 #endif
00649 
00650   void destroy_i (CORBA::Boolean etherealize_objects,
00651                   CORBA::Boolean wait_for_completion
00652                   ACE_ENV_ARG_DECL)
00653     ACE_THROW_SPEC ((CORBA::SystemException));
00654 
00655   void complete_destruction_i (ACE_ENV_SINGLE_ARG_DECL);
00656 
00657   PortableServer::POAList *the_children_i (ACE_ENV_SINGLE_ARG_DECL)
00658     ACE_THROW_SPEC ((CORBA::SystemException));
00659 
00660 
00661 
00662 
00663   PortableInterceptor::AdapterName *adapter_name_i (ACE_ENV_SINGLE_ARG_DECL)
00664     ACE_THROW_SPEC ((CORBA::SystemException));
00665 
00666 
00667 
00668   void adapter_state_changed (
00669       const TAO::ORT_Array &array_obj_ref_template,
00670       PortableInterceptor::AdapterState state
00671       ACE_ENV_ARG_DECL)
00672     ACE_THROW_SPEC ((CORBA::SystemException));
00673 
00674 
00675   void add_ior_component (TAO_MProfile & mprofile,
00676                           const IOP::TaggedComponent & component
00677                           ACE_ENV_ARG_DECL)
00678     ACE_THROW_SPEC ((CORBA::SystemException));
00679 
00680 
00681 
00682   void add_ior_component_to_profile (TAO_MProfile & mprofile,
00683                                      const IOP::TaggedComponent & component,
00684                                      IOP::ProfileId profile_id
00685                                      ACE_ENV_ARG_DECL)
00686     ACE_THROW_SPEC ((CORBA::SystemException));
00687 
00688 
00689 
00690   CORBA::Object_ptr key_to_object (const TAO::ObjectKey &key,
00691                                    const char *type_id,
00692                                    TAO_ServantBase *servant,
00693                                    CORBA::Boolean collocated,
00694                                    CORBA::Short priority,
00695                                    bool indirect
00696                                    ACE_ENV_ARG_DECL);
00697 
00698 
00699   virtual TAO_Stub* key_to_stub_i (const TAO::ObjectKey &key,
00700                                    const char *type_id,
00701                                    CORBA::Short priority
00702                                    ACE_ENV_ARG_DECL);
00703 
00704   TAO_Stub *create_stub_object (const TAO::ObjectKey &object_key,
00705                                 const char *type_id,
00706                                 CORBA::PolicyList *policy_list,
00707                                 TAO_Acceptor_Filter *filter,
00708                                 TAO_Acceptor_Registry &acceptor_registry
00709                                 ACE_ENV_ARG_DECL);
00710 
00711   PortableServer::Servant get_servant_i (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
00712     ACE_THROW_SPEC ((CORBA::SystemException,
00713                      PortableServer::POA::WrongPolicy));
00714 
00715 protected:
00716 #if !defined (CORBA_E_MICRO)
00717   void activate_object_with_id_i (const PortableServer::ObjectId &id,
00718                                   PortableServer::Servant p_servant,
00719                                   CORBA::Short priority,
00720                                   int &wait_occurred_restart_call
00721                                   ACE_ENV_ARG_DECL)
00722     ACE_THROW_SPEC ((CORBA::SystemException,
00723                      PortableServer::POA::ServantAlreadyActive,
00724                      PortableServer::POA::ObjectAlreadyActive,
00725                      PortableServer::POA::WrongPolicy));
00726 #endif
00727 
00728   virtual void remove_from_parent_i (ACE_ENV_SINGLE_ARG_DECL);
00729 
00730   void deactivate_all_objects_i (CORBA::Boolean etherealize_objects
00731                                  ACE_ENV_ARG_DECL)
00732     ACE_THROW_SPEC ((CORBA::SystemException,
00733                      PortableServer::POA::WrongPolicy));
00734 
00735   void deactivate_all_objects_i (CORBA::Boolean etherealize_objects,
00736                                  CORBA::Boolean wait_for_completion
00737                                  ACE_ENV_ARG_DECL)
00738     ACE_THROW_SPEC ((CORBA::SystemException,
00739                      PortableServer::POA::WrongPolicy));
00740 
00741   void wait_for_completions (CORBA::Boolean wait_for_completion
00742                              ACE_ENV_ARG_DECL);
00743 
00744   CORBA::Object_ptr create_reference_i (const char *intf,
00745                                         CORBA::Short priority
00746                                         ACE_ENV_ARG_DECL)
00747     ACE_THROW_SPEC ((CORBA::SystemException,
00748                      PortableServer::POA::WrongPolicy));
00749 
00750   CORBA::Object_ptr create_reference_with_id_i (
00751       const PortableServer::ObjectId &oid,
00752       const char *intf,
00753       CORBA::Short priority
00754       ACE_ENV_ARG_DECL
00755     )
00756     ACE_THROW_SPEC ((CORBA::SystemException));
00757 
00758   PortableServer::Servant reference_to_servant_i (
00759       CORBA::Object_ptr reference
00760       ACE_ENV_ARG_DECL_WITH_DEFAULTS
00761     )
00762     ACE_THROW_SPEC ((CORBA::SystemException,
00763                      PortableServer::POA::ObjectNotActive,
00764                      PortableServer::POA::WrongAdapter,
00765                      PortableServer::POA::WrongPolicy));
00766 
00767   CORBA::Object_ptr servant_to_reference_i (PortableServer::Servant p_servant
00768                                             ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00769     ACE_THROW_SPEC ((CORBA::SystemException,
00770                      PortableServer::POA::ServantNotActive,
00771                      PortableServer::POA::WrongPolicy));
00772 
00773   PortableServer::Servant id_to_servant_i (const PortableServer::ObjectId &oid
00774                                            ACE_ENV_ARG_DECL)
00775     ACE_THROW_SPEC ((CORBA::SystemException,
00776                      PortableServer::POA::ObjectNotActive,
00777                      PortableServer::POA::WrongPolicy));
00778 
00779 
00780 
00781 
00782 
00783 
00784 
00785 
00786 
00787   void establish_components (ACE_ENV_SINGLE_ARG_DECL);
00788 
00789 
00790 
00791   void components_established (PortableInterceptor::IORInfo_ptr info
00792                                ACE_ENV_ARG_DECL);
00793 
00794   void set_folded_name (TAO_Root_POA *parent);
00795 
00796   void set_id (TAO_Root_POA *parent);
00797 
00798   TAO::ObjectKey *create_object_key (const PortableServer::ObjectId &id);
00799 
00800   static int parse_key (const TAO::ObjectKey &key,
00801                         TAO_Object_Adapter::poa_name &poa_system_name,
00802                         PortableServer::ObjectId &system_id,
00803                         CORBA::Boolean &is_root,
00804                         CORBA::Boolean &is_persistent,
00805                         CORBA::Boolean &is_system_id,
00806                         TAO::Portable_Server::Temporary_Creation_Time &poa_creation_time);
00807 
00808 protected:
00809 
00810   PortableInterceptor::ObjectReferenceTemplate *
00811     get_adapter_template (ACE_ENV_SINGLE_ARG_DECL)
00812     ACE_THROW_SPEC ((CORBA::SystemException));
00813 
00814 
00815   PortableInterceptor::ObjectReferenceTemplate *get_adapter_template_i (void);
00816 
00817 
00818   PortableInterceptor::ObjectReferenceFactory *
00819     get_obj_ref_factory (ACE_ENV_SINGLE_ARG_DECL)
00820     ACE_THROW_SPEC ((CORBA::SystemException));
00821 
00822 
00823   void set_obj_ref_factory (
00824     PortableInterceptor::ObjectReferenceFactory *current_factory
00825     ACE_ENV_ARG_DECL);
00826 
00827 
00828   TAO_SERVANT_LOCATION locate_servant_i (const PortableServer::ObjectId &id,
00829                                          PortableServer::Servant &servant
00830                                          ACE_ENV_ARG_DECL);
00831 
00832   PortableServer::Servant locate_servant_i (
00833       const char *operation,
00834       const PortableServer::ObjectId &id,
00835       TAO::Portable_Server::Servant_Upcall &servant_upcall,
00836       TAO::Portable_Server::POA_Current_Impl &poa_current_impl,
00837       int &wait_occurred_restart_call
00838       ACE_ENV_ARG_DECL
00839     );
00840 
00841 public:
00842     
00843   CORBA::Object_ptr
00844   invoke_key_to_object_helper_i (const char * repository_id,
00845                                  const PortableServer::ObjectId & id
00846                                  ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00847     ACE_THROW_SPEC ((CORBA::SystemException));
00848 protected:
00849 
00850 
00851 
00852   TAO::ORT_Adapter *ORT_adapter (ACE_ENV_SINGLE_ARG_DECL)
00853     ACE_THROW_SPEC ((CORBA::SystemException));
00854 
00855 
00856 
00857   TAO::ORT_Adapter *ORT_adapter_i (void);
00858 
00859   TAO::ORT_Adapter_Factory *ORT_adapter_factory (void);
00860 
00861   CORBA::Boolean persistent (void);
00862 
00863   static char persistent_key_char (void);
00864 
00865   static char transient_key_char (void);
00866 
00867   static CORBA::ULong persistent_key_type_length (void);
00868 
00869   static char system_id_key_char (void);
00870 
00871   static char user_id_key_char (void);
00872 
00873   static CORBA::ULong system_id_key_type_length (void);
00874 
00875   virtual CORBA::Boolean root (void) const;
00876 
00877   virtual char root_key_type (void);
00878 
00879   static char root_key_char (void);
00880 
00881   static char non_root_key_char (void);
00882 
00883   static CORBA::ULong root_key_type_length (void);
00884 
00885   void outstanding_requests (CORBA::ULong new_outstanding_requests);
00886 
00887   CORBA::ULong increment_outstanding_requests (void);
00888 
00889   CORBA::ULong decrement_outstanding_requests (void);
00890 
00891   String name_;
00892 
00893 
00894   TAO_POA_Manager &poa_manager_;
00895 
00896   TAO_POAManager_Factory& poa_manager_factory_;
00897 
00898   IOP::TaggedComponentList tagged_component_;
00899 
00900   IOP::TaggedComponentList tagged_component_id_;
00901 
00902   ACE_Array_Base <IOP::ProfileId> profile_id_array_;
00903 
00904   TAO_POA_Policy_Set policies_;
00905 
00906   TAO_Object_Adapter::poa_name folded_name_;
00907 
00908   TAO_Object_Adapter::poa_name_var system_name_;
00909 
00910   CORBA::OctetSeq id_;
00911 
00912 
00913   TAO::ORT_Adapter *ort_adapter_;
00914 
00915 
00916   PortableInterceptor::AdapterState adapter_state_;
00917 
00918   TAO::Portable_Server::Cached_Policies cached_policies_;
00919 
00920   TAO::Portable_Server::Active_Policy_Strategies active_policy_strategies_;
00921 
00922 #if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
00923   PortableServer::AdapterActivator_var adapter_activator_;
00924 #endif 
00925 
00926   typedef
00927     ACE_Hash_Map_Manager_Ex<
00928         ACE_CString, TAO_Root_POA *,
00929         ACE_Hash<ACE_CString>,
00930         ACE_Equal_To<ACE_CString>,
00931         ACE_Null_Mutex
00932       >
00933     CHILDREN;
00934 
00935   CHILDREN children_;
00936 
00937   ACE_Lock &lock_;
00938 
00939   TAO_ORB_Core &orb_core_;
00940 
00941 
00942   TAO_Object_Adapter *object_adapter_;
00943 
00944   CORBA::Boolean cleanup_in_progress_;
00945 
00946   CORBA::ULong outstanding_requests_;
00947 
00948   TAO_SYNCH_CONDITION outstanding_requests_condition_;
00949 
00950   CORBA::Boolean wait_for_completion_pending_;
00951 
00952   CORBA::Boolean waiting_destruction_;
00953 
00954   TAO_SYNCH_CONDITION servant_deactivation_condition_;
00955 
00956   TAO_Acceptor_Filter_Factory * filter_factory_;
00957 
00958 public:
00959     
00960   CORBA::ULong caller_key_to_object_;
00961 
00962   PortableServer::Servant servant_for_key_to_object_;
00963 
00964   struct Key_To_Object_Params
00965   {
00966     PortableServer::ObjectId_var *system_id_;
00967     const char *type_id_;
00968     TAO_ServantBase *servant_;
00969     CORBA::Boolean collocated_;
00970     CORBA::Short priority_;
00971     bool indirect_;
00972 
00973     void set (PortableServer::ObjectId_var &system_id_,
00974               const char *type_id_,
00975               TAO_ServantBase *servant_,
00976               CORBA::Boolean collocated_,
00977               CORBA::Short priority_,
00978               bool indirect);
00979   };
00980 
00981   Key_To_Object_Params key_to_object_params_;
00982 };
00983 
00984 
00985 
00986 
00987 
00988 
00989 
00990 
00991 
00992 
00993 
00994 
00995 
00996 
00997 
00998 
00999 class TAO_PortableServer_Export TAO_POA_Static_Resources
01000 {
01001 public:
01002 
01003 
01004   static TAO_POA_Static_Resources* instance (void);
01005 
01006 public:
01007 
01008 
01009 
01010 
01011 
01012 
01013 
01014 
01015 
01016   ACE_CString ort_adapter_factory_name_;
01017 
01018 
01019 
01020 
01021 
01022 
01023 
01024   ACE_CString imr_client_adapter_name_;
01025 private:
01026 
01027   TAO_POA_Static_Resources (void);
01028 
01029 private:
01030 
01031   static TAO_POA_Static_Resources* instance_;
01032 
01033 
01034 
01035 
01036   static TAO_POA_Static_Resources* initialization_reference_;
01037 };
01038 
01039 TAO_END_VERSIONED_NAMESPACE_DECL
01040 
01041 
01042 
01043 #if defined(_MSC_VER)
01044 #pragma warning(pop)
01045 #endif 
01046 
01047 #if defined (__ACE_INLINE__)
01048 # include "tao/PortableServer/Root_POA.inl"
01049 #endif 
01050 
01051 #include  "ace/post.h"
01052 
01053 #endif