diff options
Diffstat (limited to 'TAO/tao/ORB.h')
-rw-r--r-- | TAO/tao/ORB.h | 432 |
1 files changed, 74 insertions, 358 deletions
diff --git a/TAO/tao/ORB.h b/TAO/tao/ORB.h index 4fde0587760..1b11bcc712e 100644 --- a/TAO/tao/ORB.h +++ b/TAO/tao/ORB.h @@ -22,8 +22,6 @@ #include "tao/corbafwd.h" #include "tao/Exception.h" -#include "tao/IOR_LookupTable.h" -#include "tao/Services.h" typedef enum { @@ -31,7 +29,6 @@ typedef enum TAO_SERVICEID_TRADINGSERVICE } TAO_Service_ID; - // @@ NW: Disable messing with the alignment for now. // For some reason, PC compilers don't implement "natural" alignment, // but only use fixed alignment policies. The following #pragmas @@ -71,17 +68,6 @@ class TAO_ORB_Parameters; class TAO_InputCDR; class TAO_OutputCDR; -// Forward declaration and typedefs for the exception thrown by -// the ORB Dynamic Any factory functions. -class CORBA_ORB_InconsistentTypeCode; -typedef CORBA_ORB_InconsistentTypeCode InconsistentTypeCode; -typedef CORBA_ORB_InconsistentTypeCode *InconsistentTypeCode_ptr; - -#ifdef TAO_HAS_VALUETYPE -class TAO_ValueFactory_Map; -#endif /* TAO_HAS_VALUETYPE */ - - // The new (POA) base class for servants. class TAO_ServantBase; @@ -89,19 +75,19 @@ typedef struct TAO_Leader_Follower_Info_Struct { ACE_SYNCH_MUTEX leader_follower_lock_; // do protect the access to the following three members - + ACE_Unbounded_Set<ACE_SYNCH_CONDITION *> follower_set_; // keep a set of followers around (protected) int leaders_; // 0 if no leader is around, 1 if there is a leader // > 1 if we do nested upcalls (protected) - + ACE_thread_t leader_thread_ID_; // thread ID of the leader thread (protected) } TAO_Leader_Follower_Info; -class TAO_Stub; +class STUB_Object; // Forward declarations. class TAO_Export CORBA_String_var @@ -206,115 +192,6 @@ private: void operator= (const CORBA_String_var &); }; -// **************************************************************** - -class TAO_Export CORBA_WString_var -{ - // = TITLE - // CORBA_WString var class. Provides automatic deallocation of - // storage for wide strings - // -public: - CORBA_WString_var (void); - // default constructor. - - CORBA_WString_var (CORBA::WChar *p); - // constructor, owns p. - - CORBA_WString_var (const CORBA::WChar *p); - // constructor. Makes a copy of p. - - CORBA_WString_var (const CORBA_WString_var &s); - // copy constructor. - - ~CORBA_WString_var (void); - // destructor. - - CORBA_WString_var &operator= (CORBA::WChar *p); - // assignment operator. - - CORBA_WString_var &operator= (const CORBA::WChar *p); - // assignment to a const char*. Makes a copy. - - CORBA_WString_var &operator= (const CORBA_WString_var &s); - // assignment operator. - - operator CORBA::WChar *(); - // access and modify. - - operator const CORBA::WChar *() const; - // only read privileges. - - CORBA::WChar &operator[] (CORBA::ULong index); - // allows access and modification using an index. - - CORBA::WChar operator[] (CORBA::ULong index) const; - // allows only accessing thru an index. - - // = in, out, out, and _retn operations. - // ORBOS/97-05-15, Appendix C.2 - - const CORBA::WChar *in (void) const; - // for in parameter. - - CORBA::WChar *&inout (void); - // for inout parameter. - - CORBA::WChar *&out (void); - // for out parameter. - - CORBA::WChar *_retn (void); - // for string of return type. - -private: - CORBA::WChar *ptr_; - // instance. -}; - -class TAO_Export CORBA_WString_out -{ - // = TITLE - // CORBA_WString_out - // - // = DESCRIPTION - // To support the memory management for "out" parameter passing - // mode. ORBOS/97-05-15, Appendix C.2 defines a CORBA_WString_out - // class - // -public: - // = operations. - - CORBA_WString_out (CORBA::WChar *&p); - // Construction from a reference to a string. - - CORBA_WString_out (CORBA_WString_var &p); - // Construction from a var. - - CORBA_WString_out (const CORBA_WString_out &s); - // Copy constructor. - - CORBA_WString_out &operator= (const CORBA_WString_out &s); - // Assignment from a string_out. - - CORBA_WString_out &operator= (CORBA::WChar *p); - // Assignment from a string. - - operator CORBA::WChar *&(); - // Cast. - - CORBA::WChar *&ptr (void); - // Return underlying instance. - -private: - CORBA::WChar *&ptr_; - // Instance. - - // assignment from _var disallowed - void operator= (const CORBA_WString_var &); -}; - -// **************************************************************** - class TAO_Export CORBA_ORB { // = TITLE @@ -333,7 +210,6 @@ public: // ORB_Core has special privileges friend class TAO_ORB_Core; - friend TAO_Export TAO_ORB_Core *TAO_ORB_Core_instance (void); class TAO_Export InvalidName : public CORBA_UserException { @@ -345,17 +221,6 @@ public: virtual int _is_a (const char* interface_id) const; }; - typedef char *ObjectId; - typedef CORBA::String_var ObjectId_var; - typedef CORBA::String_out ObjectId_out; - static CORBA::TypeCode_ptr _tc_ObjectId; - - typedef CORBA_ORB_ObjectIdList ObjectIdList; - typedef CORBA_ORB_ObjectIdList_var ObjectIdList_var; - typedef CORBA_ORB_ObjectIdList_out ObjectIdList_out; - typedef CORBA_ORB_ObjectIdList *ObjectIdList_ptr; - static CORBA::TypeCode_ptr _tc_ObjectIdList; - static CORBA::ORB_ptr _duplicate (CORBA::ORB_ptr orb); // Return a duplicate of <{orb}>. When work with this duplicate is // complete, it should be freed up using <CORBA::release()>. @@ -364,96 +229,27 @@ public: // Returns a pointer to a nil ORB, i.e., an non-existent ORB. This // can be used for initialization or in comparisons. - virtual CORBA::Object_ptr string_to_object ( - const char *str, - CORBA_Environment &ACE_TRY_ENV = - CORBA::default_environment ()); + virtual CORBA::Object_ptr string_to_object (const char *str, + CORBA_Environment &TAO_IN_ENV = CORBA::default_environment ()) = 0; // Turn a string-ified object reference back into an object pointer. - // Typically these strings are created using <object_to_string()>, - // but not necessarily locally. - - virtual CORBA::String object_to_string ( - CORBA::Object_ptr obj, - CORBA_Environment &ACE_TRY_ENV = - CORBA::default_environment ()); + // Each type of ORB, e.g. an IIOP ORB, must implement this. + // Typically these strings are created using <object_to_string()>. + virtual CORBA::String object_to_string (CORBA::Object_ptr obj, + CORBA_Environment &TAO_IN_ENV = CORBA::default_environment ()) = 0; // Turn an object reference into a string. Each type of ORB, // e.g. an IIOP ORB, must implement this. This can be used by // servers to publish their whereabouts to clients. The output of // this is typically eventually given to <string_to_object()> as an // argument. - -#ifdef TAO_HAS_VALUETYPE - // Value factory operations (CORBA 2.3 ptc/98-10-05 Ch. 4.2 p.4-7) - CORBA::ValueFactory_ptr register_value_factory ( - const char *repository_id, - CORBA::ValueFactory_ptr factory, - CORBA_Environment &ACE_TRY_ENV = - CORBA::default_environment () ); - void unregister_value_factory (const char * repository_id, - CORBA_Environment &ACE_TRY_ENV = - CORBA::default_environment () ); - CORBA::ValueFactory_ptr lookup_value_factory (const char *repository_id, - CORBA_Environment &ACE_TRY_ENV = CORBA::default_environment () ); -#endif /* TAO_HAS_VALUETYPE */ - -#if !defined (TAO_HAS_MINIMUM_CORBA) - - // Typedefs for CORBA_ORB_RequestSeq, - // which is an argument of send_multiple_requests_*(). - // See Request.{h,i,cpp} for definitions. - typedef CORBA_ORB_RequestSeq RequestSeq; - typedef CORBA_ORB_RequestSeq_ptr RequestSeq_ptr; - typedef CORBA_ORB_RequestSeq_var RequestSeq_var; - typedef CORBA_ORB_RequestSeq_out RequestSeq_out; + virtual TAO_ServantBase *_get_collocated_servant (STUB_Object *p) = 0; + // Return the object pointer of an collocated object it there is + // one, otherwise, return 0. Each type of ORB, e. g., IIOP ORB, + // must implement this and determine what is a collocated object + // based on information provided in the STUB_Object. void create_list (CORBA::Long count, - CORBA::NVList_ptr &new_list, - CORBA_Environment &ACE_TRY_ENV = - CORBA::default_environment ()); - - // The following are not implemented and just throw - // CORBA::NO_IMPLEMENT. - - void create_named_value (CORBA::NamedValue_ptr &nmval, - CORBA_Environment &ACE_TRY_ENV = - CORBA::default_environment ()); - - void create_exception_list (CORBA::ExceptionList_ptr &exclist, - CORBA_Environment &ACE_TRY_ENV = - CORBA::default_environment ()); - - void create_context_list (CORBA::ContextList_ptr &ctxtlist, - CORBA_Environment &ACE_TRY_ENV = - CORBA::default_environment ()); - - void get_default_context (CORBA::Context_ptr &ctx, - CORBA_Environment &ACE_TRY_ENV = - CORBA::default_environment ()); - - void create_environment (CORBA::Environment_ptr &new_env, - CORBA_Environment &ACE_TRY_ENV = - CORBA::default_environment ()); - - CORBA::Boolean get_service_information (CORBA::ServiceType service_type, - CORBA::ServiceInformation_out service_information, - CORBA::Environment &ACE_TRY_ENV = - CORBA::default_environment ()); - - void send_multiple_requests_oneway (const CORBA_ORB_RequestSeq req, - CORBA_Environment &ACE_TRY_ENV = - CORBA::default_environment ()); - - void send_multiple_requests_deferred (const CORBA_ORB_RequestSeq req, - CORBA_Environment &ACE_TRY_ENV = - CORBA::default_environment ()); - - void get_next_response (CORBA_Request_ptr &req, - CORBA_Environment &ACE_TRY_ENV = - CORBA::default_environment ()); - - CORBA::Boolean poll_next_response (CORBA_Environment &ACE_TRY_ENV = - CORBA::default_environment ()); + CORBA::NVList_ptr &retval); // = New Things from the POA Specification // @@ -462,42 +258,17 @@ public: // than is currently available. CORBA::Boolean work_pending (void); - // Returns an indication of whether the ORB needs to perform some - // work. + // Returns an indication of whether the ORB needs the <{main thread}> to + // perform some work. int perform_work (const ACE_Time_Value & = ACE_Time_Value::zero); - // This operation performs an implementation-defined unit of - // work. Note that the default behavior is not to block; this - // behavior can be modified by passing an appropriate - // <ACE_Time_Value>. - - // Typecode for the above exception. - static CORBA::TypeCode_ptr _tc_InconsistentTypeCode; - - // Dynamic Any factory functions. - // @@EXC@@ Add the ACE_THROW_SPEC for these functions... - - CORBA_DynAny_ptr create_dyn_any (const CORBA_Any& any, - CORBA::Environment &TAO_IN_ENV); - - CORBA_DynAny_ptr create_basic_dyn_any (CORBA_TypeCode_ptr tc, - CORBA::Environment &TAO_IN_ENV); - - CORBA_DynStruct_ptr create_dyn_struct (CORBA_TypeCode_ptr tc, - CORBA::Environment &TAO_IN_ENV); - - CORBA_DynSequence_ptr create_dyn_sequence (CORBA_TypeCode_ptr tc, - CORBA::Environment &TAO_IN_ENV); - - CORBA_DynArray_ptr create_dyn_array (CORBA_TypeCode_ptr tc, - CORBA::Environment &TAO_IN_ENV); - - CORBA_DynUnion_ptr create_dyn_union (CORBA_TypeCode_ptr tc, - CORBA::Environment &TAO_IN_ENV); - - CORBA_DynEnum_ptr create_dyn_enum (CORBA_TypeCode_ptr tc, - CORBA::Environment &TAO_IN_ENV); -#endif /* TAO_HAS_MINIMUM_CORBA */ + // If called by the <{main thread}>, this operation performs an + // implementation-defined unit of work. Otherwise, it does nothing. + // Note that the default behavior is not to block; this behavior can + // be modified by passing an appropriate <ACE_Time_Value>. + // + // It is platform-specific how the application and ORB arrange to + // use compatible threading primitives. int run (void); int run (ACE_Time_Value &tv); @@ -520,16 +291,12 @@ public: // has completed. <[NOTE]> <wait_for_completion>=TRUE is not // currently supported. - // @@EXC@@ Add the ACE_THROW_SPEC for these two functions + CORBA_Object_ptr resolve_initial_references (CORBA::String name, + CORBA_Environment &TAO_IN_ENV = CORBA::default_environment ()); - CORBA_Object_ptr resolve_initial_references (const char *name, - CORBA_Environment &TAO_IN_ENV = - CORBA::default_environment ()); - - CORBA_Object_ptr resolve_initial_references (const char *name, + CORBA_Object_ptr resolve_initial_references (CORBA::String name, ACE_Time_Value *timeout, - CORBA_Environment &TAO_IN_ENV = - CORBA::default_environment ()); + CORBA_Environment &TAO_IN_ENV = CORBA::default_environment ()); // This method acts as a mini-bootstrapping Naming Service, which is // provided by the ORB for certain well-known object references. // TAO supports the "NameService", "TradingService", "RootPOA", and @@ -543,35 +310,16 @@ public: // will remains compliant with the CORBA // <resolve_initial_references> specification. - // Unimplemented function - throws CORBA::NO_IMPLEMENT. - CORBA_ORB_ObjectIdList_ptr list_initial_services (CORBA_Environment &TAO_IN_ENV = - CORBA::default_environment ()); - // = TAO-specific extensions to the CORBA specification. - virtual TAO_ServantBase *_get_collocated_servant (TAO_Stub *p); - // Return the object pointer of an collocated object it there is - // one, otherwise, return 0. Each type of ORB, e. g., IIOP ORB, - // must implement this and determine what is a collocated object - // based on information provided in the TAO_Stub. - - virtual int _tao_add_to_IOR_table (ACE_CString &object_id, - CORBA::Object_ptr obj); - // Add a mapping ObjectID->IOR to the table. - - virtual int _tao_find_in_IOR_table (ACE_CString &object_id, - CORBA::Object_ptr &obj); - // Find the given ObjectID in the table. - - CORBA_Object_ptr resolve_root_poa (CORBA_Environment &TAO_IN_ENV, - const char *adapter_name = TAO_DEFAULT_ROOTPOA_NAME, + CORBA_Object_ptr resolve_root_poa (const char *adapter_name = TAO_DEFAULT_ROOTPOA_NAME, TAO_POA_Manager *poa_manager = 0, const TAO_POA_Policies *policies = 0); // Resolve the POA. - TAO_Stub *create_stub_object (const TAO_ObjectKey &key, - const char *type_id, - CORBA_Environment &TAO_IN_ENV = CORBA::default_environment ()); + STUB_Object *create_stub_object (const TAO_ObjectKey &key, + const char *type_id, + CORBA_Environment &TAO_IN_ENV = CORBA::default_environment ()); // Makes sure that the ORB is open and then creates an IIOP object // based on the endpoint. @@ -622,88 +370,73 @@ public: int should_shutdown (void); // Get the shutdown flag value - void _use_omg_ior_format (CORBA::Boolean ior); - // Set the IOR flag. - CORBA::Boolean _use_omg_ior_format (void); - // Get the IOR flag. + // Forward declaration and typedefs for the exception thrown by + // the ORB Dynamic Any factory functions. + class CORBA_ORB_InconsistentTypeCode; + typedef CORBA_ORB_InconsistentTypeCode InconsistentTypeCode; + typedef CORBA_ORB_InconsistentTypeCode *InconsistentTypeCode_ptr; + + // Typecode for the above exception. + static CORBA::TypeCode_ptr _tc_InconsistentTypeCode; + + // Dynamic Any factory functions. + + CORBA_DynAny_ptr create_dyn_any (const CORBA_Any& any, + CORBA::Environment &TAO_IN_ENV); + + CORBA_DynAny_ptr create_basic_dyn_any (CORBA_TypeCode_ptr tc, + CORBA::Environment &TAO_IN_ENV); + + CORBA_DynStruct_ptr create_dyn_struct (CORBA_TypeCode_ptr tc, + CORBA::Environment &TAO_IN_ENV); + + CORBA_DynSequence_ptr create_dyn_sequence (CORBA_TypeCode_ptr tc, + CORBA::Environment &TAO_IN_ENV); - void _optimize_collocation_objects (CORBA::Boolean opt); - // Set collocation optimization status. - CORBA::Boolean _optimize_collocation_objects (void); - // Get collocation optimization status. + CORBA_DynArray_ptr create_dyn_array (CORBA_TypeCode_ptr tc, + CORBA::Environment &TAO_IN_ENV); - TAO_ORB_Core *orb_core (void) const; - // Get the ORB core. + CORBA_DynUnion_ptr create_dyn_union (CORBA_TypeCode_ptr tc, + CORBA::Environment &TAO_IN_ENV); -#if !defined(__GNUC__) || __GNUC__ > 2 || __GNUC_MINOR__ >= 8 - typedef CORBA_ORB_ptr _ptr_type; - typedef CORBA_ORB_var _var_type; -#endif /* __GNUC__ */ - // Useful for template programming. + CORBA_DynEnum_ptr create_dyn_enum (CORBA_TypeCode_ptr tc, + CORBA::Environment &TAO_IN_ENV); protected: // We must be created via the <ORB_init> call. - CORBA_ORB (TAO_ORB_Core *orb_core); + CORBA_ORB (void); virtual ~CORBA_ORB (void); - CORBA_Object_ptr resolve_poa_current (CORBA_Environment &TAO_IN_ENV); + CORBA_Object_ptr resolve_poa_current (void); // Resolve the POA current. - CORBA_Object_ptr resolve_policy_manager (CORBA::Environment&); - // Resolve the Policy Manager for this ORB. - CORBA_Object_ptr resolve_policy_current (CORBA::Environment&); - // Resolve the Policy Current for this thread. - int run (ACE_Time_Value *tv, int break_on_timeouts); // Implements the run routine private: - CORBA_Object_ptr resolve_service (const char* service_name, - ACE_Time_Value *timeout, - CORBA::Environment& ACE_TRY_ENV); - // Resolve the service name. + CORBA_Object_ptr resolve_commandline_ref (const char *& init_ref); + // Resolve the Initial reference according to the commandline + // option -ORBInitRef <ObjectID>:<IOR> - CORBA_Object_ptr resolve_trading_service (ACE_Time_Value *timeout, - CORBA::Environment& ACE_TRY_ENV); - // Resolve the trading object reference. + CORBA_Object_ptr resolve_name_service (ACE_Time_Value *timeout); + // Resolve the name service object reference. - int multicast_query (char *buf, - const char *service_name, - u_short port, - ACE_Time_Value *timeout); + CORBA_Object_ptr resolve_trading_service (ACE_Time_Value *timeout); + // Resolve the trading object reference. + char *multicast_query (TAO_Service_ID service_id, + u_short port, + ACE_Time_Value *timeout); // returns and IOR string, the client is responsible for freeing // memory! - CORBA_Object_ptr multicast_to_service (const char *service_name, + CORBA_Object_ptr multicast_to_service (TAO_Service_ID service_id, u_short port, - ACE_Time_Value *timeout, - CORBA::Environment& ACE_TRY_ENV); + ACE_Time_Value *timeout); // Resolve the refernce of a service of type <name>. - CORBA::Object_ptr file_string_to_object (const char* filename, - CORBA::Environment& env); - // Read an IOR from a file and then parse it, returning the object - // reference. - - CORBA::Object_ptr iiop_string_to_object (const char* url, - CORBA::Environment& env); - // Read an IOR from a file and then parse it, returning the object - // reference. - - CORBA::Object_ptr ior_string_to_object (const char* ior, - CORBA::Environment& env); - // Read an IOR from a file and then parse it, returning the object - // reference. - - CORBA::Object_ptr iioploc_string_to_object (const char* string, - CORBA::Environment& env); - // Read an IOR from a file and then parse it, returning the object - // reference. - -private: ACE_SYNCH_MUTEX lock_; // lock required for mutual exclusion between multiple threads. @@ -750,23 +483,6 @@ private: TAO_Leader_Follower_Info leader_follower_info_; // Information about the leader follower model - TAO_ORB_Core *orb_core_; - // The ORB_Core that created us.... - -#ifdef TAO_HAS_VALUETYPE - TAO_ValueFactory_Map *valuetype_factory_map_; - // If non-0 then this is the Factory for OBV unmarshaling -#endif /* TAO_HAS_VALUETYPE */ - - TAO_IOR_LookupTable lookup_table_; - // Table of ObjectID->IOR mappings. - - CORBA::Boolean use_omg_ior_format_; - // Decides whether to use the URL notation or to use IOR notation. - - CORBA::Boolean optimize_collocation_objects_; - // Decides whether to use the URL notation or to use IOR notation. - // = NON-PROVIDED METHODS CORBA_ORB (const CORBA_ORB &); CORBA_ORB &operator= (const CORBA_ORB &); |