TAO_ORB_Core Class Reference

Encapsulates the state of an ORB. More...

#include <ORB_Core.h>

Collaboration diagram for TAO_ORB_Core:

Collaboration graph
[legend]
List of all members.

Collocation Strategies

enum  { ORB_CONTROL, THRU_POA, DIRECT }
TAO::Collocation_Strategy collocation_strategy (CORBA::Object_ptr object)

Public Types

typedef void(* Timeout_Hook )(TAO_ORB_Core *, TAO_Stub *, bool &, ACE_Time_Value &)
 Define the Timeout_Hook signature.

typedef void(* Sync_Scope_Hook )(TAO_ORB_Core *, TAO_Stub *, bool &, Messaging::SyncScope &)
typedef ACE_Array_Map< ACE_CString,
ACE_CString
InitRefMap

Public Member Functions

 TAO_ORB_Core (const char *id, ACE_Service_Gestalt *g)
 Constructor.

TAO_ORB_Parametersorb_params (void)
 Accessor for the ORB parameters.

TAO_Connector_Registryconnector_registry (void)
 Get the connector registry.

TAO_Parser_Registryparser_registry (void)
 Get the IOR parser registry.

TAO::PolicyFactory_Registry_Adapterpolicy_factory_registry (void)
TAO::ORBInitializer_Registry_Adapterorbinitializer_registry (void)
TAO_ProtocolFactorySetprotocol_factories (void)
 Get the protocol factories.

CORBA::ORB_ptr orb (void)
 Get pointer to the ORB.

ACE_Reactorreactor (void)
 Wrappers that forward the request to the concurrency strategy.

ACE_Thread_Managerthr_mgr (void)
 Get the ACE_Thread_Manager.

CORBA::Object_ptr root_poa (void)
 Return the RootPOA, or try to load it if not initialized already.

TAO_Adapter_Registryadapter_registry (void)
 Get the adapter registry.

TAO_Adapterpoa_adapter (void)
TAO_Protocols_Hooksget_protocols_hooks (void)
 Gets the value of TAO_ORB_Core::protocols_hooks__.

TAO_Network_Priority_Protocols_Hooksget_network_priority_protocols_hooks (void)
 Gets the value of TAO_ORB_Core::network_priority_protocols_hooks__.

int is_collocated (const TAO_MProfile &mprofile)
ACE_Allocatoroutput_cdr_dblock_allocator (void)
ACE_Allocatoroutput_cdr_buffer_allocator (void)
ACE_Allocatoroutput_cdr_msgblock_allocator (void)
ACE_Allocatorinput_cdr_dblock_allocator (void)
ACE_Allocatorinput_cdr_buffer_allocator (void)
ACE_Allocatorinput_cdr_msgblock_allocator (void)
ACE_Allocatortransport_message_buffer_allocator (void)
ACE_Data_Blockcreate_input_cdr_data_block (size_t size)
ACE_Locklocking_strategy (void)
 Return the locking strategy used for the data blocks.

TAO_Policy_Setget_default_policies (void)
 Accessor method for the default_policies_.

CORBA::Policy_ptr get_policy (CORBA::PolicyType type)
CORBA::Policy_ptr get_policy_including_current (CORBA::PolicyType type)
CORBA::Policy_ptr get_cached_policy (TAO_Cached_Policy_Type type)
CORBA::Policy_ptr get_cached_policy_including_current (TAO_Cached_Policy_Type type)
TAO_Policy_Managerpolicy_manager (void)
 Return the Policy_Manager for this ORB.

TAO_Policy_Currentpolicy_current (void)
void call_timeout_hook (TAO_Stub *stub, bool &has_timeout, ACE_Time_Value &time_value)
 Invoke the timeout hook if present.

void set_timeout_hook (Timeout_Hook hook)
void connection_timeout (TAO_Stub *stub, bool &has_timeout, ACE_Time_Value &time_value)
 Invoke the timeout hook if present.

void call_sync_scope_hook (TAO_Stub *stub, bool &has_synchronization, Messaging::SyncScope &scope)
TAO::Transport_Queueing_Strategyget_transport_queueing_strategy (TAO_Stub *stub, Messaging::SyncScope &scope)
void set_sync_scope_hook (Sync_Scope_Hook hook)
TAO_ORB_Core_TSS_Resourcesget_tss_resources (void)
 Obtain the TSS resources of this orb.

void * get_tss_resource (size_t slot_id)
 Obtain the TSS resource in the given slot.

int set_tss_resource (size_t slot_id, void *)
int add_tss_cleanup_func (ACE_CLEANUP_FUNC cleanup, size_t &slot_id)
TAO_Cleanup_Func_Registrytss_cleanup_funcs (void)
 Return the underlying TSS cleanup function registry.

TAO_Leader_Followerleader_follower (void)
 Get access to the leader_follower class.

TAO_LF_Strategylf_strategy (void)
 Get access to the leader follower strategy.

TAO_Thread_Lane_Resourceslane_resources (void)
 Get access to the thread lane resources.

int run (ACE_Time_Value *tv, int perform_work)
 Run the event loop.

void shutdown (CORBA::Boolean wait_for_completion)
 End the event loop.

bool has_shutdown (void) const
 Get the shutdown flag value.

void destroy (void)
 Shutdown the ORB and free resources.

void check_shutdown (void)
 Check if ORB has shutdown. If it has, throw an exception.

int thread_per_connection_timeout (ACE_Time_Value &timeout) const
TAO_Stubcreate_stub_object (TAO_MProfile &mprofile, const char *type_id, CORBA::PolicyList *policy_list)
TAO_Stubcreate_stub (const char *repository_id, const TAO_MProfile &profiles)
CORBA::Object_ptr create_object (TAO_Stub *the_stub)
CORBA::Long initialize_object (TAO_Stub *the_stub, CORBA::Object_ptr obj)
CORBA::Long reinitialize_object (TAO_Stub *stub)
const char * orbid (void) const
 Return ORBid string.

CORBA::Boolean use_implrepo (void)
 Do we attempt to register with the Implementation Repository.

CORBA::Boolean imr_endpoints_in_ior (void)
 Do we put the ImR's endpoints into persistent object references we create.

CORBA::Object_ptr resolve_typecodefactory (void)
 Resolve the TypeCodeFactory DLL.

CORBA::Object_ptr resolve_picurrent (void)
 Resolve the PICurrent.

CORBA::Object_ptr resolve_poa_current (void)
 Resolve POA Current.

CORBA::Object_ptr resolve_codecfactory (void)
 Resolve the CodecFactory DLL.

CORBA::Object_ptr resolve_compression_manager (void)
 Resolve the Compression DLL.

CORBA::Object_ptr resolve_dynanyfactory (void)
 Resolve the Dynamic Any Factory.

CORBA::Object_ptr resolve_ior_manipulation (void)
 Resolve the IOR Manipulation reference for this ORB.

CORBA::Object_ptr resolve_ior_table (void)
 Resolve the IOR Table reference for this ORB.

CORBA::Object_ptr resolve_rir (const char *name)
 Resolve an initial reference via the -ORBInitRef and.

CORBA::Object_ptr resolve_rt_orb (void)
 Resolve the RT ORB reference for this ORB.

const char * server_id (void) const
CORBA::ORB_ObjectIdListlist_initial_references (void)
 List all the service known by the ORB.

unsigned long _incr_refcnt (void)
 Reference counting...

unsigned long _decr_refcnt (void)
int register_handle (ACE_HANDLE handle)
int remove_handle (ACE_HANDLE handle)
TAO_Valuetype_Adaptervaluetype_adapter (void)
 Return the valuetype adapter.

TAO_IORInterceptor_Adapterior_interceptor_adapter (void)
CORBA::Boolean bidir_giop_policy (void)
void bidir_giop_policy (CORBA::Boolean)
TAO_Object_Ref_Tableobject_ref_table (void)
TAO::ObjectKey_Tableobject_key_table (void)
 Acceessor to the table that stores the object_keys.

TAO_Request_Dispatcherrequest_dispatcher (void)
 Return the current request dispatcher strategy.

void request_dispatcher (TAO_Request_Dispatcher *rd)
void load_policy_validators (TAO_Policy_Validator &validator)
TAO_Flushing_Strategyflushing_strategy (void)
 Return the flushing strategy.

TAO_Codeset_Managercodeset_manager (void)
 Get Code Set Manager.

InitRefMapinit_ref_map (void)
 Return a pointer to the -ORBInitRef map.

void set_default (const char *orb_id)
void not_default (const char *orb_id)
 Choose to be not a default ORB when there is more than one ORB.

TAO::Transport_Queueing_Strategydefault_transport_queueing_strategy (void)
CORBA::Boolean is_permanent_forward_condition (const CORBA::Object_ptr obj, const TAO_Service_Context &service_context)
ACE_Service_Gestaltconfiguration () const
 Configuration accessor method.

auto_ptr< TAO_GIOP_Fragmentation_Strategyfragmentation_strategy (TAO_Transport *transport)
 Get outgoing fragmentation strategy.

void set_eager_transport_queueing_strategy (TAO::Transport_Queueing_Strategy *strategy)
void set_delayed_transport_queueing_strategy (TAO::Transport_Queueing_Strategy *strategy)
Helper methods used by the Invocation classes.
CORBA::Object_ptr poa_current (void)
void optimize_collocation_objects (CORBA::Boolean opt)
CORBA::Boolean optimize_collocation_objects (void) const
void use_global_collocation (CORBA::Boolean opt)
CORBA::Boolean use_global_collocation (void) const
CORBA::ULong get_collocation_strategy (void) const
Access to Factories
These factories are not thread-specific, and are presented here in order to have one place to get useful information. Often, the instances to which the return pointers are stored in the Service Repository.

TAO_Resource_Factoryresource_factory (void)
 Returns pointer to the resource factory.

TAO::GUIResource_Factorygui_resource_factory (void)
 Returns pointer to the factory for creating gui resources.

TAO_Client_Strategy_Factoryclient_factory (void)
 Returns pointer to the client factory.

TAO_Server_Strategy_Factoryserver_factory (void)
 Returns pointer to the server factory.

TAO_Protocols_Hooksprotocols_hooks (void)
 Returns pointer to the Protocols_Hooks.

TAO_Thread_Lane_Resources_Managerthread_lane_resources_manager (void)
 Returns a pointer to the Thread Lane Resources Manager.

TAO_Collocation_Resolvercollocation_resolver (void)
 Returns a pointer to the Collocation Resolver.

TAO_Stub_Factorystub_factory (void)
 Returns a pointer to the Stub factory.

TAO_Endpoint_Selector_Factoryendpoint_selector_factory (void)
 Returns a pointer to the endpoint selector factory.

CORBA::Environmentdefault_environment (void) const
void default_environment (CORBA::Environment *)
CORBA::Object_ptr implrepo_service (void)
void implrepo_service (const CORBA::Object_ptr ir)
ORB Core Service Hooks
These methods would represent the hooks in the ORB Core. These hooks would be used to call back on the services or other features that are dynamically loaded.

CORBA::Boolean service_profile_selection (const TAO_MProfile &mprofile, TAO_Profile *&profile)
CORBA::Boolean object_is_nil (CORBA::Object_ptr object)
TAO_Service_Callbacks::Profile_Equivalence is_profile_equivalent (const TAO_Profile *this_p, const TAO_Profile *that_p)
CORBA::ULong hash_service (TAO_Profile *this_p, CORBA::ULong max)
void service_context_list (TAO_Stub *stub, TAO_Service_Context &service_context, CORBA::Boolean retstart)
TAO_Fault_Tolerance_Servicefault_tolerance_service (void)
 Return a reference to the Fault Tolerant service object.

TAO::Invocation_Status service_raise_comm_failure (IOP::ServiceContextList &clist, TAO_Profile *profile)
TAO::Invocation_Status service_raise_transient_failure (IOP::ServiceContextList &clist, TAO_Profile *profile)
Portable Interceptor Related Methods
These are support methods for interceptor registration and interceptor set (an array) access, in addition to PICurrent access.

CORBA::Object_ptr pi_current (void)
 Return a pointer to the cached TAO::PICurrent object.

void pi_current (CORBA::Object_ptr current)
 Set the pointer to the cached TAO::PICurrent object.

void add_interceptor (PortableInterceptor::ClientRequestInterceptor_ptr interceptor)
 Register a client request interceptor.

void add_interceptor (PortableInterceptor::ServerRequestInterceptor_ptr interceptor)
 Register a server request interceptor.

void add_interceptor (PortableInterceptor::ClientRequestInterceptor_ptr interceptor, const CORBA::PolicyList &policies)
 Register a client request interceptor with policies.

void add_interceptor (PortableInterceptor::ServerRequestInterceptor_ptr interceptor, const CORBA::PolicyList &policies)
 Register a server request interceptor with policies.

TAO::ClientRequestInterceptor_Adapterclientrequestinterceptor_adapter (void)
TAO::ServerRequestInterceptor_Adapterserverrequestinterceptor_adapter (void)
void add_interceptor (PortableInterceptor::IORInterceptor_ptr interceptor)
 Register an IOR interceptor.


Static Public Member Functions

void set_resource_factory (const char *resource_factory_name)
 Sets the value of TAO_ORB_Core::resource_factory_.

void set_gui_resource_factory (TAO::GUIResource_Factory *gui_factory)
void set_network_priority_protocols_hooks (const char *network_priority_protocols_hooks_name)
 Sets the value of TAO_ORB_Core::network_priority_protocols_hooks_.

void dynamic_adapter_name (const char *name)
 Sets the value of TAO_ORB_Core::dynamic_adapter_name_.

const char * dynamic_adapter_name (void)
 Gets the value of TAO_ORB_Core::dynamic_adapter_name_.

void ifr_client_adapter_name (const char *name)
 Sets the value of TAO_ORB_Core::ifr_client_adapter_name_.

const char * ifr_client_adapter_name (void)
 Gets the value of TAO_ORB_Core::ifr_client_adapter_name_.

void typecodefactory_adapter_name (const char *name)
 Sets the value of TAO_ORB_Core::typecodefactory_adapter_name_.

const char * typecodefactory_adapter_name (void)
 Gets the value of TAO_ORB_Core::typecodefactory_adapter_name_.

void iorinterceptor_adapter_factory_name (const char *name)
 Sets the value of TAO_ORB_Core::iorinterceptor_adapter_factory_name_.

const char * iorinterceptor_adapter_factory_name (void)
 Gets the value of TAO_ORB_Core::iorinterceptor_adapter_factory_name_.

void valuetype_adapter_factory_name (const char *name)
 Sets the value of TAO_ORB_Core::valuetype_adapter_factory_name.

const char * valuetype_adapter_factory_name (void)
 Gets the value of TAO_ORB_Core::valuetype_adapter_factory_name.

void connection_timeout_hook (Timeout_Hook hook)
 Define the Timeout_Hook signature.


Public Attributes

TAO_Protocols_Hooksprotocols_hooks_
 Handle to the factory for protocols_hooks_..

TAO_Network_Priority_Protocols_Hooksnetwork_priority_protocols_hooks_
 Handle to the factory for network_priority_protocols_hooks_..


Protected Member Functions

 ~TAO_ORB_Core (void)
int init (int &argc, char *argv[])
int fini (void)
ACE_Data_Blockcreate_data_block_i (size_t size, ACE_Allocator *buffer_allocator, ACE_Allocator *dblock_allocator, ACE_Lock *lock)
 Routine that creates a ACE_Data_Block given the lock and allocators.

void resolve_typecodefactory_i (void)
 Obtain and cache the typecode factory object reference.

void resolve_poa_current_i (void)
 Obtain and cache the poa current.

void resolve_picurrent_i (void)
 Obtain and cache the picurrent factory object reference.

TAO::ClientRequestInterceptor_Adapterclientrequestinterceptor_adapter_i (void)
TAO::ServerRequestInterceptor_Adapterserverrequestinterceptor_adapter_i (void)
void resolve_codecfactory_i (void)
 Obtain and cache the codec factory object reference.

void resolve_compression_manager_i (void)
 Obtain and cache the compression manager object reference.

void resolve_dynanyfactory_i (void)
 Obtain and cache the dynamic any factory object reference.

void resolve_iormanipulation_i (void)
 Obtain and cache the IORManipulation factory object reference.

void services_callbacks_init (void)
void destroy_interceptors (void)
int set_endpoint_helper (const ACE_CString &lane, const ACE_CString &endpoints)
TAO::PolicyFactory_Registry_Adapterpolicy_factory_registry_i (void)
TAO::ORBInitializer_Registry_Adapterorbinitializer_registry_i (void)
CORBA::Long initialize_object_i (TAO_Stub *the_stub, const TAO_MProfile &mprofile)
 Common code from ::initialize_object and ::reinitialize_object.

 ACE_TSS_TYPE (TAO_ORB_Core_TSS_Resources) tss_resources_
 This is where the tss resources for this ORB are stored.


Protected Attributes

TAO_SYNCH_MUTEX lock_
 Synchronize internal state...

TAO_Thread_Lane_Resources_Managerthread_lane_resources_manager_
TAO_Collocation_Resolvercollocation_resolver_
TAO_Stub_Factorystub_factory_
TAO_ProtocolFactorySetprotocol_factories_
CORBA::Object_ptr implrepo_service_
 The cached IOR for the Implementation Repository.

int use_implrepo_
 Flag for whether the implrepo support is enabled or not.

int imr_endpoints_in_ior_
 Flag for whether to put the ImR endpoints into our object refs.

CORBA::Object_ptr typecode_factory_
 The cached IOR for the TypeCodeFactory DLL.

CORBA::Object_ptr codec_factory_
 The cached IOR for the CodecFactory DLL.

CORBA::Object_ptr compression_manager_
 The cached IOR for the Compression DLL.

CORBA::Object_ptr dynany_factory_
 The cached object reference for the DynAnyFactory.

CORBA::Object_ptr ior_manip_factory_
 The cached object reference for the IORManipulataion.

CORBA::Object_ptr ior_table_
 The cached object reference for the IORTable.

CORBA::Object_var rt_orb_
 The cached object reference for the RTCORBA::RTORB.

CORBA::Object_var rt_current_
 The cached object reference for the RTCORBA::Current interface.

CORBA::ORB_ptr orb_
CORBA::Object_var root_poa_
TAO_ORB_Parameters orb_params_
 Parameters used by the ORB.

InitRefMap init_ref_map_
 Return InitRefMap to find if a particular object id is present.

TAO_Object_Ref_Table object_ref_table_
TAO::ObjectKey_Table object_key_table_
 Table that stores the object key instead of caching one per-profile.

char * orbid_
 The ORBid for this ORB.

TAO_Resource_Factoryresource_factory_
 Handle to the factory for resource information..

ACE_CString server_id_
 The server_id_ that was passed via -ORBServerId option.

TAO_Client_Strategy_Factoryclient_factory_
 Handle to the factory for Client-side strategies.

TAO_Server_Strategy_Factoryserver_factory_
 Handle to the factory for Server-side strategies.

CORBA::Boolean opt_for_collocation_
CORBA::Boolean use_global_collocation_
CORBA::ULong collocation_strategy_
 Default collocation policy. This should never be ORB_CONTROL.

TAO_Policy_Managerpolicy_manager_
 The Policy_Manager for this ORB.

TAO_Policy_Setdefault_policies_
 The default policies.

TAO_Policy_Currentpolicy_current_
 Policy current.

TAO_Request_Dispatcherrequest_dispatcher_
 The request dispatching strategy.

CORBA::Object_var poa_current_
TAO_Adapter_Registry adapter_registry_
 The list of Adapters used in this ORB.

TAO_Adapterpoa_adapter_
 An optimization for the POA.

ACE_Thread_Manager tm_
 The Thread Manager.

ACE_Lock_Adapter< TAO_SYNCH_MUTEX > data_block_lock_
 The data block reference counts are locked using this mutex.

TAO_Cleanup_Func_Registry tss_cleanup_funcs_
bool has_shutdown_
 Flag which denotes that the ORB has been shutdown.

TAO_SYNCH_MUTEX open_lock_
 Mutual exclusion for calling open.

TAO_Endpoint_Selector_Factoryendpoint_selector_factory_
TAO::Transport_Queueing_Strategyeager_transport_queueing_strategy_
 This strategy will buffer messages.

TAO::Transport_Queueing_Strategydelayed_transport_queueing_strategy_
 This strategy will buffer messages.

TAO::Transport_Queueing_Strategyflush_transport_queueing_strategy_
TAO::Transport_Queueing_Strategydefault_transport_queueing_strategy_
 This strategy will not queue by default and not flush.

ACE_Atomic_Op< TAO_SYNCH_MUTEX,
unsigned long > 
refcount_
 Number of outstanding references to this object.

TAO::PolicyFactory_Registry_Adapterpolicy_factory_registry_
 Registry containing all registered policy factories.

TAO::ORBInitializer_Registry_Adapterorbinitializer_registry_
 Registry containing all orb initializers.

CORBA::Object_ptr pi_current_
 Cached pointer/reference to the PICurrent object.

TAO::ClientRequestInterceptor_Adapterclient_request_interceptor_adapter_
 The adapter for handling client request interceptors.

TAO::ServerRequestInterceptor_Adapterserver_request_interceptor_adapter_
 The adapter for handling server request interceptors.

TAO_IORInterceptor_Adapterior_interceptor_adapter_
 IORInterceptor adapter.

TAO_Valuetype_Adaptervaluetype_adapter_
 Pointer to the valuetype adapter.

TAO_Parser_Registry parser_registry_
 The IOR parser registry.

TAO_BiDir_Adapterbidir_adapter_
 BiDirectional GIOP factory.

CORBA::Boolean bidir_giop_policy_
 Bir Dir GIOP policy value.

TAO_Flushing_Strategyflushing_strategy_
 Hold the flushing strategy.

TAO_Codeset_Managercodeset_manager_
 Code Set Manager, received from the Resource Factory.

ACE_Service_Gestaltconfig_
 ORB's service configuration.

Sync_Scope_Hook sync_scope_hook_
 The hook to be set for the SyncScopePolicy.

Timeout_Hook timeout_hook_
 The hook to be set for the RelativeRoundtripTimeoutPolicy.

Service Level Hooks
TAO_Fault_Tolerance_Service ft_service_
 Fault Tolerant service hook.

int thread_per_connection_use_timeout_
ACE_Time_Value thread_per_connection_timeout_

Private Member Functions

void resolve_ior_table_i (void)
 Obtain and cache the dynamic any factory object reference.

CORBA::Boolean is_collocation_enabled (TAO_ORB_Core *other_orb, const TAO_MProfile &mp)
 TAO_ORB_Core (const TAO_ORB_Core &)
void operator= (const TAO_ORB_Core &)

Private Attributes

bool use_local_memory_pool_

Friends

class TAO_ORB_Core_Auto_Ptr
CORBA::ORB_ptr CORBA::ORB_init (int &, char *argv[], const char *)

Detailed Description

Encapsulates the state of an ORB.

This is the implementation class for the CORBA::ORB interface. The class also encapsulates the access to the ORB resources and its state.

Some resources can be TSS or global, those resources are always accessed through a TSS interface, but are allocated using the Resource_Factory. If the resource is really global the Resource_Factory will simply return a pointer to the global instance.

Definition at line 158 of file ORB_Core.h.


Member Typedef Documentation

typedef ACE_Array_Map<ACE_CString, ACE_CString> TAO_ORB_Core::InitRefMap
 

Definition at line 849 of file ORB_Core.h.

typedef void(* TAO_ORB_Core::Sync_Scope_Hook)(TAO_ORB_Core *, TAO_Stub *, bool &, Messaging::SyncScope &)
 

Definition at line 526 of file ORB_Core.h.

Referenced by call_sync_scope_hook(), and set_sync_scope_hook().

typedef void(* TAO_ORB_Core::Timeout_Hook)(TAO_ORB_Core *, TAO_Stub *, bool&, ACE_Time_Value&)
 

Define the Timeout_Hook signature.

Definition at line 467 of file ORB_Core.h.

Referenced by call_timeout_hook(), connection_timeout(), connection_timeout_hook(), and set_timeout_hook().


Member Enumeration Documentation

anonymous enum
 

Enumeration values:
ORB_CONTROL  Indicate object should refer to ORB for either one of the following strategies.
THRU_POA  Collocated calls will go thru POA.
DIRECT  Collocated calls invoke operation on Servant directly.

Definition at line 223 of file ORB_Core.h.

00224   {
00225     /// Indicate object should refer to ORB for either one of the
00226     /// following strategies.
00227     ORB_CONTROL,
00228 
00229     /// Collocated calls will go thru POA.
00230     THRU_POA,
00231 
00232     /// Collocated calls invoke operation on Servant directly.
00233     DIRECT
00234   };


Constructor & Destructor Documentation

TAO_ORB_Core::TAO_ORB_Core const char *  id,
ACE_Service_Gestalt g
 

Constructor.

Definition at line 183 of file ORB_Core.cpp.

References ACE_NEW, TAO_DEFAULT_OBJECT_REF_TABLE_SIZE, TAO_HAS_BUFFERING_CONSTRAINT_POLICY, TAO_HAS_CORBA_MESSAGING, TAO_POLICY_ORB_SCOPE, and TAO_USE_LOCAL_MEMORY_POOL.

00185   : protocols_hooks_ (0),
00186     network_priority_protocols_hooks_ (0),
00187 #if TAO_USE_LOCAL_MEMORY_POOL == 1
00188     use_local_memory_pool_ (true),
00189 #else
00190     use_local_memory_pool_ (false),
00191 #endif
00192     lock_ (),
00193     thread_lane_resources_manager_ (0),
00194     collocation_resolver_ (0),
00195     stub_factory_ (0),
00196     protocol_factories_ (0),
00197     implrepo_service_ (CORBA::Object::_nil ()),
00198     use_implrepo_ (0),
00199     imr_endpoints_in_ior_ (1),
00200     typecode_factory_ (CORBA::Object::_nil ()),
00201     codec_factory_ (CORBA::Object::_nil ()),
00202     compression_manager_ (CORBA::Object::_nil ()),
00203     dynany_factory_ (CORBA::Object::_nil ()),
00204     ior_manip_factory_ (CORBA::Object::_nil ()),
00205     ior_table_ (CORBA::Object::_nil ()),
00206     orb_ (CORBA::ORB::_nil ()),
00207     root_poa_ (),
00208     orb_params_ (),
00209     init_ref_map_ (TAO_DEFAULT_OBJECT_REF_TABLE_SIZE),
00210     object_ref_table_ (),
00211     object_key_table_ (),
00212     orbid_ (ACE_OS::strdup (orbid ? orbid : "")),
00213     resource_factory_ (0),
00214     client_factory_ (0),
00215     server_factory_ (0),
00216     opt_for_collocation_ (true),
00217     use_global_collocation_ (true),
00218     collocation_strategy_ (THRU_POA),
00219 
00220 #if (TAO_HAS_CORBA_MESSAGING == 1)
00221 
00222     policy_manager_ (0),
00223     default_policies_ (0),
00224     policy_current_ (0),
00225 
00226 #endif /* TAO_HAS_CORBA_MESSAGING == 1 */
00227 
00228     poa_current_ (),
00229     adapter_registry_ (this),
00230     poa_adapter_ (0),
00231     tm_ (),
00232     tss_cleanup_funcs_ (),
00233     tss_resources_ (),
00234     has_shutdown_ (true),  // Start the ORB in a  "shutdown" state.  Only
00235                            // after CORBA::ORB_init() is called will the
00236                            // ORB no longer be shutdown.  This does not
00237                            // mean that the ORB can be reinitialized.  It
00238                            // can only be initialized once.
00239     thread_per_connection_use_timeout_ (1),
00240     open_lock_ (),
00241     endpoint_selector_factory_ (0),
00242 #if (TAO_HAS_BUFFERING_CONSTRAINT_POLICY == 1)
00243     eager_transport_queueing_strategy_ (0),
00244     delayed_transport_queueing_strategy_ (0),
00245     flush_transport_queueing_strategy_ (0),
00246 #endif /* TAO_HAS_BUFFERING_CONSTRAINT_POLICY == 1 */
00247     refcount_ (1),
00248     policy_factory_registry_ (0),
00249     orbinitializer_registry_ (0),
00250 #if (TAO_HAS_INTERCEPTORS == 1)
00251     pi_current_ (CORBA::Object::_nil ()),
00252     client_request_interceptor_adapter_ (0),
00253     server_request_interceptor_adapter_ (0),
00254 #endif  /* TAO_HAS_INTERCEPTORS == 1 */
00255     ior_interceptor_adapter_ (0),
00256     valuetype_adapter_ (0),
00257     parser_registry_ (),
00258     bidir_adapter_ (0),
00259     bidir_giop_policy_ (0),
00260     flushing_strategy_ (0),
00261     codeset_manager_ (0),
00262     config_ (gestalt),
00263     sync_scope_hook_ (0),
00264     timeout_hook_ (0)
00265 {
00266 #if (TAO_HAS_BUFFERING_CONSTRAINT_POLICY == 1)
00267 
00268   ACE_NEW (this->flush_transport_queueing_strategy_,
00269            TAO::Flush_Transport_Queueing_Strategy);
00270 
00271 #endif /* TAO_HAS_BUFFERING_CONSTRAINT_POLICY == 1 */
00272 
00273 #if (TAO_HAS_CORBA_MESSAGING == 1)
00274 
00275   ACE_NEW (this->policy_manager_,
00276            TAO_Policy_Manager);
00277 
00278   ACE_NEW (this->default_policies_,
00279            TAO_Policy_Set (TAO_POLICY_ORB_SCOPE));
00280 
00281   ACE_NEW (this->policy_current_,
00282            TAO_Policy_Current);
00283 
00284 #endif /* TAO_HAS_CORBA_MESSAGING == 1 */
00285 
00286   // Initialize the default request dispatcher.
00287   ACE_NEW (this->request_dispatcher_,
00288            TAO_Request_Dispatcher);
00289 
00290 }

TAO_ORB_Core::~TAO_ORB_Core void   )  [protected]
 

Destructor is protected since the ORB Core is a reference counted object.

Definition at line 292 of file ORB_Core.cpp.

References TAO::ORB::close_services(), codeset_manager_, default_policies_, delayed_transport_queueing_strategy_, eager_transport_queueing_strategy_, flush_transport_queueing_strategy_, flushing_strategy_, ACE_OS::free(), ACE_Service_Config::global(), orb_, orbinitializer_registry_, policy_current_, policy_factory_registry_, policy_manager_, request_dispatcher_, and thread_lane_resources_manager_.

00293 {
00294   delete this->thread_lane_resources_manager_;
00295 
00296   delete this->flushing_strategy_;
00297 
00298   ACE_OS::free (this->orbid_);
00299 
00300 #if (TAO_HAS_BUFFERING_CONSTRAINT_POLICY == 1)
00301 
00302   delete this->eager_transport_queueing_strategy_;
00303   delete this->delayed_transport_queueing_strategy_;
00304   delete this->flush_transport_queueing_strategy_;
00305 
00306 #endif /* TAO_HAS_BUFFERING_CONSTRAINT_POLICY == 1 */
00307 
00308 #if (TAO_HAS_CORBA_MESSAGING == 1)
00309 
00310   ::CORBA::release (this->policy_manager_);
00311   delete this->default_policies_;
00312   ::CORBA::release (this->policy_current_);
00313 
00314 #endif /* TAO_HAS_CORBA_MESSAGING == 1 */
00315 
00316   delete this->request_dispatcher_;
00317 
00318   delete this->policy_factory_registry_;
00319 
00320   // Don't delete, is a process wide singleton shared by all orbs
00321   orbinitializer_registry_ = 0;
00322 
00323   ::CORBA::release (this->orb_);
00324 
00325   delete this->codeset_manager_;
00326   this->codeset_manager_ = 0;
00327 
00328   // This will destroy the service repository for this core
00329   (void) TAO::ORB::close_services (this->config_);
00330 
00331   if (this->config_ != ACE_Service_Config::global())
00332     delete this->config_;
00333 
00334   this->config_ = 0;
00335 }

TAO_ORB_Core::TAO_ORB_Core const TAO_ORB_Core  )  [private]
 


Member Function Documentation

ACE_INLINE unsigned long TAO_ORB_Core::_decr_refcnt void   ) 
 

Definition at line 23 of file ORB_Core.inl.

References fini().

Referenced by TAO_ORB_Core_Auto_Ptr::reset(), TAO::ORB_Core_Ref_Counter::~ORB_Core_Ref_Counter(), and TAO_ORB_Core_Auto_Ptr::~TAO_ORB_Core_Auto_Ptr().

00024 {
00025   unsigned long count = --this->refcount_;
00026   if (count != 0)
00027     return count;
00028 
00029   this->fini ();
00030   return 0;
00031 }

ACE_INLINE unsigned long TAO_ORB_Core::_incr_refcnt void   ) 
 

Reference counting...

Definition at line 17 of file ORB_Core.inl.

Referenced by TAO::ORB_Table::find(), initialize_object_i(), TAO::Collocated_Invocation::invoke(), and TAO::ORB_Core_Ref_Counter::ORB_Core_Ref_Counter().

00018 {
00019   return this->refcount_++;
00020 }

TAO_ORB_Core::ACE_TSS_TYPE TAO_ORB_Core_TSS_Resources   )  [protected]
 

This is where the tss resources for this ORB are stored.

ACE_INLINE TAO_Adapter_Registry * TAO_ORB_Core::adapter_registry void   ) 
 

Get the adapter registry.

Definition at line 160 of file ORB_Core.inl.

References adapter_registry_.

Referenced by create_object(), TAO_Request_Dispatcher::dispatch(), and initialize_object_i().

00161 {
00162   return &this->adapter_registry_;
00163 }

void TAO_ORB_Core::add_interceptor PortableInterceptor::IORInterceptor_ptr  interceptor  ) 
 

Register an IOR interceptor.

Definition at line 3109 of file ORB_Core.cpp.

References ACE_ERROR, ACE_TEXT, TAO_IORInterceptor_Adapter::add_interceptor(), ior_interceptor_adapter(), ior_interceptor_adapter_, PortableInterceptor::IORInterceptor_ptr, and LM_ERROR.

03111 {
03112   if (this->ior_interceptor_adapter ())
03113     {
03114       this->ior_interceptor_adapter_->add_interceptor (interceptor);
03115     }
03116   else
03117     {
03118       ACE_ERROR ((LM_ERROR,
03119                   ACE_TEXT ("(%P|%t) %p\n"),
03120                   ACE_TEXT ("ERROR: ORB Core unable to find the ")
03121                   ACE_TEXT ("IORInterceptor Adapter Factory instance")));
03122 
03123       throw ::CORBA::INTERNAL ();
03124     }
03125 }

void TAO_ORB_Core::add_interceptor PortableInterceptor::ServerRequestInterceptor_ptr  interceptor,
const CORBA::PolicyList policies
 

Register a server request interceptor with policies.

Definition at line 3259 of file ORB_Core.cpp.

References ACE_ERROR, ACE_TEXT, TAO::ServerRequestInterceptor_Adapter::add_interceptor(), LM_ERROR, CORBA::PolicyList, server_request_interceptor_adapter_, serverrequestinterceptor_adapter_i(), and PortableInterceptor::ServerRequestInterceptor_ptr.

03262 {
03263   if (this->serverrequestinterceptor_adapter_i ())
03264     {
03265       this->server_request_interceptor_adapter_->add_interceptor (
03266         interceptor,
03267         policies);
03268 
03269     }
03270   else
03271     {
03272       ACE_ERROR ((LM_ERROR,
03273                   ACE_TEXT ("(%P|%t) %p\n"),
03274                   ACE_TEXT ("ERROR: ORB Core unable to find the ")
03275                   ACE_TEXT ("Server Request Interceptor Adapter Factory ")
03276                   ACE_TEXT ("instance")));
03277 
03278       throw ::CORBA::INTERNAL ();
03279     }
03280 }

void TAO_ORB_Core::add_interceptor PortableInterceptor::ClientRequestInterceptor_ptr  interceptor,
const CORBA::PolicyList policies
 

Register a client request interceptor with policies.

Definition at line 3235 of file ORB_Core.cpp.

References ACE_ERROR, ACE_TEXT, TAO::ClientRequestInterceptor_Adapter::add_interceptor(), client_request_interceptor_adapter_, clientrequestinterceptor_adapter_i(), PortableInterceptor::ClientRequestInterceptor_ptr, LM_ERROR, and CORBA::PolicyList.

03238 {
03239   if (this->clientrequestinterceptor_adapter_i ())
03240     {
03241       this->client_request_interceptor_adapter_->add_interceptor (
03242         interceptor,
03243         policies);
03244 
03245     }
03246   else
03247     {
03248       ACE_ERROR ((LM_ERROR,
03249                   ACE_TEXT ("(%P|%t) %p\n"),
03250                   ACE_TEXT ("ERROR: ORB Core unable to find the ")
03251                   ACE_TEXT ("Client Request Interceptor Adapter Factory ")
03252                   ACE_TEXT ("instance")));
03253 
03254       throw ::CORBA::INTERNAL ();
03255     }
03256 }

void TAO_ORB_Core::add_interceptor PortableInterceptor::ServerRequestInterceptor_ptr  interceptor  ) 
 

Register a server request interceptor.

Definition at line 3214 of file ORB_Core.cpp.

References ACE_ERROR, ACE_TEXT, TAO::ServerRequestInterceptor_Adapter::add_interceptor(), LM_ERROR, server_request_interceptor_adapter_, serverrequestinterceptor_adapter_i(), and PortableInterceptor::ServerRequestInterceptor_ptr.

03217 {
03218   if (this->serverrequestinterceptor_adapter_i ())
03219     {
03220       this->server_request_interceptor_adapter_->add_interceptor (interceptor);
03221     }
03222   else
03223     {
03224       ACE_ERROR ((LM_ERROR,
03225                   ACE_TEXT ("(%P|%t) %p\n"),
03226                   ACE_TEXT ("ERROR: ORB Core unable to find the ")
03227                   ACE_TEXT ("Server Request Interceptor Adapter Factory ")
03228                   ACE_TEXT ("instance")));
03229 
03230       throw ::CORBA::INTERNAL ();
03231     }
03232 }

void TAO_ORB_Core::add_interceptor PortableInterceptor::ClientRequestInterceptor_ptr  interceptor  ) 
 

Register a client request interceptor.

Definition at line 3165 of file ORB_Core.cpp.

References ACE_ERROR, ACE_TEXT, TAO::ClientRequestInterceptor_Adapter::add_interceptor(), client_request_interceptor_adapter_, clientrequestinterceptor_adapter_i(), PortableInterceptor::ClientRequestInterceptor_ptr, and LM_ERROR.

03168 {
03169   if (this->clientrequestinterceptor_adapter_i ())
03170     {
03171       this->client_request_interceptor_adapter_->add_interceptor (interceptor);
03172     }
03173   else
03174     {
03175       ACE_ERROR ((LM_ERROR,
03176                   ACE_TEXT ("(%P|%t) %p\n"),
03177                   ACE_TEXT ("ERROR: ORB Core unable to find the ")
03178                   ACE_TEXT ("Client Request Interceptor Adapter Factory ")
03179                   ACE_TEXT ("instance")));
03180 
03181       throw ::CORBA::INTERNAL ();
03182     }
03183 }

int TAO_ORB_Core::add_tss_cleanup_func ACE_CLEANUP_FUNC  cleanup,
size_t &  slot_id
 

Register a TSS cleanup function. The slot ID for the corresponding ORB core TSS resource is returned by the reference argument. This method return 0 on success, and -1 on failure.

Definition at line 2910 of file ORB_Core.cpp.

References TAO_Cleanup_Func_Registry::register_cleanup_function(), and tss_cleanup_funcs_.

02911 {
02912   return this->tss_cleanup_funcs_.register_cleanup_function (cleanup, slot_id);
02913 }

ACE_INLINE void TAO_ORB_Core::bidir_giop_policy CORBA::Boolean   ) 
 

Definition at line 49 of file ORB_Core.inl.

References bidir_giop_policy_.

00050 {
00051   this->bidir_giop_policy_ = val;
00052 }

ACE_INLINE CORBA::Boolean TAO_ORB_Core::bidir_giop_policy void   ) 
 

Set and Get methods to indicate whether a BiDir IIOP policy has been set in the POA.

Note:
At present, the value will be true even if one of the POA's is set with the Bi Dir GIOP policy.

Definition at line 43 of file ORB_Core.inl.

References bidir_giop_policy_.

Referenced by TAO_IIOP_Transport::generate_request_header(), and TAO_GIOP_Message_Generator_Parser_12::parse_request_header().

00044 {
00045   return this->bidir_giop_policy_;
00046 }

void TAO_ORB_Core::call_sync_scope_hook TAO_Stub stub,
bool &  has_synchronization,
Messaging::SyncScope scope
 

Definition at line 2860 of file ORB_Core.cpp.

References Sync_Scope_Hook, sync_scope_hook_, and Messaging::SyncScope.

Referenced by TAO::Invocation_Adapter::set_response_flags().

02863 {
02864   Sync_Scope_Hook sync_scope_hook = this->sync_scope_hook_;
02865 
02866   if (sync_scope_hook == 0)
02867     {
02868       has_synchronization = false;
02869       return;
02870     }
02871 
02872   (*sync_scope_hook) (this, stub, has_synchronization, scope);
02873 }

void TAO_ORB_Core::call_timeout_hook TAO_Stub stub,
bool &  has_timeout,
ACE_Time_Value time_value
 

Invoke the timeout hook if present.

The timeout hook is used to determine if the timeout policy is set and with what value. If the ORB is compiled without support for Messaging this feature does not take effect

Parameters:
has_timeout returns 0 if there is no timeout policy set.
time_value returns the timeout value in effect for the object, thread and current ORB.

Definition at line 2916 of file ORB_Core.cpp.

References Timeout_Hook, and timeout_hook_.

Referenced by TAO::LocateRequest_Invocation_Adapter::get_timeout(), and TAO::Invocation_Adapter::get_timeout().

02919 {
02920   Timeout_Hook timeout_hook = this->timeout_hook_;
02921 
02922   if (timeout_hook == 0)
02923     {
02924       has_timeout = false;
02925       return;
02926     }
02927   (*timeout_hook) (this, stub, has_timeout, time_value);
02928 }

void TAO_ORB_Core::check_shutdown void   ) 
 

Check if ORB has shutdown. If it has, throw an exception.

Definition at line 2275 of file ORB_Core.cpp.

References has_shutdown().

Referenced by CORBA::ORB::check_shutdown().

02276 {
02277   if (this->has_shutdown ())
02278     {
02279       // As defined by the CORBA 2.3 specification, throw a
02280       // CORBA::BAD_INV_ORDER exception with minor code 4 if the ORB
02281       // has shutdown by the time an ORB function is called.
02282 
02283       throw ::CORBA::BAD_INV_ORDER (CORBA::OMGVMCID | 4, CORBA::COMPLETED_NO);
02284     }
02285 }

TAO_Client_Strategy_Factory * TAO_ORB_Core::client_factory void   ) 
 

Returns pointer to the client factory.

Definition at line 1730 of file ORB_Core.cpp.

References ACE_TEXT, client_factory_, and configuration().

Referenced by TAO_Connector::create_connect_strategy(), TAO::Transport_Cache_Manager::find_transport(), TAO_Muxed_TMS::TAO_Muxed_TMS(), TAO_Transport::TAO_Transport(), TAO::Profile_Transport_Resolver::use_parallel_connect(), and TAO_Wait_On_Read::wait().

01731 {
01732   if (this->client_factory_ == 0)
01733     {
01734       // Look in the service repository for an instance.
01735       this->client_factory_ =
01736         ACE_Dynamic_Service<TAO_Client_Strategy_Factory>::instance
01737           (this->configuration (),
01738            ACE_TEXT ("Client_Strategy_Factory"));
01739     }
01740 
01741   return this->client_factory_;
01742 }

ACE_INLINE TAO::ClientRequestInterceptor_Adapter * TAO_ORB_Core::clientrequestinterceptor_adapter void   ) 
 

Get the Client Request Interceptor adapter. Will not create a new one if not available yet.

Definition at line 568 of file ORB_Core.inl.

References client_request_interceptor_adapter_.

00569 {
00570   return this->client_request_interceptor_adapter_;
00571 }

TAO::ClientRequestInterceptor_Adapter * TAO_ORB_Core::clientrequestinterceptor_adapter_i void   )  [protected]
 

Get the Client Request Interceptor adapter. If not created, this method will try to create one if needed.

Definition at line 3186 of file ORB_Core.cpp.

References ACE_GUARD_RETURN, ACE_TEXT, client_request_interceptor_adapter_, configuration(), TAO_ClientRequestInterceptor_Adapter_Factory::create(), and TAO_SYNCH_MUTEX.

Referenced by add_interceptor().

03187 {
03188   if (this->client_request_interceptor_adapter_ == 0)
03189     {
03190       ACE_GUARD_RETURN (TAO_SYNCH_MUTEX,
03191                         ace_mon,
03192                         this->lock_,
03193                         0);
03194 
03195       if (this->client_request_interceptor_adapter_ == 0)
03196         {
03197           TAO_ClientRequestInterceptor_Adapter_Factory *factory =
03198             ACE_Dynamic_Service<TAO_ClientRequestInterceptor_Adapter_Factory>::instance
03199               (this->configuration (),
03200                ACE_TEXT ("ClientRequestInterceptor_Adapter_Factory"));
03201 
03202           if (factory)
03203             {
03204               this->client_request_interceptor_adapter_ =
03205                 factory->create ();
03206             }
03207         }
03208     }
03209 
03210   return this->client_request_interceptor_adapter_;
03211 }

ACE_INLINE TAO_Codeset_Manager * TAO_ORB_Core::codeset_manager void   ) 
 

Get Code Set Manager.

Definition at line 417 of file ORB_Core.inl.

References TAO_Resource_Factory::codeset_manager(), codeset_manager_, TAO_ORB_Parameters::negotiate_codesets(), orb_params(), and resource_factory().

Referenced by TAO_IIOP_Acceptor::create_new_profile(), TAO_IIOP_Acceptor::create_shared_profile(), TAO_Transport::generate_request_header(), init(), TAO_GIOP_Message_Base::process_request(), and TAO::Profile_Transport_Resolver::resolve().

00418 {
00419   if (this->orb_params()->negotiate_codesets() == 0)
00420     return 0;
00421   if (this->codeset_manager_ == 0)
00422     {
00423       // This causes a factory to be loaded which will call
00424       // the codeset_manager setter in this thread.
00425       this->codeset_manager_ =
00426         this->resource_factory()->codeset_manager();
00427       if (this->codeset_manager_ == 0)
00428         this->orb_params()->negotiate_codesets(false);
00429     }
00430   return this->codeset_manager_;
00431 }

TAO_Collocation_Resolver & TAO_ORB_Core::collocation_resolver void   ) 
 

Returns a pointer to the Collocation Resolver.

Definition at line 1535 of file ORB_Core.cpp.

References ACE_TEXT_CHAR_TO_TCHAR, collocation_resolver_, and configuration().

Referenced by collocation_strategy().

01536 {
01537   // Check if there is a cached reference.
01538   if (this->collocation_resolver_ != 0)
01539     return *this->collocation_resolver_;
01540 
01541   // If not, lookup it up.
01542   this->collocation_resolver_ =
01543     ACE_Dynamic_Service<TAO_Collocation_Resolver>::instance
01544       (this->configuration (),
01545        ACE_TEXT_CHAR_TO_TCHAR (this->orb_params ()->collocation_resolver_name ()));
01546 
01547   return *this->collocation_resolver_;
01548 }

TAO::Collocation_Strategy TAO_ORB_Core::collocation_strategy CORBA::Object_ptr  object  )  [static]
 

This method returns the right collocation strategy, if any, to be used to perform a method invocation on the given object.

Note:
No-Collocation is a special case of collocation.

Definition at line 3393 of file ORB_Core.cpp.

References CORBA::Object::_servant(), CORBA::Object::_stubobj(), ACE_ASSERT, collocation_resolver(), DIRECT, TAO_Pseudo_Var_T< T >::in(), TAO_Collocation_Resolver::is_collocated(), CORBA::is_nil(), CORBA::Object_ptr, TAO_Stub::servant_orb_var(), and THRU_POA.

Referenced by TAO::Invocation_Adapter::invoke_i().

03394 {
03395   TAO_Stub *stub = object->_stubobj ();
03396   if (!CORBA::is_nil (stub->servant_orb_var ().in ()) &&
03397       stub->servant_orb_var ()->orb_core () != 0)
03398     {
03399       TAO_ORB_Core *orb_core =
03400         stub->servant_orb_var ()->orb_core ();
03401 
03402       const int collocated =
03403         orb_core->collocation_resolver ().is_collocated (object);
03404 
03405       if (collocated)
03406         {
03407           switch (stub->servant_orb_var ()->orb_core ()->get_collocation_strategy ())
03408             {
03409             case THRU_POA:
03410               return TAO::TAO_CS_THRU_POA_STRATEGY;
03411 
03412             case DIRECT:
03413               {
03414                 /////////////////////////////////////////////////////////////
03415                 // If the servant is null and you are collocated this means
03416                 // that the POA policy NON-RETAIN is set, and with that policy
03417                 // using the DIRECT collocation strategy is just insane.
03418                 /////////////////////////////////////////////////////////////
03419                 ACE_ASSERT (object->_servant () != 0);
03420                 return TAO::TAO_CS_DIRECT_STRATEGY;
03421               }
03422             }
03423         }
03424     }
03425 
03426   // In this case the Object is a client.
03427   return TAO::TAO_CS_REMOTE_STRATEGY;
03428 }

TAO_BEGIN_VERSIONED_NAMESPACE_DECL ACE_INLINE ACE_Service_Gestalt * TAO_ORB_Core::configuration  )  const
 

Configuration accessor method.

Definition at line 11 of file ORB_Core.inl.

Referenced by client_factory(), clientrequestinterceptor_adapter_i(), collocation_resolver(), endpoint_selector_factory(), init(), TAO::LocateRequest_Invocation_Adapter::invoke(), TAO::Invocation_Adapter::invoke_i(), ior_interceptor_adapter(), load_policy_validators(), TAO_Parser_Registry::open(), orbinitializer_registry_i(), TAO_DLL_Parser::parse_string(), policy_factory_registry_i(), resolve_codecfactory_i(), resolve_compression_manager_i(), resolve_dynanyfactory_i(), resolve_ior_table_i(), resolve_iormanipulation_i(), resolve_picurrent_i(), resolve_poa_current_i(), resolve_typecodefactory_i(), resource_factory(), root_poa(), server_factory(), serverrequestinterceptor_adapter_i(), stub_factory(), and thread_lane_resources_manager().

00012 {
00013   return this->config_;
00014 }

void TAO_ORB_Core::connection_timeout TAO_Stub stub,
bool &  has_timeout,
ACE_Time_Value time_value
 

Invoke the timeout hook if present.

The timeout hook is used to determine if the timeout policy is set and with what value. If the ORB is compiled without support for Messaging this feature does not take effect

Parameters:
has_timeout returns 0 if there is no timeout policy set.
time_value returns the timeout value in effect for the object, thread and current ORB.

Definition at line 2931 of file ORB_Core.cpp.

References TAO_ORB_Core_Static_Resources::alt_connection_timeout_hook_, connection_timeout_hook(), TAO_ORB_Core_Static_Resources::connection_timeout_hook_, TAO_ORB_Core_Static_Resources::instance(), and Timeout_Hook.

Referenced by TAO::Profile_Transport_Resolver::get_connection_timeout().

02934 {
02935   Timeout_Hook connection_timeout_hook =
02936     TAO_ORB_Core_Static_Resources::instance ()->connection_timeout_hook_;
02937 
02938   if (connection_timeout_hook == 0)
02939     {
02940       has_timeout = false;
02941       return;
02942     }
02943 
02944   (*connection_timeout_hook) (this, stub, has_timeout, time_value);
02945 
02946   Timeout_Hook alt_connection_timeout_hook =
02947     TAO_ORB_Core_Static_Resources::instance ()->alt_connection_timeout_hook_;
02948 
02949   if (alt_connection_timeout_hook == 0)
02950     return;
02951 
02952   if (!has_timeout || time_value == ACE_Time_Value::zero )
02953     {
02954       (*alt_connection_timeout_hook) (this, stub, has_timeout,time_value);
02955       return;
02956     }
02957 
02958   // At this point, both the primary and alternate hooks are defined, and
02959   // the primary did indeed set a value
02960   ACE_Time_Value tv1;
02961   bool ht1;
02962   (*alt_connection_timeout_hook) (this, stub, ht1,tv1);
02963   if (ht1 && tv1 > ACE_Time_Value::zero && tv1 < time_value)
02964     time_value = tv1;
02965 }

void TAO_ORB_Core::connection_timeout_hook Timeout_Hook  hook  )  [static]
 

Define the Timeout_Hook signature.

The connection timeout hook was originally defined to allow the TAO Messaging code to be factored out of the core TAO library and placed in to an optional library. Since then, a new invocation endpoint selector, the optimised connection endpoint selector (see Strategies/OC_Endpoint_Selector.h) reused this connection timeout hook. However, this set up a problem when both the Messaging library and OCES are being used in the same application.

The solution was to add a new connection timeout hook attribute (see alt_connection_timeout_hook_ below). This method now checks to see if the connection timeout hook is already set, and if so assigns the supplied hook value to the alternate connection timeout hook. This functionality has a side-effect of assuming that hooks are NEVER unloaded or actively replaced. IOW, no one will call this method with a 0 or some other pointer value to replace an existing hook.

If such functionality as unloading a hook pointer is required, then this method must be extended to give some kind of identity for the hook. Additional changes to the definition of the hook will also be necessary to support such identity and manipulation.

Definition at line 2968 of file ORB_Core.cpp.

References ACE_DEBUG, ACE_TEXT, LM_DEBUG, TAO_debug_level, Timeout_Hook, and TOCSRi.

Referenced by connection_timeout().

02969 {
02970   // Saving the hook pointer so that we can use it later when needed.
02971   // For now there are only two entry points that may supply a connection
02972   // timeout hook. But there might be future entry points, so this should
02973   // probably be addressed by a more sophisticated mechanism.
02974 
02975 #define TOCSRi TAO_ORB_Core_Static_Resources::instance ()
02976 
02977   // A consern was raised that since this function is called by two
02978   // different initializers there may be a race condition that might
02979   // require a lock. We are not using a lock at this time because of
02980   // two callers, one happens only during service directive processing
02981   // and the other only during ORB Initialization time. The former
02982   // happens when the OC_Endpoint_Selector_Factory is loaded, the
02983   // latter is part of the messaging library. The messaging library
02984   // calls this function as part of pre_init processing, and this call
02985   // happes for every ORB instance. This was the case before these The
02986   // latter call occurs when the messaging library is loaded. The
02987   // redundant calls occured then as well. Second, it isn't clear how
02988   // a lock in this static method would react in the face of windows
02989   // dlls, shared memory segments, etc. Therefore we are continuing to
02990   // keep this code lockless as it always was, assuming no
02991   // simultanious overwrite will occur.
02992 
02993   if (TOCSRi->connection_timeout_hook_ == 0)
02994     {
02995       if (TAO_debug_level > 2)
02996         {
02997           ACE_DEBUG ((LM_DEBUG,
02998                       ACE_TEXT("TAO (%P|%t) setting primary hook\n")));
02999         }
03000       TOCSRi->connection_timeout_hook_ = hook;
03001     }
03002   else if (TOCSRi->connection_timeout_hook_ != hook &&
03003            TOCSRi->alt_connection_timeout_hook_ == 0)
03004     {
03005       if (TAO_debug_level > 2)
03006         {
03007           ACE_DEBUG ((LM_DEBUG,
03008                       ACE_TEXT("TAO (%P|%t) setting alternate hook\n")));
03009         }
03010       TOCSRi->alt_connection_timeout_hook_ = hook;
03011     }
03012   else
03013     if (TAO_debug_level > 2)
03014       {
03015         ACE_DEBUG ((LM_DEBUG,
03016                     ACE_TEXT ("TAO (%P|%t) not overwriting alternate hook.")
03017                     ACE_TEXT (" Is it still null? %d\n"),
03018                     TOCSRi->alt_connection_timeout_hook_ == 0));
03019       }
03020 
03021 #undef TOCSRi
03022 }

TAO_Connector_Registry * TAO_ORB_Core::connector_registry void   ) 
 

Get the connector registry.

Definition at line 2806 of file ORB_Core.cpp.

References TAO_Thread_Lane_Resources::connector_registry(), and lane_resources().

Referenced by operator>>(), TAO_CORBALOC_Parser::parse_string(), resolve_rir(), CORBA::Object::tao_object_initialize(), TAO::Profile_Transport_Resolver::try_connect_i(), and CORBA::ORB::url_ior_string_to_object().

02807 {
02808   TAO_Connector_Registry *conn =
02809     this->lane_resources ().connector_registry ();
02810 
02811   return conn;
02812 }

ACE_Data_Block * TAO_ORB_Core::create_data_block_i size_t  size,
ACE_Allocator buffer_allocator,
ACE_Allocator dblock_allocator,
ACE_Lock lock
[protected]
 

Routine that creates a ACE_Data_Block given the lock and allocators.

Definition at line 2782 of file ORB_Core.cpp.

References ACE_Data_Block, ACE_NEW_MALLOC_RETURN, and ACE_Allocator::malloc().

Referenced by create_input_cdr_data_block().

02786 {
02787   ACE_Data_Block *nb = 0;
02788 
02789   ACE_NEW_MALLOC_RETURN (
02790                          nb,
02791                          static_cast<ACE_Data_Block*> (
02792                            dblock_allocator->malloc (sizeof (ACE_Data_Block))),
02793                          ACE_Data_Block (size,
02794                                          ACE_Message_Block::MB_DATA,
02795                                          0,
02796                                          buffer_allocator,
02797                                          lock_strategy,
02798                                          0,
02799                                          dblock_allocator),
02800                          0);
02801 
02802   return nb;
02803 }

ACE_Data_Block * TAO_ORB_Core::create_input_cdr_data_block size_t  size  ) 
 

The Message Blocks used for input CDRs must have appropiate locking strategies.

Definition at line 2758 of file ORB_Core.cpp.

References create_data_block_i(), data_block_lock_, input_cdr_buffer_allocator(), input_cdr_dblock_allocator(), resource_factory(), and TAO_Resource_Factory::use_locked_data_blocks().

Referenced by TAO_GIOP_Message_Base::make_queued_data().

02759 {
02760 
02761   ACE_Allocator *dblock_allocator = 0;
02762   ACE_Allocator *buffer_allocator = 0;
02763 
02764   dblock_allocator =
02765     this->input_cdr_dblock_allocator ();
02766   buffer_allocator =
02767     this->input_cdr_buffer_allocator ();
02768 
02769   ACE_Lock* lock_strategy = 0;
02770   if (this->resource_factory ()->use_locked_data_blocks ())
02771     {
02772       lock_strategy = &this->data_block_lock_;
02773     }
02774 
02775   return this->create_data_block_i (size,
02776                                     buffer_allocator,
02777                                     dblock_allocator,
02778                                     lock_strategy);
02779 }

CORBA::Object_ptr TAO_ORB_Core::create_object TAO_Stub the_stub  ) 
 

Create a new object, use the adapter registry to create a collocated object, if not possible then create a regular object.

Definition at line 1898 of file ORB_Core.cpp.

References ACE_GUARD_RETURN, ACE_NEW_RETURN, adapter_registry(), TAO_Stub::base_profiles(), TAO::ORB_Table::begin(), TAO_Adapter_Registry::create_collocated_object(), TAO::ORB_Table::end(), TAO_ORB_Core_Auto_Ptr::get(), TAO::ORB_Table::instance(), is_collocation_enabled(), CORBA::Object_ptr, and TAO_SYNCH_MUTEX.

Referenced by TAO_CORBALOC_Parser::make_stub_from_mprofile(), operator>>(), and CORBA::ORB::url_ior_string_to_object().

01899 {
01900   // @@ What about forwarding.  With this approach we are never forwarded
01901   //    when we use collocation!
01902   const TAO_MProfile &mprofile = stub->base_profiles ();
01903 
01904   // @@ We should thow CORBA::NO_MEMORY in platforms with exceptions,
01905   // but we are stuck in platforms without exceptions!
01906   TAO_ORB_Core_Auto_Ptr collocated_orb_core;
01907   CORBA::Object_ptr x = 0;
01908 
01909   {
01910     // Lock the ORB_Table against concurrent modification while we
01911     // iterate through the ORBs.
01912     ACE_GUARD_RETURN (TAO_SYNCH_MUTEX,
01913                       guard,
01914                       TAO::ORB_Table::instance()->lock (),
01915                       CORBA::Object::_nil ());
01916 
01917     TAO::ORB_Table * const table = TAO::ORB_Table::instance ();
01918     TAO::ORB_Table::iterator const end = table->end ();
01919     for (TAO::ORB_Table::iterator i = table->begin (); i != end; ++i)
01920       {
01921         ::TAO_ORB_Core * const other_core = (*i).second.core ();
01922 
01923         if (this->is_collocation_enabled (other_core, mprofile))
01924           {
01925             other_core->_incr_refcnt();
01926              TAO_ORB_Core_Auto_Ptr tmp_auto_ptr (other_core);
01927              collocated_orb_core = tmp_auto_ptr;
01928             break;
01929           }
01930       }
01931   }
01932 
01933   if (collocated_orb_core.get ())
01934     {
01935       TAO_Adapter_Registry *ar =
01936         collocated_orb_core.get ()->adapter_registry ();
01937 
01938       x = ar->create_collocated_object (stub, mprofile);
01939     }
01940 
01941 
01942   if (!x)
01943     {
01944       // The constructor sets the proxy broker as the
01945       // Remote one.
01946       ACE_NEW_RETURN (x,
01947                       CORBA::Object (stub, 0),
01948                       0);
01949     }
01950 
01951   return x;
01952 }

TAO_Stub * TAO_ORB_Core::create_stub const char *  repository_id,
const TAO_MProfile profiles
 

Factory method that create the "right" Stub depending on wheather RTCORBA is loaded or not. The factory used to create the stub, is loaded at ORB initialization, and its type depends on the fact that RTCORBA is being used or not.

Definition at line 1831 of file ORB_Core.cpp.

References TAO_Stub_Factory::create_stub(), and stub_factory().

Referenced by create_stub_object(), TAO_CORBALOC_Parser::make_stub_from_mprofile(), operator>>(), CORBA::Object::tao_object_initialize(), and CORBA::ORB::url_ior_string_to_object().

01833 {
01834   TAO_Stub *retval =
01835     this->stub_factory ()->create_stub (repository_id, profiles, this);
01836   return retval;
01837 }

TAO_Stub * TAO_ORB_Core::create_stub_object TAO_MProfile mprofile,
const char *  type_id,
CORBA::PolicyList policy_list
 

Makes sure that the ORB is open and then creates a TAO_Stub based on the endpoint.

Definition at line 1849 of file ORB_Core.cpp.

References TAO_Stub::base_profiles(), create_stub(), TAO_MProfile::get_profile(), TAO_Profile::policies(), TAO_MProfile::policy_list(), CORBA::PolicyList, and TAO_MProfile::profile_count().

01852 {
01853   // Add the Polices contained in "policy_list" to each profile so
01854   // that those policies will be exposed to the client in the IOR.  In
01855   // particular each CORBA::Policy has to be converted in to
01856   // Messaging::PolicyValue, and then all the Messaging::PolicyValue
01857   // should be embedded inside a Messaging::PolicyValueSeq which
01858   // became in turns the "body" of the IOP::TaggedComponent. This
01859   // conversion is a responsability of the CORBA::Profile class.  (See
01860   // orbos\98-05-05.pdf Section 5.4)
01861   if (policy_list->length () != 0)
01862     {
01863       TAO_Profile * profile = 0;
01864 
01865       CORBA::ULong const count = mprofile.profile_count ();
01866       for (CORBA::ULong i = 0; i < count; ++i)
01867         {
01868           // Get the ith profile
01869           profile = mprofile.get_profile (i);
01870           profile->policies (policy_list);
01871         }
01872     }
01873 
01874   /// Initialize a TAO_Stub object with the mprofile thats passed.
01875   TAO_Stub *stub = this->create_stub (type_id, mprofile);
01876 
01877   stub->base_profiles ().policy_list (policy_list);
01878 
01879   return stub;
01880 }

void TAO_ORB_Core::default_environment CORBA::Environment  ) 
 

The thread has a default environment to simplify porting between platforms that support native C++ exceptions and those that don't. This is a TSS resource (always), but with a twist: if the user creates a new environment the old one is "pushed" (actually the new one remembers it), eventually the new environment destructor pops itself from the stack and we recover the old environment.

This means that if the user create a new environment and somebody calls a function using the default one the exception will still be received in the environment created by the user. The only drawback is that environments life time must nest properly, this shouldn't be a problem because environments are usually created on the stack, but, the spec allows their creation on the heap and/or as class members; we need to investigate the tradeoffs and take a decision.

Definition at line 3103 of file ORB_Core.cpp.

References TAO_TSS_Resources::default_environment_, and TAO_TSS_Resources::instance().

03104 {
03105   TAO_TSS_Resources::instance ()->default_environment_ = env;
03106 }

CORBA::Environment * TAO_ORB_Core::default_environment void   )  const
 

The thread has a default environment to simplify porting between platforms that support native C++ exceptions and those that don't. This is a TSS resource (always), but with a twist: if the user creates a new environment the old one is "pushed" (actually the new one remembers it), eventually the new environment destructor pops itself from the stack and we recover the old environment.

This means that if the user create a new environment and somebody calls a function using the default one the exception will still be received in the environment created by the user. The only drawback is that environments life time must nest properly, this shouldn't be a problem because environments are usually created on the stack, but, the spec allows their creation on the heap and/or as class members; we need to investigate the tradeoffs and take a decision.

Definition at line 3097 of file ORB_Core.cpp.

References TAO_TSS_Resources::default_environment_, and TAO_TSS_Resources::instance().

Referenced by CORBA::Environment::default_environment(), CORBA::Environment::Environment(), and CORBA::Environment::~Environment().

03098 {
03099   return TAO_TSS_Resources::instance ()->default_environment_;
03100 }

TAO::Transport_Queueing_Strategy* TAO_ORB_Core::default_transport_queueing_strategy void   ) 
 

This strategy is the default, no explicit queueing and no explicit flush

void TAO_ORB_Core::destroy void   ) 
 

Shutdown the ORB and free resources.

Definition at line 2247 of file ORB_Core.cpp.

References destroy_interceptors(), TAO::ORB_Table::instance(), and shutdown().

Referenced by CORBA::ORB::destroy().

02248 {
02249   //
02250   // All destroy() should do is (a) call shutdown() and (b) unbind()
02251   // from the ORB table.  Nothing else should really be added to this
02252   // method.  Everything else should go to the shutdown() method.
02253   // Remember when the ORB Core is finally removed from the ORB table,
02254   // the reference count goes to zero and fini() is called.  fini()
02255   // calls shutdown() and does not call destroy() since destroy() will
02256   // try to unbind from the ORB table again.  Additional code should
02257   // not be added to destroy() since there is no guarantee that
02258   // orb->destroy() will ever be called by the user.  Since TAO
02259   // guarantees that shutdown() will be called, all cleanup code
02260   // should go there.
02261   //
02262 
02263   // Shutdown the ORB and block until the shutdown is complete.
02264   this->shutdown (1);
02265 
02266   // Invoke Interceptor::destroy() on all registered interceptors.
02267   this->destroy_interceptors ();
02268 
02269   // Now remove it from the ORB table so that it's ORBid may be
02270   // reused.
02271   TAO::ORB_Table::instance ()->unbind (this->orbid_);
02272 }

void TAO_ORB_Core::destroy_interceptors void   )  [protected]
 

Helper method that invokes Interceptor::destroy() on all registered interceptors when ORB::destroy() is called. Prevents exceptions from propagating up the call chain.

Definition at line 2288 of file ORB_Core.cpp.

References ACE_DEBUG, ACE_GUARD, ACE_TEXT, client_request_interceptor_adapter_, TAO_IORInterceptor_Adapter::destroy_interceptors(), TAO::ServerRequestInterceptor_Adapter::destroy_interceptors(), TAO::ClientRequestInterceptor_Adapter::destroy_interceptors(), ior_interceptor_adapter_, LM_DEBUG, server_request_interceptor_adapter_, TAO_debug_level, and TAO_SYNCH_MUTEX.

Referenced by destroy().

02289 {
02290   try
02291     {
02292       ACE_GUARD (TAO_SYNCH_MUTEX, monitor, this->lock_);
02293 
02294 #if TAO_HAS_INTERCEPTORS == 1
02295       if (this->client_request_interceptor_adapter_ != 0)
02296         {
02297           this->client_request_interceptor_adapter_->destroy_interceptors ();
02298 
02299           delete this->client_request_interceptor_adapter_;
02300           this->client_request_interceptor_adapter_ = 0;
02301         }
02302 
02303       if (this->server_request_interceptor_adapter_ != 0)
02304         {
02305           this->server_request_interceptor_adapter_->destroy_interceptors ();
02306 
02307           delete this->server_request_interceptor_adapter_;
02308           this->server_request_interceptor_adapter_ = 0;
02309         }
02310 
02311 #endif  /* TAO_HAS_INTERCEPTORS == 1 */
02312 
02313       if (this->ior_interceptor_adapter_ != 0)
02314         {
02315           this->ior_interceptor_adapter_->destroy_interceptors ();
02316 
02317           this->ior_interceptor_adapter_ = 0;
02318         }
02319 
02320     }
02321   catch (...)
02322     {
02323       // .. catch all the exceptions..
02324       if (TAO_debug_level > 3)
02325         {
02326           ACE_DEBUG ((LM_DEBUG,
02327                       ACE_TEXT ("TAO (%P|%t) - Exception in TAO_ORB_Core")
02328                       ACE_TEXT ("::destroy_interceptors () \n")));
02329         }
02330     }
02331 
02332   return;
02333 }

const char * TAO_ORB_Core::dynamic_adapter_name void   )  [static]
 

Gets the value of TAO_ORB_Core::dynamic_adapter_name_.

Definition at line 1431 of file ORB_Core.cpp.

References TAO_ORB_Core_Static_Resources::dynamic_adapter_name_, and TAO_ORB_Core_Static_Resources::instance().

01432 {
01433   return TAO_ORB_Core_Static_Resources::instance ()->dynamic_adapter_name_.c_str();
01434 }

void TAO_ORB_Core::dynamic_adapter_name const char *  name  )  [static]
 

Sets the value of TAO_ORB_Core::dynamic_adapter_name_.

Definition at line 1425 of file ORB_Core.cpp.

References TAO_ORB_Core_Static_Resources::dynamic_adapter_name_, and TAO_ORB_Core_Static_Resources::instance().

TAO_Endpoint_Selector_Factory * TAO_ORB_Core::endpoint_selector_factory void   ) 
 

Returns a pointer to the endpoint selector factory.

Definition at line 1635 of file ORB_Core.cpp.

References ACE_TEXT_CHAR_TO_TCHAR, configuration(), endpoint_selector_factory_, TAO_ORB_Parameters::endpoint_selector_factory_name(), and orb_params().

Referenced by TAO::Profile_Transport_Resolver::resolve().

01636 {
01637   // Check if there is a cached reference.
01638   if (this->endpoint_selector_factory_ != 0)
01639     return this->endpoint_selector_factory_;
01640 
01641   // If not, look in the service repository for an instance.
01642   const char* endpoint_selector_factory_name =
01643     this->orb_params ()->endpoint_selector_factory_name ();
01644 
01645   this->endpoint_selector_factory_ =
01646     ACE_Dynamic_Service<TAO_Endpoint_Selector_Factory>::instance
01647       (this->configuration (),
01648        ACE_TEXT_CHAR_TO_TCHAR (endpoint_selector_factory_name));
01649 
01650   return this->endpoint_selector_factory_;
01651 }

ACE_INLINE TAO_Fault_Tolerance_Service & TAO_ORB_Core::fault_tolerance_service void   ) 
 

Return a reference to the Fault Tolerant service object.

Definition at line 142 of file ORB_Core.inl.

References ft_service_.

00143 {
00144   return this->ft_service_;
00145 }

int TAO_ORB_Core::fini void   )  [protected]
 

Final termination hook, typically called by CORBA::ORB's destructor.

Definition at line 1340 of file ORB_Core.cpp.

References ACE_CString, ACE_DEBUG, ACE_TEXT, ACE_TEXT_CHAR_TO_TCHAR, codec_factory_, TAO::ObjectKey_Table::destroy(), dynany_factory_, TAO_Thread_Lane_Resources_Manager::finalize(), implrepo_service_, ior_manip_factory_, ior_table_, LM_DEBUG, object_key_table_, orbid_, shutdown(), TAO_debug_level, thr_mgr(), thread_lane_resources_manager_, typecode_factory_, and ACE_Thread_Manager::wait().

Referenced by _decr_refcnt().

01341 {
01342   try
01343     {
01344       // Shutdown the ORB and block until the shutdown is complete.
01345       this->shutdown (1);
01346     }
01347   catch (const ::CORBA::Exception& ex)
01348     {
01349       ACE_CString message =
01350         "Exception caught in trying to shutdown ";
01351       message += this->orbid_;
01352       message += "\n";
01353 
01354       ex._tao_print_exception (message.c_str ());
01355     }
01356 
01357   // Wait for any server threads, ignoring any failures.
01358   (void) this->thr_mgr ()->wait ();
01359 
01360   ::CORBA::release (this->implrepo_service_);
01361 
01362   ::CORBA::release (this->typecode_factory_);
01363 
01364   ::CORBA::release (this->codec_factory_);
01365 
01366   ::CORBA::release (this->dynany_factory_);
01367 
01368   ::CORBA::release (this->ior_manip_factory_);
01369 
01370   ::CORBA::release (this->ior_table_);
01371 
01372   if (TAO_debug_level > 2)
01373     {
01374       ACE_DEBUG ((LM_DEBUG,
01375                   ACE_TEXT ("Destroying ORB <%s>\n"),
01376                   ACE_TEXT_CHAR_TO_TCHAR (this->orbid_)));
01377     }
01378 
01379   // Finalize lane resources.
01380   //
01381   // @@ Do not call this->thread_lane_resources_manager().finalize().
01382   // this->thread_lane_manager_resources() can seg fault if the
01383   // factory method it invokes returns a zero pointer, which can
01384   // easily occur if the ORB is partially initialized due to a Service
01385   // Configurator initialization failure.  Instead check if the
01386   // cached pointer is non-zero and then finalize.
01387   //
01388   // @todo Fix potential seg fault in
01389   //       TAO_ORB_Core::thread_lane_resources_manager().
01390   if (this->thread_lane_resources_manager_ != 0)
01391     this->thread_lane_resources_manager_->finalize ();
01392 
01393   // Destroy the object_key table
01394   this->object_key_table_.destroy ();
01395 
01396   delete this;
01397 
01398   return 0;
01399 }

ACE_INLINE TAO_Flushing_Strategy * TAO_ORB_Core::flushing_strategy void   ) 
 

Return the flushing strategy.

The flushing strategy is created by the resource factory, and it is used by the ORB to control the mechanism used to flush the outgoing data queues. The flushing strategies are stateless, therefore, there is only one per ORB.

Definition at line 67 of file ORB_Core.inl.

References flushing_strategy_.

Referenced by TAO_Transport::drain_queue(), TAO_Transport::handle_timeout(), TAO_Transport::send_asynchronous_message_i(), TAO_Transport::send_reply_message_i(), and TAO_Transport::send_synchronous_message_i().

00068 {
00069   return this->flushing_strategy_;
00070 }

auto_ptr< TAO_GIOP_Fragmentation_Strategy > TAO_ORB_Core::fragmentation_strategy TAO_Transport transport  ) 
 

Get outgoing fragmentation strategy.

Definition at line 2815 of file ORB_Core.cpp.

References TAO_Resource_Factory::create_fragmentation_strategy(), and resource_factory().

02816 {
02817   return
02818     this->resource_factory ()->create_fragmentation_strategy (
02819       transport,
02820       this->orb_params_.max_message_size ());
02821 }

CORBA::Policy_ptr TAO_ORB_Core::get_cached_policy TAO_Cached_Policy_Type  type  ) 
 

Get a cached policy. First, check the ORB-level Policy Manager, then check the ORB defaults.

Definition at line 3061 of file ORB_Core.cpp.

References TAO_Objref_Var_T< T >::_retn(), TAO_Policy_Set::get_cached_policy(), TAO_Policy_Manager::get_cached_policy(), get_default_policies(), TAO_Objref_Var_T< T >::in(), CORBA::is_nil(), policy_manager(), and CORBA::Policy_var.

Referenced by get_cached_policy_including_current().

03062 {
03063   CORBA::Policy_var result;
03064 
03065   TAO_Policy_Manager *policy_manager = this->policy_manager ();
03066   if (policy_manager != 0)
03067     {
03068       result = policy_manager->get_cached_policy (type);
03069     }
03070 
03071   if (CORBA::is_nil (result.in ()))
03072     {
03073       result = this->get_default_policies ()->get_cached_policy (type);
03074     }
03075 
03076   return result._retn ();
03077 }

CORBA::Policy_ptr TAO_ORB_Core::get_cached_policy_including_current TAO_Cached_Policy_Type  type  ) 
 

Get a cached policy. First, check the thread current, then check the ORB-level Policy Manager, then check the ORB defaults.

Definition at line 3080 of file ORB_Core.cpp.

References TAO_Objref_Var_T< T >::_retn(), get_cached_policy(), TAO_Policy_Current::get_cached_policy(), TAO_Objref_Var_T< T >::in(), CORBA::is_nil(), policy_current(), and CORBA::Policy_var.

03081 {
03082   TAO_Policy_Current &policy_current = this->policy_current ();
03083 
03084   CORBA::Policy_var result = policy_current.get_cached_policy (type);
03085 
03086   if (CORBA::is_nil (result.in ()))
03087     {
03088       result = this->get_cached_policy (type);
03089     }
03090 
03091   return result._retn ();
03092 }

ACE_INLINE CORBA::ULong TAO_ORB_Core::get_collocation_strategy void   )  const
 

Definition at line 216 of file ORB_Core.inl.

References collocation_strategy_.

00217 {
00218   return this->collocation_strategy_;
00219 }

ACE_INLINE TAO_Policy_Set * TAO_ORB_Core::get_default_policies void   ) 
 

Accessor method for the default_policies_.

Definition at line 520 of file ORB_Core.inl.

References default_policies_.

Referenced by get_cached_policy(), and get_policy().

00521 {
00522   return this->default_policies_;
00523 }

ACE_INLINE TAO_Network_Priority_Protocols_Hooks * TAO_ORB_Core::get_network_priority_protocols_hooks void   ) 
 

Gets the value of TAO_ORB_Core::network_priority_protocols_hooks__.

Definition at line 79 of file ORB_Core.inl.

References network_priority_protocols_hooks_.

00080 {
00081   return this->network_priority_protocols_hooks_;
00082 }

CORBA::Policy_ptr TAO_ORB_Core::get_policy CORBA::PolicyType  type  ) 
 

Get a policy. First, check the ORB-level Policy Manager, then check the ORB defaults.

Definition at line 3027 of file ORB_Core.cpp.

References TAO_Objref_Var_T< T >::_retn(), get_default_policies(), TAO_Policy_Set::get_policy(), TAO_Policy_Manager::get_policy(), TAO_Objref_Var_T< T >::in(), CORBA::is_nil(), policy_manager(), CORBA::Policy_var, and CORBA::PolicyType.

Referenced by get_policy_including_current().

03028 {
03029   CORBA::Policy_var result;
03030 
03031   TAO_Policy_Manager *policy_manager = this->policy_manager ();
03032   if (policy_manager != 0)
03033     {
03034       result = policy_manager->get_policy (type);
03035     }
03036 
03037   if (CORBA::is_nil (result.in ()))
03038     {
03039       result = this->get_default_policies ()->get_policy (type);
03040     }
03041 
03042   return result._retn ();
03043 }

CORBA::Policy_ptr TAO_ORB_Core::get_policy_including_current CORBA::PolicyType  type  ) 
 

Get a policy. First, check the thread current, then check the ORB-level Policy Manager, then check the ORB defaults.

Definition at line 3046 of file ORB_Core.cpp.

References TAO_Objref_Var_T< T >::_retn(), get_policy(), TAO_Policy_Current::get_policy(), TAO_Objref_Var_T< T >::in(), CORBA::is_nil(), policy_current(), CORBA::Policy_var, and CORBA::PolicyType.

03047 {
03048   TAO_Policy_Current &policy_current = this->policy_current ();
03049 
03050   CORBA::Policy_var result = policy_current.get_policy (type);
03051 
03052   if (CORBA::is_nil (result.in ()))
03053     {
03054       result = this->get_policy (type);
03055     }
03056 
03057   return result._retn ();
03058 }

ACE_INLINE TAO_Protocols_Hooks * TAO_ORB_Core::get_protocols_hooks void   ) 
 

Gets the value of TAO_ORB_Core::protocols_hooks__.

Definition at line 73 of file ORB_Core.inl.

References protocols_hooks_.

Referenced by TAO_IIOP_Connection_Handler::open(), TAO::Remote_Invocation::send_message(), and TAO_IIOP_Connection_Handler::set_dscp_codepoint().

00074 {
00075   return this->protocols_hooks_;
00076 }

TAO::Transport_Queueing_Strategy * TAO_ORB_Core::get_transport_queueing_strategy TAO_Stub stub,
Messaging::SyncScope scope
 

Definition at line 2878 of file ORB_Core.cpp.

References delayed_transport_queueing_strategy_, eager_transport_queueing_strategy_, flush_transport_queueing_strategy_, and Messaging::SyncScope.

02880 {
02881   switch (scope)
02882   {
02883     case Messaging::SYNC_WITH_TRANSPORT:
02884     case Messaging::SYNC_WITH_SERVER:
02885     case Messaging::SYNC_WITH_TARGET:
02886     {
02887       return this->flush_transport_queueing_strategy_;
02888     }
02889     break;
02890     case Messaging::SYNC_NONE:
02891     {
02892       return this->eager_transport_queueing_strategy_;
02893     }
02894     break;
02895     case TAO::SYNC_DELAYED_BUFFERING:
02896     {
02897       return this->delayed_transport_queueing_strategy_;
02898     }
02899     break;
02900     default:
02901     {
02902       return 0;
02903     }
02904   }
02905 }

ACE_INLINE void * TAO_ORB_Core::get_tss_resource size_t  slot_id  ) 
 

Obtain the TSS resource in the given slot.

Definition at line 263 of file ORB_Core.inl.

References get_tss_resources(), ACE_Array_Base< void * >::size(), and TAO_ORB_Core_TSS_Resources::ts_objects_.

00264 {
00265   TAO_ORB_Core_TSS_Resources *tss_resources =
00266     this->get_tss_resources ();
00267 
00268   if (slot_id >= tss_resources->ts_objects_.size ())
00269     return 0;
00270 
00271   return tss_resources->ts_objects_[slot_id];
00272 }

ACE_INLINE TAO_ORB_Core_TSS_Resources * TAO_ORB_Core::get_tss_resources void   ) 
 

Obtain the TSS resources of this orb.

Definition at line 257 of file ORB_Core.inl.

References ACE_TSS_GET.

Referenced by TAO::Wait_On_LF_No_Upcall::can_process_upcalls(), get_tss_resource(), TAO_Leader_Follower::get_tss_resources(), TAO::Nested_Upcall_Guard::Nested_Upcall_Guard(), set_tss_resource(), and TAO::Nested_Upcall_Guard::~Nested_Upcall_Guard().

00258 {
00259   return ACE_TSS_GET (&this->tss_resources_,TAO_ORB_Core_TSS_Resources);
00260 }

TAO::GUIResource_Factory * TAO_ORB_Core::gui_resource_factory void   ) 
 

Returns pointer to the factory for creating gui resources.

Definition at line 1506 of file ORB_Core.cpp.

References TAO_TSS_Resources::gui_resource_factory_, and TAO_TSS_Resources::instance().

Referenced by TAO_Leader_Follower::reactor(), and TAO_Leader_Follower::~TAO_Leader_Follower().

01507 {
01508   return TAO_TSS_Resources::instance ()->gui_resource_factory_;
01509 }

ACE_INLINE bool TAO_ORB_Core::has_shutdown void   )  const
 

Get the shutdown flag value.

Definition at line 322 of file ORB_Core.inl.

References has_shutdown_.

Referenced by check_shutdown(), TAO_Connection_Handler::close_connection_eh(), TAO_Leader_Follower::reset_client_thread(), run(), TAO_Leader_Follower::set_client_thread(), shutdown(), and TAO_Connection_Handler::svc_i().

00323 {
00324   return this->has_shutdown_;
00325 }

ACE_INLINE CORBA::ULong TAO_ORB_Core::hash_service TAO_Profile this_p,
CORBA::ULong  max
 

For details on how this is used please see the FT service

Definition at line 131 of file ORB_Core.inl.

References ft_service_, TAO_Service_Callbacks::hash_ft(), and TAO_Fault_Tolerance_Service::service_callback().

Referenced by TAO_Profile::hash_service_i().

00132 {
00133   if (this->ft_service_.service_callback ())
00134     {
00135       return this->ft_service_.service_callback ()->hash_ft (p, m);
00136     }
00137 
00138   return 0;
00139 }

const char * TAO_ORB_Core::ifr_client_adapter_name void   )  [static]
 

Gets the value of TAO_ORB_Core::ifr_client_adapter_name_.

Definition at line 1443 of file ORB_Core.cpp.

References TAO_ORB_Core_Static_Resources::ifr_client_adapter_name_, and TAO_ORB_Core_Static_Resources::instance().

01444 {
01445   return TAO_ORB_Core_Static_Resources::instance ()->ifr_client_adapter_name_.c_str();
01446 }

void TAO_ORB_Core::ifr_client_adapter_name const char *  name  )  [static]
 

Sets the value of TAO_ORB_Core::ifr_client_adapter_name_.

Definition at line 1437 of file ORB_Core.cpp.

References TAO_ORB_Core_Static_Resources::ifr_client_adapter_name_, and TAO_ORB_Core_Static_Resources::instance().

ACE_INLINE void TAO_ORB_Core::implrepo_service const CORBA::Object_ptr  ir  ) 
 

Definition at line 341 of file ORB_Core.inl.

References implrepo_service_, and CORBA::Object_ptr.

00342 {
00343   this->implrepo_service_ = ir;
00344 }

CORBA::Object_ptr TAO_ORB_Core::implrepo_service void   ) 
 

Definition at line 2830 of file ORB_Core.cpp.

References CORBA::Object::_duplicate(), CORBA::Object::_nil(), TAO_Pseudo_Var_T< T >::_retn(), ACE_GUARD_RETURN, implrepo_service_, CORBA::is_nil(), CORBA::Object_var, orb_, CORBA::ORB::resolve_initial_references(), TAO_SYNCH_MUTEX, and use_implrepo_.

02831 {
02832   if (!this->use_implrepo_)
02833     return CORBA::Object::_nil ();
02834 
02835   if (CORBA::is_nil (this->implrepo_service_))
02836     {
02837 
02838       try
02839         {
02840           CORBA::Object_var temp =
02841             this->orb_->resolve_initial_references ("ImplRepoService");
02842 
02843           ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->lock_, CORBA::Object::_nil ());
02844 
02845           // @@ Worry about assigning a different IOR? (brunsch)
02846           this->implrepo_service_ = temp._retn ();
02847         }
02848       catch (const ::CORBA::Exception&)
02849         {
02850           // Just make sure that we have a null pointer.  Ignore the exception
02851           // anyway.
02852           this->implrepo_service_ = CORBA::Object::_nil ();
02853         }
02854     }
02855 
02856   return CORBA::Object::_duplicate (this->implrepo_service_);
02857 }

ACE_INLINE CORBA::Boolean TAO_ORB_Core::imr_endpoints_in_ior void   ) 
 

Do we put the ImR's endpoints into persistent object references we create.

Definition at line 353 of file ORB_Core.inl.

References imr_endpoints_in_ior_.

00354 {
00355   return imr_endpoints_in_ior_;
00356 }

int TAO_ORB_Core::init int &  argc,
char *  argv[]
[protected]
 

Initialize the guts of the ORB Core. It is intended that this be called by <CORBA::ORB_init>.

Definition at line 338 of file ORB_Core.cpp.

References CORBA::ORB::_tao_make_ORB(), CORBA::ORB::_use_omg_ior_format(), ACE_Arg_Shifter, ACE_CString, ACE_DEBUG, ACE_DEFAULT_CDR_MEMCPY_TRADEOFF, ACE_ERROR, ACE_GUARD_RETURN, ACE_LOG_MSG, ACE_NEW_THROW_EX, ACE_SignalHandler, ACE_TCHAR, ACE_TEXT, ACE_TEXT_ALWAYS_CHAR, ACE_TEXT_CHAR_TO_TCHAR, ACE_Time_Value, TAO_ORB_Parameters::add_endpoints(), TAO_ORB_Parameters::ami_collication(), ACE_OS::atoi(), TAO_ORB_Parameters::cache_incoming_by_dotted_decimal_address(), TAO_ORB_Parameters::cdr_memcpy_tradeoff(), codeset_manager(), codeset_manager_, collocation_strategy_, configuration(), TAO_ORB_Parameters::connect_ipv6_only(), TAO_Resource_Factory::create_flushing_strategy(), TAO_ORB_Parameters::default_init_ref(), DIRECT, TAO_ORB_Parameters::disable_rt_collocation_resolver(), TAO_ORB_Parameters::enforce_pref_interfaces(), flushing_strategy_, ACE_OS::fopen(), ACE_Argv_Type_Converter::get_argc(), TAO_Resource_Factory::get_protocol_factories(), ACE_Argv_Type_Converter::get_TCHAR_argv(), ACE_OS::getenv(), has_shutdown_, imr_endpoints_in_ior_, ACE_Shared_Object::init(), TAO::ObjectKey_Table::init(), TAO_Network_Priority_Protocols_Hooks::init_hooks(), TAO_Protocols_Hooks::init_hooks(), TAO_Resource_Factory::init_protocol_factories(), init_ref_map_, ACE_Array_Map< Key, Value, EqualTo >::insert(), TAO_ORB_Core_Static_Resources::instance(), ACE_Dynamic_Service< TYPE >::instance(), TAO_ORB_Parameters::linger(), LM_DEBUG, LM_ERROR, LM_WARNING, TAO_ORB_Parameters::max_message_size(), TAO_ORB_Parameters::mcast_discovery_endpoint(), TAO_ORB_Parameters::negotiate_codesets(), network_priority_protocols_hooks_, TAO_ORB_Parameters::nodelay(), object_key_table_, TAO_Codeset_Manager::open(), TAO_Server_Strategy_Factory::open(), TAO_Parser_Registry::open(), opt_for_collocation_, orb_, orb_params(), orb_params_, TAO_ORB_Parameters::parallel_connect_delay(), parser_registry_, TAO_ORB_Parameters::poa_factory_name(), TAO_ORB_Parameters::prefer_ipv6_interfaces(), TAO_ORB_Parameters::preferred_interfaces(), protocols_hooks_, TAO_ORB_Parameters::protocols_hooks_name(), reactor(), resource_factory(), server_factory(), server_id_, TAO_ORB_Parameters::service_port(), services_callbacks_init(), set_endpoint_helper(), TAO_ORB_Parameters::shared_profile(), SIG_IGN, ACE_OS::signal(), SIGPIPE, TAO_ORB_Parameters::single_read_optimization(), ACE_OS::snprintf(), TAO_ORB_Parameters::sock_dontroute(), TAO_ORB_Parameters::sock_keepalive(), TAO_ORB_Parameters::sock_rcvbuf_size(), TAO_ORB_Parameters::sock_sndbuf_size(), TAO_ORB_Parameters::std_profile_components(), ACE_OS::strcasecmp(), ACE_OS::strchr(), TAO_debug_level, TAO_DEFAULT_LANE, TAO_DEFAULT_THREAD_PER_CONNECTION_TIMEOUT, TAO_ORB_CORE_INIT_LOCATION_CODE, TAO_SYNCH_MUTEX, TAO_Server_Strategy_Factory::thread_per_connection_timeout(), THRU_POA, TAO_ORB_Parameters::use_dotted_decimal_addresses(), use_global_collocation_, use_implrepo_, TAO_ORB_Parameters::use_ipv6_link_local(), TAO_Resource_Factory::use_local_memory_pool(), TAO_ORB_Parameters::use_parallel_connects(), and ACE_Thread_Manager::wait_on_exit().

00339 {
00340   // Right now, this code expects to begin parsing in argv[1] rather
00341   // than argv[0].  I don't think that's wise.  I think we need to
00342   // change that convention to argv[0] and let the initializing code
00343   // make any necessary shifts.
00344   //
00345   // Parse arguments to the ORB.  Typically the ORB is passed
00346   // arguments straight from the command line, so we will simply pass
00347   // through them and respond to the ones we understand and ignore
00348   // those we don't.
00349   //
00350   // In some instances, we may actually build another vector of
00351   // arguments and stash it for use initializing other components such
00352   // as the RootPOA.
00353 
00354   bool use_ior = true;
00355   int cdr_tradeoff = ACE_DEFAULT_CDR_MEMCPY_TRADEOFF;
00356 
00357   // The following things should be changed to use the ACE_Env_Value<>
00358   // template sometime.
00359 
00360   // Name Service port use for Multicast
00361   unsigned short ns_port = 0;
00362 
00363   // Trading Service port used for Multicast
00364   unsigned short ts_port = 0;
00365 
00366   // Implementation Repository Service port #.
00367   unsigned short ir_port = 0;
00368 
00369   // Buffer sizes for kernel socket buffers
00370   // @@ should be a default defined for each protocol implementation?
00371   //    since we may have protocols loaded which use shared memory of
00372   //    some form, fredk
00373   int rcv_sock_size = -1;
00374   int snd_sock_size = -1;
00375 
00376   // Use TCP_NODELAY.
00377   int nodelay = 1;
00378 
00379   // Use SO_KEEPALIVE (default 0).
00380   int so_keepalive = 0;
00381 
00382   // Use SO_DONTROUTE (default 0)
00383   int so_dontroute = 0;
00384 
00385   // Use dotted decimal addresses
00386   // @@ This option will be treated as a suggestion to each loaded
00387   //    protocol to use a character representation for the numeric
00388   //    address, otherwise use a logical name. fredk
00389 #if (TAO_USE_DOTTED_DECIMAL_ADDRESSES == 1)
00390   int dotted_decimal_addresses = 1;
00391 #else
00392   int dotted_decimal_addresses = 0;
00393 #endif /* TAO_USE_DOTTED_DECIMAL_ADDRESSES */
00394 
00395   // Disable looking up the host name for incoming connections.
00396   int no_server_side_name_lookups = 0;
00397 
00398 #if defined (TAO_STD_PROFILE_COMPONENTS)
00399   int std_profile_components = 1;
00400 #else
00401   int std_profile_components = 0;
00402 #endif /* TAO_STD_PROFILE_COMPONENTS */
00403 
00404   int linger = -1;
00405 
00406   int use_parallel_connects = 0;
00407 
00408   // Copy command line parameter not to use original.
00409   ACE_Argv_Type_Converter command_line (argc, argv);
00410 
00411   ACE_Arg_Shifter arg_shifter (command_line.get_argc (),
00412                                command_line.get_TCHAR_argv ());
00413 
00414   ACE_GUARD_RETURN (TAO_SYNCH_MUTEX,
00415                     monitor,
00416                     this->lock_,
00417                     -1);
00418 
00419 #if (TAO_NEGOTIATE_CODESETS == 1)
00420   int negotiate_codesets = 1;
00421 #else
00422   int negotiate_codesets = 0;
00423 #endif /* TAO_NEGOTIATE_CODESETS */
00424 
00425   // Pick up the value of the use_implrepo_ flag from an environment variable
00426   // called "TAO_USE_IMR". Do it here so that it can be overridden by
00427   // the "-ORBUseIMR" command line argument.
00428   //
00429   char* const use_IMR_env_var_value = ACE_OS::getenv  ("TAO_USE_IMR") ;
00430   if  (use_IMR_env_var_value != 0)
00431     {
00432       this->use_implrepo_ = ACE_OS::atoi  (use_IMR_env_var_value) ;
00433     }
00434 
00435 
00436   while (arg_shifter.is_anything_left ())
00437     {
00438       const ACE_TCHAR *current_arg = 0;
00439 
00440       ////////////////////////////////////////////////////////////////
00441       // begin with the 'parameterless' flags                       //
00442       ////////////////////////////////////////////////////////////////
00443       if (0 != (current_arg = arg_shifter.get_the_parameter
00444                 (ACE_TEXT("-ORBDottedDecimalAddresses"))))
00445         {
00446           // Use dotted decimal addresses
00447           // @@ this should be renamed.  See above comment. fredk
00448           dotted_decimal_addresses =
00449             ACE_OS::atoi (current_arg);
00450 
00451           arg_shifter.consume_arg ();
00452         }
00453       else if (0 != (current_arg = arg_shifter.get_the_parameter
00454                 (ACE_TEXT("-ORBNoServerSideNameLookups"))))
00455         {
00456           // Don't look up the host name for incoming connections
00457           no_server_side_name_lookups =
00458             ACE_OS::atoi (current_arg);
00459 
00460           arg_shifter.consume_arg ();
00461         }
00462       else if (0 != (current_arg = arg_shifter.get_the_parameter
00463                 (ACE_TEXT("-ORBNameServicePort"))))
00464         {
00465           // Specify the port number for the NameService.
00466           // Unrelated to ORB Protocols, this is used for multicast.
00467 
00468           ns_port = static_cast <CORBA::UShort> (ACE_OS::atoi (current_arg));
00469 
00470           arg_shifter.consume_arg ();
00471         }
00472       else if (0 != (current_arg = arg_shifter.get_the_parameter
00473                 (ACE_TEXT("-ORBMulticastDiscoveryEndpoint"))))
00474         {
00475           // Specify mcast address:port@network_interface for the
00476           // Naming Service Multicast Discovery Protocol.
00477           // If there is no colon, its only the port no.
00478           // If there is a '@' also, it means that the network
00479           // interface name is specified.
00480           this->orb_params ()->mcast_discovery_endpoint (
00481             ACE_TEXT_ALWAYS_CHAR(current_arg));
00482 
00483           arg_shifter.consume_arg ();
00484         }
00485       else if (0 != (current_arg = arg_shifter.get_the_parameter
00486                 (ACE_TEXT("-ORBNodelay"))))
00487         {
00488           // Use TCP_NODELAY or not.
00489           nodelay =
00490             ACE_OS::atoi (current_arg);
00491 
00492           arg_shifter.consume_arg ();
00493         }
00494       else if (0 != (current_arg = arg_shifter.get_the_parameter
00495                 (ACE_TEXT("-ORBKeepalive"))))
00496         {
00497           // Use SO_KEEPALIVE or not.
00498           so_keepalive =
00499             ACE_OS::atoi (current_arg);
00500 
00501           arg_shifter.consume_arg ();
00502         }
00503       else if (0 != (current_arg = arg_shifter.get_the_parameter
00504                 (ACE_TEXT("-ORBDontRoute"))))
00505         {
00506           // Use SO_DONTROUTE or not.
00507           so_dontroute =
00508             ACE_OS::atoi (current_arg);
00509 
00510           arg_shifter.consume_arg ();
00511         }
00512       else if (0 != (current_arg = arg_shifter.get_the_parameter
00513                 (ACE_TEXT("-ORBTradingServicePort"))))
00514         {
00515           // Specify the port number for the TradingService.
00516 
00517           ts_port = static_cast <CORBA::UShort> (ACE_OS::atoi (current_arg));
00518 
00519           arg_shifter.consume_arg ();
00520         }
00521       else if (0 != (current_arg = arg_shifter.get_the_parameter
00522                 (ACE_TEXT("-ORBImplRepoServicePort"))))
00523         {
00524           // Specify the multicast port number for the Implementation
00525           // Repository.
00526           ir_port = static_cast <CORBA::UShort> (ACE_OS::atoi (current_arg));
00527 
00528           arg_shifter.consume_arg ();
00529         }
00530       else if (0 != (current_arg = arg_shifter.get_the_parameter
00531                 (ACE_TEXT("-ORBRcvSock"))))
00532         {
00533           // @@ All protocol implementation may not use sockets, so
00534           //    this can either be a generic I/O Buffer size or
00535           //    Buffer info can be a per protocol specification, fredk
00536 
00537           // Specify the size of the socket's receive buffer
00538 
00539           rcv_sock_size = ACE_OS::atoi (current_arg);
00540 
00541           arg_shifter.consume_arg ();
00542         }
00543       else if (0 != (current_arg = arg_shifter.get_the_parameter
00544                 (ACE_TEXT("-ORBSndSock"))))
00545         {
00546           // @@ All protocol implementation may not use sockets, so
00547           //    this can either be a generic I/O Buffer size or
00548           //    Buffer info can be a per protocol specification, fredk
00549 
00550           // Specify the size of the socket's send buffer
00551           snd_sock_size = ACE_OS::atoi (current_arg);
00552 
00553           arg_shifter.consume_arg ();
00554         }
00555       else if (0 != (current_arg = arg_shifter.get_the_parameter
00556                 (ACE_TEXT("-ORBObjRefStyle"))))
00557         {
00558           // Specifies the style of printed objrefs: URL or IOR
00559           //
00560           // BEGIN COMMENTS FROM IIOP-1.4 On Win32, we should be
00561           // collecting information from the Registry such as what
00562           // ORBs are configured, specific configuration details like
00563           // whether they generate IOR or URL style stringified
00564           // objrefs and which addresses they listen to (e.g. allowing
00565           // multihomed hosts to implement firewalls), user-meaningful
00566           // orb names (they will normally indicate domains), and
00567           // more.
00568           //
00569           // On UNIX, we should collect that from some private config
00570           // file.
00571           //
00572           // Instead, this just treats the "internet" ORB name
00573           // specially and makes it always use URL-style stringified
00574           // objrefs, where the hostname and TCP port number are
00575           // explicit (and the whole objref is readable by mortals).
00576           // BEGIN COMMENTS FROM IIOP-1.4
00577           const ACE_TCHAR *opt = current_arg;
00578           if (ACE_OS::strcasecmp (opt, ACE_TEXT("URL")) == 0)
00579             use_ior = false;
00580           else if (ACE_OS::strcasecmp (opt, ACE_TEXT("IOR")) == 0)
00581             use_ior = true;
00582 
00583           arg_shifter.consume_arg ();
00584         }
00585       else if (0 != (current_arg = arg_shifter.get_the_parameter
00586                 (ACE_TEXT("-ORBCollocationStrategy"))))
00587         {
00588           // Specify which collocation policy we want to use.
00589           const ACE_TCHAR *opt = current_arg;
00590           if (ACE_OS::strcasecmp (opt, ACE_TEXT("thru_poa")) == 0)
00591             this->collocation_strategy_ = THRU_POA;
00592           else if (ACE_OS::strcasecmp (opt, ACE_TEXT("direct")) == 0)
00593             this->collocation_strategy_ = DIRECT;
00594 
00595           arg_shifter.consume_arg ();
00596         }
00597       else if (0 != (current_arg = arg_shifter.get_the_parameter
00598                 (ACE_TEXT("-ORBCollocation"))))
00599         {
00600           // Specify whether we want to optimize against collocation
00601           // objects.  Valid arguments are: "global", "no", and "per-orb".
00602           // Default is global.
00603 
00604           const ACE_TCHAR *opt = current_arg;
00605           if (ACE_OS::strcasecmp (opt, ACE_TEXT("global")) == 0)
00606             {
00607               this->opt_for_collocation_ = true;
00608               this->use_global_collocation_ = true;
00609             }
00610           else if (ACE_OS::strcasecmp (opt, ACE_TEXT("NO")) == 0)
00611             {
00612               this->opt_for_collocation_ = false;
00613               this->use_global_collocation_ = false;
00614             }
00615           else if (ACE_OS::strcasecmp (opt, ACE_TEXT("per-orb")) == 0)
00616             {
00617               this->opt_for_collocation_ = true;
00618               this->use_global_collocation_ = false;
00619             }
00620           else
00621             {
00622               ACE_DEBUG ((LM_WARNING,
00623                           ACE_TEXT ("WARNING: Unknown option to ")
00624                           ACE_TEXT ("'-ORBCollocation': %s\n"), opt));
00625             }
00626 
00627           arg_shifter.consume_arg ();
00628         }
00629       else if (0 != (current_arg = arg_shifter.get_the_parameter
00630                 (ACE_TEXT("-ORBPreferredInterfaces"))))
00631         {
00632           if (this->orb_params ()->preferred_interfaces (
00633                 ACE_TEXT_ALWAYS_CHAR (current_arg)) == false)
00634             throw ::CORBA::INTERNAL (
00635               CORBA::SystemException::_tao_minor_code (
00636                 TAO_ORB_CORE_INIT_LOCATION_CODE,
00637                 0),
00638               CORBA::COMPLETED_NO);
00639 
00640           arg_shifter.consume_arg ();
00641         }
00642       else if (0 != (current_arg = arg_shifter.get_the_parameter
00643                 (ACE_TEXT("-ORBEnforcePreferredInterfaces"))))
00644         {
00645           int enforce_pref_interfaces = ACE_OS::atoi (current_arg);
00646           if (enforce_pref_interfaces)
00647             this->orb_params ()->enforce_pref_interfaces (false);
00648           else
00649             this->orb_params ()->enforce_pref_interfaces (true);
00650 
00651           arg_shifter.consume_arg ();
00652         }
00653 #if defined (ACE_HAS_IPV6)
00654       else if (0 != (current_arg = arg_shifter.get_the_parameter
00655                 (ACE_TEXT("-ORBPreferIPV6Interfaces"))))
00656         {
00657           int prefer_ipv6_interfaces = ACE_OS::atoi (current_arg);
00658           if (prefer_ipv6_interfaces)
00659             this->orb_params ()->prefer_ipv6_interfaces (true);
00660           else
00661             this->orb_params ()->prefer_ipv6_interfaces (false);
00662 
00663           arg_shifter.consume_arg ();
00664         }
00665       else if (0 != (current_arg = arg_shifter.get_the_parameter
00666                 (ACE_TEXT("-ORBConnectIPV6Only"))))
00667         {
00668           int connect_ipv6_only = ACE_OS::atoi (current_arg);
00669           if (connect_ipv6_only)
00670             this->orb_params ()->connect_ipv6_only (true);
00671           else
00672             this->orb_params ()->connect_ipv6_only (false);
00673 
00674           arg_shifter.consume_arg ();
00675         }
00676       else if ((current_arg = arg_shifter.get_the_parameter
00677                 (ACE_TEXT("-ORBUseIPV6LinkLocal"))))
00678         {
00679           int use_ipv6_link_local = ACE_OS::atoi (current_arg);
00680           if (use_ipv6_link_local)
00681             this->orb_params ()->use_ipv6_link_local (true);
00682           else
00683             this->orb_params ()->use_ipv6_link_local (false);
00684 
00685           arg_shifter.consume_arg ();
00686         }
00687 #endif /* ACE_HAS_IPV6 */
00688       else if (0 != (current_arg = arg_shifter.get_the_parameter
00689                 (ACE_TEXT("-ORBCDRTradeoff"))))
00690         {
00691           cdr_tradeoff = ACE_OS::atoi (current_arg);
00692 
00693           arg_shifter.consume_arg ();
00694         }
00695 
00696       // A new <ObjectID>:<IOR> mapping has been specified. This will be
00697       // used by the resolve_initial_references ().
00698 
00699       else if (0 != (current_arg = arg_shifter.get_the_parameter
00700                 (ACE_TEXT("-ORBInitRef"))))
00701         {
00702           const ACE_TCHAR *pos = ACE_OS::strchr (current_arg, '=');
00703           if (pos == 0)
00704             {
00705               ACE_ERROR ((LM_ERROR,
00706                           ACE_TEXT ("Invalid ORBInitRef argument '%s'")
00707                           ACE_TEXT ("format is ObjectID=IOR\n"),
00708                           current_arg));
00709               throw ::CORBA::INTERNAL (
00710                 CORBA::SystemException::_tao_minor_code (
00711                   TAO_ORB_CORE_INIT_LOCATION_CODE,
00712                   0),
00713                 CORBA::COMPLETED_NO);
00714             }
00715           ACE_CString object_id (ACE_TEXT_ALWAYS_CHAR(current_arg),
00716                                  pos - current_arg);
00717           ACE_CString IOR (ACE_TEXT_ALWAYS_CHAR(pos + 1));
00718           if (!this->init_ref_map_.insert (
00719                  std::make_pair (InitRefMap::key_type (object_id),
00720                                  InitRefMap::data_type (IOR))).second)
00721             {
00722               ACE_ERROR ((LM_ERROR,
00723                           ACE_TEXT ("Duplicate -ORBInitRef ")
00724                           ACE_TEXT ("argument '%s'\n"),
00725                           current_arg));
00726               throw ::CORBA::INTERNAL (
00727                 CORBA::SystemException::_tao_minor_code (
00728                   TAO_ORB_CORE_INIT_LOCATION_CODE,
00729                   0),
00730                 CORBA::COMPLETED_NO);
00731             }
00732           arg_shifter.consume_arg ();
00733         }
00734       else if (0 != (current_arg = arg_shifter.get_the_parameter
00735                 (ACE_TEXT("-ORBDefaultInitRef"))))
00736         {
00737           // Set the list of prefixes from -ORBDefaultInitRef.
00738           this->orb_params ()->default_init_ref
00739             (ACE_TEXT_ALWAYS_CHAR(current_arg));
00740 
00741           arg_shifter.consume_arg ();
00742         }
00743       else if (0 != (current_arg = arg_shifter.get_the_parameter
00744                 (ACE_TEXT("-ORBStdProfileComponents"))))
00745         {
00746           std_profile_components =
00747             ACE_OS::atoi (current_arg);
00748           arg_shifter.consume_arg ();
00749         }
00750       else if (0 != (current_arg = arg_shifter.get_the_parameter
00751                 (ACE_TEXT("-ORBAMICollocation"))))
00752         {
00753           int ami_collocation = ACE_OS::atoi (current_arg);
00754           if (ami_collocation)
00755             this->orb_params ()->ami_collication (true);
00756           else
00757             this->orb_params ()->ami_collication (false);
00758 
00759           arg_shifter.consume_arg ();
00760         }
00761       else if (0 != (current_arg = arg_shifter.get_the_parameter
00762                 (ACE_TEXT("-ORBResources"))))
00763         {
00764           ACE_DEBUG ((LM_WARNING,
00765                       ACE_TEXT ("\"-ORBResources\" has been ")
00766                       ACE_TEXT ("deprecated.\n")));
00767 
00768           arg_shifter.consume_arg ();
00769         }
00770       else if (0 != (current_arg = arg_shifter.get_the_parameter
00771                 (ACE_TEXT("-ORBLogFile"))))
00772         {
00773           // redirect all ACE_DEBUG and ACE_ERROR output to a file
00774           // USAGE: -ORBLogFile <file>
00775           // default: if <file> is present     = append
00776           //          if <file> is not present = create
00777 
00778           const ACE_TCHAR *file_name = current_arg;
00779           arg_shifter.consume_arg ();
00780 
00781           // would rather use ACE_OSTREAM_TYPE out here..
00782           // but need ACE_FSTREAM_TYPE to call ->open(...)
00783           // and haven't found such a macro to rep FILE* and/or fstream*
00784 
00785 #if defined (ACE_LACKS_IOSTREAM_TOTALLY)
00786 
00787           FILE* output_stream = ACE_OS::fopen (file_name, ACE_TEXT ("a"));
00788 
00789           ACE_LOG_MSG->msg_ostream (output_stream, 1);
00790 
00791 #else /* ! ACE_LACKS_IOSTREAM_TOTALLY */
00792 
00793           ofstream* output_stream = 0;
00794 
00795           //
00796           // note: we are allocating dynamic memory here....but
00797           // I assume it will persist for the life of the program
00798           //
00799 
00800           ACE_NEW_THROW_EX (output_stream,
00801                             ofstream (),
00802                             CORBA::NO_MEMORY (
00803                               CORBA::SystemException::_tao_minor_code (
00804                                 TAO_ORB_CORE_INIT_LOCATION_CODE,
00805                                 ENOMEM),
00806                               CORBA::COMPLETED_NO));
00807 
00808           output_stream->open (ACE_TEXT_ALWAYS_CHAR (file_name),
00809                                ios::out | ios::app);
00810 
00811           if (!output_stream->bad ())
00812             {
00813               ACE_LOG_MSG->msg_ostream (output_stream, 1);
00814             }
00815 
00816 #endif /* ACE_LACKS_IOSTREAM_TOTALLY */
00817 
00818           ACE_LOG_MSG->clr_flags (ACE_Log_Msg::STDERR | ACE_Log_Msg::LOGGER);
00819           ACE_LOG_MSG->set_flags (ACE_Log_Msg::OSTREAM);
00820 
00821         }
00822       else if (0 != (current_arg = arg_shifter.get_the_parameter
00823                 (ACE_TEXT("-ORBVerboseLogging"))))
00824         {
00825           unsigned long verbose_logging = ACE_OS::atoi (current_arg);
00826 
00827           arg_shifter.consume_arg ();
00828 
00829           typedef void (ACE_Log_Msg::*PTMF)(u_long);
00830           PTMF flagop = &ACE_Log_Msg::set_flags;
00831           u_long value;
00832 
00833           switch (verbose_logging)
00834             {
00835             case 0:
00836               flagop = &ACE_Log_Msg::clr_flags;
00837               value = ACE_Log_Msg::VERBOSE | ACE_Log_Msg::VERBOSE_LITE;
00838               break;
00839             case 1:
00840               value = ACE_Log_Msg::VERBOSE_LITE; break;
00841             default:
00842               value = ACE_Log_Msg::VERBOSE; break;
00843             }
00844 
00845           (ACE_LOG_MSG->*flagop)(value);
00846         }
00847       else if (0 != (current_arg = arg_shifter.get_the_parameter
00848                 (ACE_TEXT("-ORBUseIMR"))))
00849         {
00850           // Use IR or not.
00851           this->use_implrepo_ = ACE_OS::atoi (current_arg);
00852 
00853           arg_shifter.consume_arg ();
00854         }
00855       else if (0 != (current_arg = arg_shifter.get_the_parameter
00856                 (ACE_TEXT("-ORBIMREndpointsInIOR"))))
00857         {
00858           this->imr_endpoints_in_ior_ = ACE_OS::atoi (current_arg);
00859 
00860           arg_shifter.consume_arg ();
00861         }
00862       else if (0 != (current_arg = arg_shifter.get_the_parameter
00863                 (ACE_TEXT("-ORBid"))))
00864         {
00865           // The ORBid is actually set in ORB_init(), and then passed
00866           // to the TAO_ORB_Core() constructor.  However, in the case
00867           // where the ORBid third argument to ORB_init() is not zero,
00868           // any "-ORBid" arguments in the argv argument list are
00869           // supposed to be ignored, according to the CORBA spec.  As
00870           // such, "-ORBid" must be removed from the argument list
00871           // since ORB_init() must remove all "-ORB" option
00872           // arguments.
00873 
00874           // We obtain a lock on the ORB table when setting the
00875           // ORBid.  For this reason we should *not* set the ORBid
00876           // here.  CORBA::ORB_init() does all of the proper locking
00877           // and setting.
00878 
00879           arg_shifter.consume_arg ();
00880         }
00881       else if (0 != (current_arg = arg_shifter.get_the_parameter
00882                 (ACE_TEXT("-ORBServerId"))))
00883         {
00884           // The this->server_id_ is to uniquely identify a server to
00885           // an IMR.
00886           // Fill in later.
00887           this->server_id_.set(ACE_TEXT_ALWAYS_CHAR(current_arg));
00888 
00889           arg_shifter.consume_arg ();
00890         }
00891       else if (0 != (current_arg = arg_shifter.get_the_parameter
00892                (ACE_TEXT("-ORBLingerTimeout"))))
00893         {
00894           linger = ACE_OS::atoi (current_arg);
00895 
00896           arg_shifter.consume_arg ();
00897         }
00898       else if (0 != (current_arg = arg_shifter.get_the_parameter
00899                 (ACE_TEXT("-ORBEndpoint"))))
00900         {
00901           // Each "endpoint" is of the form:
00902           //
00903           //   protocol://V.v@addr1,addr2,...,addrN
00904           //
00905           // or:
00906           //
00907           //   protocol://addr1,addr2,...,addrN
00908           //
00909           // where "V.v" is an optional protocol version for each
00910           // addr.  All endpoint strings should be of the above
00911           // form(s).
00912           //
00913           // Multiple sets of endpoint may be seperated by a semi-colon `;'.
00914           // For example:
00915           //
00916           //   corbaloc:space:2001,1.2@odyssey:2010;uiop://foo,bar
00917           //
00918           // All endpoint strings should be of the above form(s).
00919 
00920           this->set_endpoint_helper (TAO_DEFAULT_LANE,
00921                                      ACE_TEXT_ALWAYS_CHAR (current_arg)
00922                                     );
00923 
00924           arg_shifter.consume_arg ();
00925         }
00926       else if (0 != (current_arg = arg_shifter.get_the_parameter
00927                 (ACE_TEXT("-ORBListenEndpoints"))))
00928         {
00929           // This option is similar to the -ORBEndPoint option. May be
00930           // ORBEndpoint option will be deprecated in future. But, for
00931           // now, I (Priyanka) am leaving so that both options can be
00932           // used.
00933 
00934           this->set_endpoint_helper (TAO_DEFAULT_LANE,
00935                                      ACE_TEXT_ALWAYS_CHAR (current_arg)
00936                                     );
00937 
00938           arg_shifter.consume_arg ();
00939         }
00940       else if ((0 != (current_arg = arg_shifter.get_the_parameter
00941                 (ACE_TEXT("-ORBLaneEndpoint")))) ||
00942                (0 != (current_arg = arg_shifter.get_the_parameter
00943                 (ACE_TEXT("-ORBLaneListenEndpoints")))))
00944         {
00945           // This option is similar to the -ORBEndPoint option but
00946           // specifies endpoints for each lane.
00947 
00948           if (arg_shifter.is_option_next ())
00949             return -1;
00950 
00951           ACE_CString lane (ACE_TEXT_ALWAYS_CHAR (current_arg));
00952           arg_shifter.consume_arg ();
00953 
00954           if (arg_shifter.is_option_next ())
00955             return -1;
00956 
00957           ACE_CString endpoints (ACE_TEXT_ALWAYS_CHAR
00958                                   (arg_shifter.get_current ()));
00959           arg_shifter.consume_arg ();
00960 
00961           this->set_endpoint_helper (lane,
00962                                      endpoints
00963                                     );
00964         }
00965       else if (0 != (current_arg = arg_shifter.get_the_parameter
00966                 (ACE_TEXT("-ORBNoProprietaryActivation"))))
00967         {
00968           // This option can be used to set to not use any proprietary
00969           // activation framework. The only TAO proprietary activation
00970           // framework is IMR. So, by setting this option in TAO, the
00971           // IMR shouldnt be used .. even if the ORBUseIMR option is
00972           // set.
00973           // Fill in later
00974           // @@ To do later: Priyanka.
00975 
00976           throw ::CORBA::NO_IMPLEMENT ();
00977         }
00978        else if (0 != (current_arg = arg_shifter.get_the_parameter
00979                  (ACE_TEXT("-ORBUseSharedProfile"))))
00980          {
00981            this->orb_params ()->shared_profile
00982              (ACE_OS::atoi (current_arg));
00983 
00984            arg_shifter.consume_arg ();
00985          }
00986        else if (0 != (current_arg = arg_shifter.get_the_parameter
00987                  (ACE_TEXT("-ORBNegotiateCodesets"))))
00988          {
00989            negotiate_codesets =
00990              (ACE_OS::atoi (current_arg));
00991 
00992            arg_shifter.consume_arg ();
00993          }
00994        else if (0 != (current_arg = arg_shifter.get_the_parameter
00995                  (ACE_TEXT("-ORBUseParallelConnects"))))
00996          {
00997            use_parallel_connects = ACE_OS::atoi (current_arg);
00998            arg_shifter.consume_arg ();
00999          }
01000        else if (0 != (current_arg = arg_shifter.get_the_parameter
01001                  (ACE_TEXT("-ORBParallelConnectDelay"))))
01002          {
01003            this->orb_params ()->parallel_connect_delay
01004              (ACE_OS::atoi (current_arg));
01005            arg_shifter.consume_arg ();
01006          }
01007       else if (0 != (current_arg = arg_shifter.get_the_parameter
01008                 (ACE_TEXT("-ORBSingleReadOptimization"))))
01009         {
01010           this->orb_params ()->single_read_optimization
01011             (ACE_OS::atoi (current_arg));
01012 
01013           arg_shifter.consume_arg ();
01014         }
01015       else if (0 != (current_arg = arg_shifter.get_the_parameter
01016                 (ACE_TEXT("-ORBDisableRTCollocation"))))
01017         {
01018           int disable_rt_collocation = ACE_OS::atoi (current_arg);
01019           if (disable_rt_collocation)
01020             this->orb_params ()->disable_rt_collocation_resolver (true);
01021           else
01022             this->orb_params ()->disable_rt_collocation_resolver (false);
01023 
01024           arg_shifter.consume_arg ();
01025         }
01026       else if (0 != (current_arg = arg_shifter.get_the_parameter
01027                 (ACE_TEXT("-ORBUseLocalMemoryPool"))))
01028         {
01029           this->use_local_memory_pool_ = (0 != ACE_OS::atoi (current_arg));
01030 
01031           arg_shifter.consume_arg ();
01032         }
01033       else if (0 != (current_arg = arg_shifter.get_the_parameter
01034                 (ACE_TEXT("-ORBMaxMessageSize"))))
01035         {
01036           this->orb_params_.max_message_size (ACE_OS::atoi (current_arg));
01037 
01038           arg_shifter.consume_arg ();
01039         }
01040 
01041       ////////////////////////////////////////////////////////////////
01042       // catch any unknown -ORB args                                //
01043       ////////////////////////////////////////////////////////////////
01044       else if (arg_shifter.cur_arg_strncasecmp (ACE_TEXT("-ORB")) != -1)
01045         {
01046           if (TAO_debug_level > 0)
01047             {
01048               current_arg = arg_shifter.get_current ();
01049               ACE_ERROR ((LM_ERROR,
01050                           ACE_TEXT ("ERROR: Unknown \"-ORB\" option ")
01051                           ACE_TEXT ("<%s>.\n"),
01052                           ((current_arg == 0) ? ACE_TEXT("<NULL>")
01053                                               : current_arg)));
01054             }
01055 
01056           throw ::CORBA::BAD_PARAM (
01057             CORBA::SystemException::_tao_minor_code (
01058               TAO_ORB_CORE_INIT_LOCATION_CODE,
01059               EINVAL),
01060             CORBA::COMPLETED_NO);
01061         }
01062 
01063       ////////////////////////////////////////////////////////////////
01064       // ok, we can't interpret this argument, move to next argument//
01065       ////////////////////////////////////////////////////////////////
01066       else
01067         {
01068           // Any arguments that don't match are ignored so that the
01069           // caller can still use them.
01070           arg_shifter.ignore_arg ();
01071         }
01072     }
01073 
01074   const char *env_endpoint =
01075     ACE_OS::getenv ("TAO_ORBENDPOINT");
01076 
01077   if (env_endpoint != 0)
01078     {
01079       int result =
01080         this->orb_params ()->add_endpoints (TAO_DEFAULT_LANE,
01081                                             env_endpoint);
01082 
01083       if (result != 0)
01084         {
01085           if (TAO_debug_level > 0)
01086             {
01087               ACE_ERROR ((LM_ERROR,
01088                           ACE_TEXT ("ERROR: Environment variable ")
01089                           ACE_TEXT ("TAO_ORBENDPOINT set to invalid value ")
01090                           ACE_TEXT ("<%s>.\n"),
01091                           env_endpoint));
01092             }
01093 
01094           throw ::CORBA::BAD_PARAM (
01095             CORBA::SystemException::_tao_minor_code (
01096               TAO_ORB_CORE_INIT_LOCATION_CODE,
01097               EINVAL),
01098             CORBA::COMPLETED_NO);
01099         }
01100     }
01101 
01102 #if defined (SIGPIPE) && !defined (ACE_LACKS_UNIX_SIGNALS)
01103   // There's really no way to deal with this in a portable manner, so
01104   // we just have to suck it up and get preprocessor conditional and
01105   // ugly.
01106   //
01107   // Impractical to have each call to the ORB protect against the
01108   // implementation artifact of potential writes to dead connections,
01109   // as it'd be way expensive.  Do it here; who cares about SIGPIPE in
01110   // these kinds of applications, anyway?
01111   (void) ACE_OS::signal (SIGPIPE, (ACE_SignalHandler) SIG_IGN);
01112 #endif /* SIGPIPE */
01113 
01114 
01115   // Calling the open method here so that the svc.conf file is
01116   // opened and TAO_default_resource_factory::init () is called by the
01117   // time this method is called.
01118   this->parser_registry_.open (this);
01119 
01120   // Initialize the pointers to resources in the ORB Core instance,
01121   // e.g., reactor, connector, etc.  Must do this after we open
01122   // services because we'll load the factory from there.
01123   TAO_Resource_Factory *trf = this->resource_factory ();
01124 
01125   if (trf == 0)
01126     {
01127       ACE_ERROR ((LM_ERROR,
01128                   ACE_TEXT ("(%P|%t) %p\n"),
01129                   ACE_TEXT ("ORB Core unable to find a ")
01130                   ACE_TEXT ("Resource Factory instance")));
01131       throw ::CORBA::INTERNAL (
01132         CORBA::SystemException::_tao_minor_code (
01133           TAO_ORB_CORE_INIT_LOCATION_CODE,
01134           0),
01135         CORBA::COMPLETED_NO);
01136     }
01137 
01138   // Set whether or not to use the local memory pool for the cdr allocators.
01139 
01140   trf->use_local_memory_pool (this->use_local_memory_pool_);
01141 
01142   // @@ ????
01143   // Make sure the reactor is initialized...
01144   ACE_Reactor *reactor = this->reactor ();
01145   if (reactor == 0)
01146     {
01147       ACE_ERROR ((LM_ERROR,
01148                   ACE_TEXT ("(%P|%t) %p\n"),
01149                   ACE_TEXT ("ORB Core unable to initialize reactor")));
01150       throw ::CORBA::INITIALIZE (
01151         CORBA::SystemException::_tao_minor_code (
01152           TAO_ORB_CORE_INIT_LOCATION_CODE,
01153           0),
01154         CORBA::COMPLETED_NO);
01155     }
01156 
01157   TAO_Server_Strategy_Factory *ssf = this->server_factory ();
01158 
01159   if (ssf == 0)
01160     {
01161       ACE_ERROR ((LM_ERROR,
01162                   ACE_TEXT ("(%P|%t) %p\n"),
01163                   ACE_TEXT ("ORB Core unable to find a ")
01164                   ACE_TEXT ("Server Strategy Factory instance")));
01165       throw ::CORBA::INTERNAL (
01166         CORBA::SystemException::_tao_minor_code (
01167           TAO_ORB_CORE_INIT_LOCATION_CODE,
01168           0),
01169         CORBA::COMPLETED_NO);
01170     }
01171 
01172   ssf->open (this);
01173 
01174   // Open the ObjectKey_Table
01175   (void) this->object_key_table_.init (this);
01176 
01177   // Obtain the timeout value for the thread-per-connection model
01178   this->thread_per_connection_use_timeout_ =
01179     ssf->thread_per_connection_timeout (this->thread_per_connection_timeout_);
01180 
01181   if (thread_per_connection_use_timeout_ == -1)
01182     {
01183       if (ACE_OS::strcasecmp (TAO_DEFAULT_THREAD_PER_CONNECTION_TIMEOUT,
01184                               "INFINITE") == 0)
01185         {
01186           this->thread_per_connection_use_timeout_ = 0;
01187         }
01188       else
01189         {
01190           this->thread_per_connection_use_timeout_ = 1;
01191           int milliseconds =
01192             ACE_OS::atoi (TAO_DEFAULT_THREAD_PER_CONNECTION_TIMEOUT);
01193           // Use a temporary to obtain automatic normalization.
01194           this->thread_per_connection_timeout_ =
01195             ACE_Time_Value (0, 1000 * milliseconds);
01196         }
01197     }
01198   if (this->thread_per_connection_use_timeout_ == 0)
01199     {
01200       // Do not wait for the server threads because they may block
01201       // forever.
01202       this->tm_.wait_on_exit (0);
01203     }
01204 
01205   // Initialize the "ORB" pseudo-object now.
01206   this->orb_ = CORBA::ORB::_tao_make_ORB (this);
01207 
01208   // This should probably move into the ORB Core someday rather then
01209   // being done at this level.
01210   this->orb_->_use_omg_ior_format (use_ior);
01211 
01212   // Set all kinds of orb parameters whose setting needed to be
01213   // deferred until after the service config entries had been
01214   // determined.
01215 
01216   this->orb_params ()->service_port (TAO::MCAST_NAMESERVICE, ns_port);
01217 
01218   if (ns_port != 0)
01219     {
01220       static char const mcast_fmt[] = "mcast://:%d::";
01221       static size_t const PORT_BUF_SIZE = 256;
01222 
01223       char def_init_ref[PORT_BUF_SIZE] = { 0 };
01224 
01225       ACE_OS::snprintf (def_init_ref,
01226                         PORT_BUF_SIZE,
01227                         mcast_fmt,
01228                         ns_port);
01229 
01230       this->orb_params ()->default_init_ref (def_init_ref);
01231     }
01232 
01233   this->orb_params ()->service_port (TAO::MCAST_TRADINGSERVICE, ts_port);
01234   this->orb_params ()->service_port (TAO::MCAST_IMPLREPOSERVICE, ir_port);
01235 
01236   this->orb_params ()->use_dotted_decimal_addresses (dotted_decimal_addresses);
01237   // When caching incoming transports don't use the host name if
01238   // -ORBDottedDecimalAddresses or -ORBNoServerSideNameLookups is true.
01239   this->orb_params ()->cache_incoming_by_dotted_decimal_address
01240                                             (no_server_side_name_lookups
01241                                              || dotted_decimal_addresses);
01242 
01243   this->orb_params ()->use_parallel_connects
01244     (use_parallel_connects != 0);
01245 
01246   this->orb_params ()->linger (linger);
01247   this->orb_params ()->nodelay (nodelay);
01248   this->orb_params ()->sock_keepalive (so_keepalive);
01249   this->orb_params ()->sock_dontroute (so_dontroute);
01250   if (rcv_sock_size >= 0)
01251     this->orb_params ()->sock_rcvbuf_size (rcv_sock_size);
01252   if (snd_sock_size >= 0)
01253     this->orb_params ()->sock_sndbuf_size (snd_sock_size);
01254   if (cdr_tradeoff >= 0)
01255     this->orb_params ()->cdr_memcpy_tradeoff (cdr_tradeoff);
01256 
01257   this->orb_params ()->std_profile_components (std_profile_components);
01258 
01259   this->orb_params ()->negotiate_codesets (negotiate_codesets);
01260 
01261   if (this->codeset_manager())
01262     this->codeset_manager_->open();
01263   else
01264     if  (TAO_debug_level > 0)
01265         ACE_DEBUG ((LM_DEBUG,
01266                     ACE_TEXT("TAO (%P|%t) ORB_Core: ")
01267                     ACE_TEXT("Codeset Manager not available\n")));
01268 
01269   // Set up the pluggable protocol infrastructure.  First get a
01270   // pointer to the protocol factories set, then obtain pointers to
01271   // all factories loaded by the service configurator.
01272   // Load all protocol factories!
01273   if (trf->init_protocol_factories () == -1)
01274     throw ::CORBA::INITIALIZE (
01275       CORBA::SystemException::_tao_minor_code (
01276         TAO_ORB_CORE_INIT_LOCATION_CODE,
01277         0),
01278       CORBA::COMPLETED_NO);
01279 
01280   // init the ORB core's pointer
01281   this->protocol_factories_ = trf->get_protocol_factories ();
01282 
01283   // Initialize the flushing strategy
01284   this->flushing_strategy_ = trf->create_flushing_strategy ();
01285 
01286   // Look in the service repository for an instance of the Protocol Hooks.
01287   const char *protocols_hooks_name = this->orb_params ()->protocols_hooks_name ();
01288 
01289   this->protocols_hooks_ =
01290     ACE_Dynamic_Service<TAO_Protocols_Hooks>::instance
01291     (this->configuration (),
01292      ACE_TEXT_CHAR_TO_TCHAR (protocols_hooks_name));
01293 
01294   if (this->protocols_hooks_ != 0)
01295     {
01296       // Initialize the protocols hooks instance.
01297       this->protocols_hooks_->init_hooks (this);
01298     }
01299 
01300   // If available, allow the Adapter Factory to setup.
01301   ACE_Service_Object *adapter_factory =
01302     ACE_Dynamic_Service<ACE_Service_Object>::instance (
01303       this->configuration (),
01304       this->orb_params ()->poa_factory_name ());
01305 
01306   if (adapter_factory != 0)
01307     {
01308       adapter_factory->init (0, 0);
01309     }
01310 
01311   // Look in the service repository for an instance of the
01312   // Network Priority Protocol Hooks.
01313   const ACE_CString &network_priority_protocols_hooks_name =
01314      TAO_ORB_Core_Static_Resources::instance ()->
01315        network_priority_protocols_hooks_name_;
01316 
01317   this->network_priority_protocols_hooks_ =
01318     ACE_Dynamic_Service<TAO_Network_Priority_Protocols_Hooks>::instance
01319     (this->configuration (),
01320      ACE_TEXT_CHAR_TO_TCHAR (network_priority_protocols_hooks_name.c_str()));
01321 
01322   if (this->network_priority_protocols_hooks_ != 0)
01323     {
01324       // Initialize the protocols hooks instance.
01325       this->network_priority_protocols_hooks_->init_hooks (this);
01326     }
01327 
01328   // As a last step perform initializations of the service callbacks
01329   this->services_callbacks_init ();
01330 
01331   // The ORB has been initialized, meaning that the ORB is no longer
01332   // in the shutdown state.
01333   this->has_shutdown_ = false;
01334 
01335   return 0;
01336 }

ACE_INLINE TAO_ORB_Core::InitRefMap * TAO_ORB_Core::init_ref_map void   ) 
 

Return a pointer to the -ORBInitRef map.

Definition at line 172 of file ORB_Core.inl.

References init_ref_map_.

Referenced by CORBA::ORB::resolve_initial_references().

00173 {
00174   return &this->init_ref_map_;
00175 }

CORBA::Long TAO_ORB_Core::initialize_object TAO_Stub the_stub,
CORBA::Object_ptr  obj
 

Initialize a new object, use the adapter registry to initialize a collocated object, if not possible then initialize a regular object. NOTE: Why would this method be required? The answer is if the user decides to use lazy initialization of CORBA object, then this is the route that we have to take to do the initialization.

Definition at line 1955 of file ORB_Core.cpp.

References TAO_Stub::base_profiles(), initialize_object_i(), and CORBA::Object_ptr.

Referenced by CORBA::Object::tao_object_initialize().

01956 {
01957   // @@ What about forwarding.  With this approach we are never forwarded
01958   //    when we use collocation!
01959   const TAO_MProfile &mprofile =
01960     stub->base_profiles ();
01961 
01962   return initialize_object_i (stub, mprofile);
01963 }

CORBA::Long TAO_ORB_Core::initialize_object_i TAO_Stub the_stub,
const TAO_MProfile mprofile
[protected]
 

Common code from ::initialize_object and ::reinitialize_object.

Definition at line 1974 of file ORB_Core.cpp.

References _incr_refcnt(), ACE_GUARD_RETURN, adapter_registry(), TAO::ORB_Table::begin(), TAO::ORB_Table::end(), TAO_ORB_Core_Auto_Ptr::get(), TAO_Adapter_Registry::initialize_collocated_object(), TAO::ORB_Table::instance(), is_collocation_enabled(), and TAO_SYNCH_MUTEX.

Referenced by initialize_object(), and reinitialize_object().

01976 {
01977   CORBA::Long retval = 0;
01978   TAO_ORB_Core_Auto_Ptr collocated_orb_core;
01979 
01980   {
01981     // Lock the ORB_Table against concurrent modification while we
01982     // iterate through the ORBs.
01983     ACE_MT (ACE_GUARD_RETURN (TAO_SYNCH_MUTEX,
01984                               guard,
01985                               TAO::ORB_Table::instance()->lock (),
01986                               0));
01987 
01988     TAO::ORB_Table * const table = TAO::ORB_Table::instance ();
01989     TAO::ORB_Table::iterator const end = table->end ();
01990     for (TAO::ORB_Table::iterator i = table->begin (); i != end; ++i)
01991       {
01992         TAO_ORB_Core * const other_core = (*i).second.core ();
01993 
01994         if (this->is_collocation_enabled (other_core,
01995                                           mprofile))
01996           {
01997             other_core->_incr_refcnt ();
01998             TAO_ORB_Core_Auto_Ptr tmp_auto_ptr (other_core);
01999             collocated_orb_core = tmp_auto_ptr;
02000             break;
02001           }
02002       }
02003   }
02004 
02005   if (collocated_orb_core.get ())
02006     {
02007       TAO_Adapter_Registry *ar =
02008         collocated_orb_core.get ()->adapter_registry ();
02009 
02010       retval = ar->initialize_collocated_object (stub);
02011     }
02012 
02013   return retval;
02014 }

ACE_Allocator * TAO_ORB_Core::input_cdr_buffer_allocator void   ) 
 

This allocator is always global and has no locks. It is intended for allocating the buffers used in *incoming* CDR streams.

Definition at line 2718 of file ORB_Core.cpp.

References TAO_Thread_Lane_Resources::input_cdr_buffer_allocator(), and lane_resources().

Referenced by create_input_cdr_data_block(), and CORBA::Object::tao_object_initialize().

02719 {
02720   return this->lane_resources ().input_cdr_buffer_allocator ();
02721 }

ACE_Allocator * TAO_ORB_Core::input_cdr_dblock_allocator void   ) 
 

This allocator is global, may or may not have locks. It is intended for allocating the ACE_Data_Blocks used in *incoming* CDR streams.

Definition at line 2712 of file ORB_Core.cpp.

References TAO_Thread_Lane_Resources::input_cdr_dblock_allocator(), and lane_resources().

Referenced by create_input_cdr_data_block(), TAO_Transport::handle_input_parse_data(), TAO_GIOP_Message_Base::process_request_message(), and CORBA::Object::tao_object_initialize().

02713 {
02714   return this->lane_resources ().input_cdr_dblock_allocator ();
02715 }

ACE_Allocator * TAO_ORB_Core::input_cdr_msgblock_allocator void   ) 
 

This allocator is always global and has no locks. It is intended for allocating the buffers used in *incoming* CDR streams.

Definition at line 2724 of file ORB_Core.cpp.

References TAO_Thread_Lane_Resources::input_cdr_msgblock_allocator(), and lane_resources().

Referenced by TAO_GIOP_Message_Base::make_queued_data(), and CORBA::Object::tao_object_initialize().

02725 {
02726   return this->lane_resources ().input_cdr_msgblock_allocator ();
02727 }

TAO_IORInterceptor_Adapter * TAO_ORB_Core::ior_interceptor_adapter void   ) 
 

Get the IOR Interceptor adapter. If not created, this method will try to create one.

Definition at line 3128 of file ORB_Core.cpp.

References ACE_GUARD_RETURN, ACE_TEXT_CHAR_TO_TCHAR, configuration(), TAO_IORInterceptor_Adapter_Factory::create(), ior_interceptor_adapter_, iorinterceptor_adapter_factory_name(), and TAO_SYNCH_MUTEX.

Referenced by add_interceptor().

03129 {
03130   if (this->ior_interceptor_adapter_ == 0)
03131     {
03132       ACE_GUARD_RETURN (TAO_SYNCH_MUTEX,
03133                         ace_mon,
03134                         this->lock_,
03135                         0);
03136 
03137       if (this->ior_interceptor_adapter_ == 0)
03138         {
03139           try
03140             {
03141               TAO_IORInterceptor_Adapter_Factory * ior_ap_factory =
03142                 ACE_Dynamic_Service<TAO_IORInterceptor_Adapter_Factory>::instance
03143                   (this->configuration (),
03144                    ACE_TEXT_CHAR_TO_TCHAR (TAO_ORB_Core::iorinterceptor_adapter_factory_name ()));
03145 
03146               if (ior_ap_factory)
03147                 {
03148                   this->ior_interceptor_adapter_ = ior_ap_factory->create ();
03149                 }
03150             }
03151           catch (const ::CORBA::Exception& ex)
03152             {
03153               ex._tao_print_exception (
03154                 "Cannot initialize the ior_interceptor_adapter \n");
03155             }
03156         }
03157     }
03158 
03159   return this->ior_interceptor_adapter_;
03160 }

const char * TAO_ORB_Core::iorinterceptor_adapter_factory_name void   )  [static]
 

Gets the value of TAO_ORB_Core::iorinterceptor_adapter_factory_name_.

Definition at line 1467 of file ORB_Core.cpp.

References TAO_ORB_Core_Static_Resources::instance(), and TAO_ORB_Core_Static_Resources::iorinterceptor_adapter_factory_name_.

void TAO_ORB_Core::iorinterceptor_adapter_factory_name const char *  name  )  [static]
 

Sets the value of TAO_ORB_Core::iorinterceptor_adapter_factory_name_.

Definition at line 1461 of file ORB_Core.cpp.

References TAO_ORB_Core_Static_Resources::instance(), and TAO_ORB_Core_Static_Resources::iorinterceptor_adapter_factory_name_.

Referenced by ior_interceptor_adapter().

int TAO_ORB_Core::is_collocated const TAO_MProfile mprofile  ) 
 

See if we have a collocated address, if yes, return the POA associated with the address.

Definition at line 2041 of file ORB_Core.cpp.

References TAO_Thread_Lane_Resources_Manager::is_collocated(), and thread_lane_resources_manager().

Referenced by is_collocation_enabled().

02042 {
02043   // @@ Lots of issues arise when dealing with collocation.  What about
02044   //    forwarding or what if this is a multi-profile IOR where the order is
02045   //    significant and only one of the profiles is collocated.  For example
02046   //    when using a multiple servers for fault tolerance.  For now, we just
02047   //    look through all profiles and if any are colocated then we assume
02048   //    the object is collocated.
02049   // @@ Note, if collocated we can not be forwarded!
02050   //    Also, acceptor_registry_->is_collocated (...) will check the
02051   //    address (ORB Host) but not the object_key.  This should be checked
02052   //    also.
02053 
02054   return this->thread_lane_resources_manager ().is_collocated (mprofile);
02055 }

CORBA::Boolean TAO_ORB_Core::is_collocation_enabled TAO_ORB_Core other_orb,
const TAO_MProfile mp
[private]
 

Checks to see whether collocation optimizations have to be applied on objects in the other_orb

Definition at line 2017 of file ORB_Core.cpp.

References TAO_MProfile::add_profile(), is_collocated(), optimize_collocation_objects(), service_profile_selection(), and use_global_collocation().

Referenced by create_object(), and initialize_object_i().

02019 {
02020   TAO_MProfile mp_temp;
02021 
02022   TAO_Profile* profile = 0;
02023   if (this->service_profile_selection(mp, profile) && profile)
02024   {
02025     mp_temp.add_profile(profile);
02026   }
02027 
02028   if (!orb_core->optimize_collocation_objects ())
02029     return 0;
02030 
02031   if (!orb_core->use_global_collocation () && orb_core != this)
02032     return 0;
02033 
02034   if (!orb_core->is_collocated (profile ? mp_temp : mp))
02035     return 0;
02036 
02037   return 1;
02038 }

ACE_INLINE CORBA::Boolean TAO_ORB_Core::is_permanent_forward_condition const CORBA::Object_ptr  obj,
const TAO_Service_Context service_context
 

Verify condition for permanent forward is given, both parameters must provide group attributes.

Definition at line 585 of file ORB_Core.inl.

References TAO_Service_Callbacks::is_permanent_forward_condition(), and CORBA::Object_ptr.

Referenced by TAO::Synch_Twoway_Invocation::check_reply_status(), TAO_ServerRequest::init_reply(), and TAO_GIOP_Message_Base::process_request().

00587 {
00588   const TAO_Service_Callbacks *service_callback =
00589       this->fault_tolerance_service ().service_callback ();
00590 
00591   CORBA::Boolean const permanent_forward_condition =
00592       service_callback &&
00593       service_callback->is_permanent_forward_condition (obj,
00594                                                         service_context);
00595 
00596   return permanent_forward_condition;
00597 }

ACE_INLINE TAO_Service_Callbacks::Profile_Equivalence TAO_ORB_Core::is_profile_equivalent const TAO_Profile this_p,
const TAO_Profile that_p
 

For details on how this is used please see the FT service

Definition at line 114 of file ORB_Core.inl.

References ft_service_, TAO_Service_Callbacks::is_profile_equivalent(), and TAO_Fault_Tolerance_Service::service_callback().

Referenced by TAO_Profile::is_equivalent_hook().

00116 {
00117   TAO_Service_Callbacks::Profile_Equivalence retval
00118     = TAO_Service_Callbacks::DONT_KNOW;
00119 
00120   if (this->ft_service_.service_callback ())
00121     {
00122       retval =
00123         this->ft_service_.service_callback ()->is_profile_equivalent (this_p,
00124                                                                       that_p);
00125     }
00126 
00127   return retval;
00128 }

TAO_Thread_Lane_Resources & TAO_ORB_Core::lane_resources void   ) 
 

Get access to the thread lane resources.

Definition at line 2336 of file ORB_Core.cpp.

References TAO_Thread_Lane_Resources_Manager::lane_resources(), and thread_lane_resources_manager().

Referenced by TAO_IIOP_Connection_Handler::add_transport_to_cache(), TAO_Connector::connect(), connector_registry(), TAO_Tagged_Profile::extract_object_key(), TAO::Profile_Transport_Resolver::find_transport(), input_cdr_buffer_allocator(), input_cdr_dblock_allocator(), input_cdr_msgblock_allocator(), leader_follower(), TAO_Creation_Strategy< SVC_HANDLER >::make_svc_handler(), output_cdr_buffer_allocator(), output_cdr_dblock_allocator(), output_cdr_msgblock_allocator(), TAO_Connector::parallel_connect(), TAO_IIOP_Transport::set_bidir_context_info(), TAO_Transport::transport_cache_manager(), and transport_message_buffer_allocator().

02337 {
02338   return this->thread_lane_resources_manager ().lane_resources ();
02339 }

TAO_Leader_Follower & TAO_ORB_Core::leader_follower void   ) 
 

Get access to the leader_follower class.

Definition at line 2060 of file ORB_Core.cpp.

References lane_resources(), and TAO_Thread_Lane_Resources::leader_follower().

Referenced by TAO_Leader_Follower_Flushing_Strategy::flush_message(), reactor(), run(), TAO_Wait_On_Leader_Follower::wait(), and TAO_LF_Connect_Strategy::wait_i().

02061 {
02062   return this->lane_resources ().leader_follower ();
02063 }

TAO_LF_Strategy & TAO_ORB_Core::lf_strategy void   ) 
 

Get access to the leader follower strategy.

Definition at line 2066 of file ORB_Core.cpp.

References TAO_Thread_Lane_Resources_Manager::lf_strategy(), and thread_lane_resources_manager().

Referenced by TAO_GIOP_Message_Base::process_request_message(), and run().

02067 {
02068   return this->thread_lane_resources_manager ().lf_strategy ();
02069 }

CORBA::ORB::ObjectIdList * TAO_ORB_Core::list_initial_references void   ) 
 

List all the service known by the ORB.

Definition at line 2654 of file ORB_Core.cpp.

References TAO_Seq_Var_Base_T< T >::_retn(), ACE_NEW_THROW_EX, ACE_Array_Map< Key, Value, EqualTo >::begin(), TAO_Object_Ref_Table::begin(), TAO_Object_Ref_Table::current_size(), ACE_Array_Map< Key, Value, EqualTo >::end(), TAO_Object_Ref_Table::end(), init_ref_map_, object_ref_table_, CORBA::ORB::ObjectIdList, CORBA::ORB::ObjectIdList_var, ACE_Array_Map< Key, Value, EqualTo >::size(), CORBA::string_dup(), and TAO_LIST_OF_INITIAL_SERVICES.

Referenced by CORBA::ORB::list_initial_services().

02655 {
02656   // Unsupported initial services should NOT be included in the below list!
02657   static const char *initial_services[] = { TAO_LIST_OF_INITIAL_SERVICES };
02658   // Make sure the "terminating" zero is the last array element so
02659   // that there is a stop condition when iterating through the list.
02660 
02661   static const size_t initial_services_size =
02662     sizeof (initial_services) / sizeof (initial_services[0]);
02663 
02664   const size_t total_size =
02665     initial_services_size
02666     + this->init_ref_map_.size ()
02667     + this->object_ref_table_.current_size ();
02668 
02669   CORBA::ORB::ObjectIdList *tmp = 0;
02670 
02671   ACE_NEW_THROW_EX (tmp,
02672                     CORBA::ORB::ObjectIdList (
02673                       static_cast<CORBA::ULong> (total_size)),
02674                     CORBA::NO_MEMORY ());
02675 
02676   CORBA::ORB::ObjectIdList_var list (tmp);
02677   list->length (static_cast<CORBA::ULong> (total_size));
02678 
02679   CORBA::ULong index = 0;
02680   // Index for ObjectIdList members.
02681 
02682   // Iterate over the registered initial references.
02683   for (index = 0; index < initial_services_size; ++index)
02684     list[index] = initial_services[index];
02685 
02686   // Now iterate over the initial references created by the user and
02687   // add them to the sequence.
02688 
02689   // References registered via
02690   // ORBInitInfo::register_initial_reference().
02691   TAO_Object_Ref_Table::iterator const obj_ref_end =
02692     this->object_ref_table_.end ();
02693 
02694   for (TAO_Object_Ref_Table::iterator i = this->object_ref_table_.begin ();
02695        i != obj_ref_end;
02696        ++i, ++index)
02697     list[index] = CORBA::string_dup ((*i).first.in ());
02698 
02699   // References registered via INS.
02700   InitRefMap::iterator const end = this->init_ref_map_.end ();
02701 
02702   for (InitRefMap::iterator j = this-> init_ref_map_.begin ();
02703        j != end;
02704        ++j, ++index)
02705     list[index] = (*j).second.c_str ();
02706 
02707   return list._retn ();
02708 }

void TAO_ORB_Core::load_policy_validators TAO_Policy_Validator validator  ) 
 

Call the libraries to handover the validators if they havent registered yet with the list of validators.

Definition at line 1883 of file ORB_Core.cpp.

References ACE_TEXT, bidir_adapter_, configuration(), and TAO_BiDir_Adapter::load_policy_validators().

01884 {
01885   if (this->bidir_adapter_ == 0)
01886     {
01887       this->bidir_adapter_ =
01888         ACE_Dynamic_Service<TAO_BiDir_Adapter>::instance
01889           (this->configuration (), ACE_TEXT ("BiDirGIOP_Loader"));
01890     }
01891 
01892   // Call the BiDir library if it has been loaded
01893   if (this->bidir_adapter_)
01894     this->bidir_adapter_->load_policy_validators (validator);
01895 }

ACE_INLINE ACE_Lock * TAO_ORB_Core::locking_strategy void   ) 
 

Return the locking strategy used for the data blocks.

Definition at line 34 of file ORB_Core.inl.

References data_block_lock_, resource_factory(), and TAO_Resource_Factory::use_locked_data_blocks().

Referenced by TAO_Transport::handle_input_parse_data().

00035 {
00036   if (this->resource_factory ()->use_locked_data_blocks ())
00037     return &this->data_block_lock_;
00038 
00039   return 0;
00040 }

ACE_INLINE void TAO_ORB_Core::not_default const char *  orb_id  ) 
 

Choose to be not a default ORB when there is more than one ORB.

Definition at line 185 of file ORB_Core.inl.

References TAO::ORB_Table::instance(), and TAO::ORB_Table::not_default().

00186 {
00187   TAO::ORB_Table * const table = TAO::ORB_Table::instance ();
00188   table->not_default (orb_id);
00189 }

ACE_INLINE CORBA::Boolean TAO_ORB_Core::object_is_nil CORBA::Object_ptr  object  ) 
 

The loaded service would determine if the CORBA::Object_ptr is actually nil or not. This would be useful to accomodate new enhanced definitions as defined by the service specification.

Definition at line 102 of file ORB_Core.inl.

References ft_service_, TAO_Service_Callbacks::object_is_nil(), CORBA::Object_ptr, and TAO_Fault_Tolerance_Service::service_callback().

Referenced by CORBA::Object::is_nil_i().

00103 {
00104   CORBA::Boolean retval = false;
00105   if (this->ft_service_.service_callback ())
00106     {
00107       retval = this->ft_service_.service_callback ()->object_is_nil (obj);
00108     }
00109   return retval;
00110 }

ACE_INLINE TAO::ObjectKey_Table & TAO_ORB_Core::object_key_table void   ) 
 

Acceessor to the table that stores the object_keys.

Definition at line 61 of file ORB_Core.inl.

References object_key_table_.

Referenced by TAO_Profile::decode(), TAO_IIOP_Profile::parse_string_i(), TAO_Profile::TAO_Profile(), and TAO_Profile::~TAO_Profile().

00062 {
00063   return this->object_key_table_;
00064 }

ACE_INLINE TAO_Object_Ref_Table & TAO_ORB_Core::object_ref_table void   ) 
 

Return the table that maps object key/name to de-stringified object reference. It is needed for supporting local objects in the resolve_initial_references() mechanism.

Definition at line 55 of file ORB_Core.inl.

References object_ref_table_.

Referenced by CORBA::ORB::register_initial_reference(), CORBA::ORB::resolve_initial_references(), and resolve_rt_orb().

00056 {
00057   return this->object_ref_table_;
00058 }

void TAO_ORB_Core::operator= const TAO_ORB_Core  )  [private]
 

ACE_INLINE CORBA::Boolean TAO_ORB_Core::optimize_collocation_objects void   )  const
 

Definition at line 198 of file ORB_Core.inl.

References opt_for_collocation_.

00199 {
00200   return this->opt_for_collocation_;
00201 }

ACE_INLINE void TAO_ORB_Core::optimize_collocation_objects CORBA::Boolean  opt  ) 
 

Definition at line 192 of file ORB_Core.inl.

References opt_for_collocation_.

Referenced by is_collocation_enabled().

00193 {
00194   this->opt_for_collocation_ = opt;
00195 }

ACE_INLINE CORBA::ORB_ptr TAO_ORB_Core::orb void   ) 
 

Get pointer to the ORB.

Definition at line 154 of file ORB_Core.inl.

References orb_.

Referenced by TAO_Profile::get_policies(), TAO_ServerRequest::orb(), resolve_rir(), and TAO_Profile::verify_orb_configuration().

00155 {
00156   return this->orb_;
00157 }

ACE_INLINE TAO_ORB_Parameters * TAO_ORB_Core::orb_params void   ) 
 

Accessor for the ORB parameters.

Definition at line 222 of file ORB_Core.inl.

References orb_params_.

Referenced by TAO_IIOP_Connection_Handler::close_connection(), codeset_manager(), TAO_IIOP_Acceptor::create_new_profile(), TAO_IIOP_Acceptor::create_profile(), TAO_IIOP_Acceptor::create_shared_profile(), TAO_Profile::create_tagged_profile(), TAO_IIOP_Profile::decode_profile(), TAO_Profile::encode(), endpoint_selector_factory(), TAO_Transport::handle_input_parse_data(), TAO_IIOP_Acceptor::hostname(), init(), TAO_IIOP_Connector::make_parallel_connection(), TAO_MCAST_Parser::multicast_query(), TAO_IIOP_Endpoint::next_filtered(), CORBA::ORB::object_to_string(), TAO_IIOP_Connection_Handler::open(), TAO_IIOP_Acceptor::open(), TAO_Acceptor_Registry::open_default(), TAO_Default_Thread_Lane_Resources_Manager::open_default_resources(), TAO_IIOP_Acceptor::open_i(), TAO_CORBALOC_Parser::parse_string(), TAO_IIOP_Acceptor::probe_interfaces(), TAO_GIOP_Message_Base::process_request_message(), resolve_rir(), CORBA::ORB::resolve_service(), root_poa(), TAO_ServerRequest::send_cached_reply(), set_endpoint_helper(), stub_factory(), TAO_ServerRequest::tao_send_reply_exception(), thread_lane_resources_manager(), TAO::Profile_Transport_Resolver::use_parallel_connect(), and TAO_Profile::verify_orb_configuration().

00223 {
00224   return &(this->orb_params_);
00225 }

ACE_INLINE const char * TAO_ORB_Core::orbid void   )  const
 

Return ORBid string.

Definition at line 335 of file ORB_Core.inl.

References orbid_.

00336 {
00337   return this->orbid_;
00338 }

ACE_INLINE TAO::ORBInitializer_Registry_Adapter * TAO_ORB_Core::orbinitializer_registry void   ) 
 

Return pointer to the orb initializer registry associated with this ORB core. Tries to load the PI library if it is not loaded yet

Definition at line 434 of file ORB_Core.inl.

References ACE_GUARD_RETURN, orbinitializer_registry_, orbinitializer_registry_i(), and TAO_SYNCH_MUTEX.

Referenced by CORBA::ORB_init().

00435 {
00436   ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, mon, this->lock_,
00437                     0);
00438   if (orbinitializer_registry_ == 0)
00439     {
00440       return this->orbinitializer_registry_i ();
00441     }
00442   return this->orbinitializer_registry_;
00443 }

TAO::ORBInitializer_Registry_Adapter * TAO_ORB_Core::orbinitializer_registry_i void   )  [protected]
 

Return pointer to the orb initializer registry associated with this ORB core.

Definition at line 1582 of file ORB_Core.cpp.

References ACE_DYNAMIC_SERVICE_DIRECTIVE, ACE_TEXT, configuration(), and orbinitializer_registry_.

Referenced by orbinitializer_registry().

01583 {
01584   // @todo The ORBInitializer_Registry is supposed to be a singleton.
01585 
01586   ACE_Service_Gestalt * const config = this->configuration ();
01587 
01588   // If not, lookup it up.
01589   this->orbinitializer_registry_ =
01590     ACE_Dynamic_Service<TAO::ORBInitializer_Registry_Adapter>::instance
01591       (config,
01592        ACE_TEXT ("ORBInitializer_Registry"));
01593 
01594 #if !defined (TAO_AS_STATIC_LIBS)
01595       // In case we build shared, try to load the PI Client library, in a
01596       // static build we just can't do this, so don't try it, lower layers
01597       // output an error then.
01598   if (this->orbinitializer_registry_ == 0)
01599     {
01600       config->process_directive (
01601         ACE_DYNAMIC_SERVICE_DIRECTIVE ("ORBInitializer_Registry",
01602                                        "TAO_PI",
01603                                        "_make_ORBInitializer_Registry",
01604                                        ""));
01605       this->orbinitializer_registry_ =
01606         ACE_Dynamic_Service<TAO::ORBInitializer_Registry_Adapter>::instance
01607           (config,
01608            ACE_TEXT ("ORBInitializer_Registry"));
01609     }
01610 #endif /* !TAO_AS_STATIC_LIBS */
01611 
01612   return this->orbinitializer_registry_;
01613 }

ACE_Allocator * TAO_ORB_Core::output_cdr_buffer_allocator void   ) 
 

This allocator is always TSS and has no locks. It is intended for allocating the buffers used in *outgoing* CDR streams.

Definition at line 2737 of file ORB_Core.cpp.

References lane_resources(), and TAO_Thread_Lane_Resources::output_cdr_buffer_allocator().

02738 {
02739   return this->lane_resources ().output_cdr_buffer_allocator ();
02740 }

ACE_Allocator * TAO_ORB_Core::output_cdr_dblock_allocator void   ) 
 

This allocator is always TSS and has no locks. It is intended for allocating the ACE_Data_Blocks used in *outgoing* CDR streams.

Definition at line 2730 of file ORB_Core.cpp.

References lane_resources(), and TAO_Thread_Lane_Resources::output_cdr_dblock_allocator().

Referenced by TAO_Profile::create_tagged_profile(), TAO_Profile::encode(), CORBA::ORB::object_to_string(), TAO_ServerRequest::send_cached_reply(), and TAO_ServerRequest::tao_send_reply_exception().

02731 {
02732 
02733   return this->lane_resources ().output_cdr_dblock_allocator ();
02734 }

ACE_Allocator * TAO_ORB_Core::output_cdr_msgblock_allocator void   ) 
 

This allocator is always TSS and has no locks. It is intended for allocating the ACE_Data_Blocks used in *outgoing* CDR streams.

Definition at line 2744 of file ORB_Core.cpp.

References lane_resources(), and TAO_Thread_Lane_Resources::output_cdr_msgblock_allocator().

Referenced by TAO_Profile::create_tagged_profile(), TAO_Profile::encode(), CORBA::ORB::object_to_string(), TAO_ServerRequest::send_cached_reply(), and TAO_ServerRequest::tao_send_reply_exception().

02745 {
02746   return this->lane_resources ().output_cdr_msgblock_allocator ();
02747 }

ACE_INLINE TAO_Parser_Registry * TAO_ORB_Core::parser_registry void   ) 
 

Get the IOR parser registry.

Definition at line 239 of file ORB_Core.inl.

References parser_registry_.

Referenced by CORBA::ORB::string_to_object().

00240 {
00241   return &this->parser_registry_;
00242 }

ACE_INLINE void TAO_ORB_Core::pi_current CORBA::Object_ptr  current  ) 
 

Set the pointer to the cached TAO::PICurrent object.

Definition at line 560 of file ORB_Core.inl.

References CORBA::Object_ptr, and pi_current_.

00561 {
00562   // Not duplicated since the ORB Core's "object_ref_table" already
00563   // contains a duplicate of the PICurrent object.
00564   this->pi_current_ = current;
00565 }

ACE_INLINE CORBA::Object_ptr TAO_ORB_Core::pi_current void   ) 
 

Return a pointer to the cached TAO::PICurrent object.

Definition at line 550 of file ORB_Core.inl.

References pi_current_.

00551 {
00552   // A pointer/reference to PICurrent is cached in the ORB Core since
00553   // it is accessed in the critical path (i.e. the request invocation
00554   // path).  Caching it prevents additional overhead to due object
00555   // resolution from occurring.
00556   return this->pi_current_;
00557 }

TAO_Adapter * TAO_ORB_Core::poa_adapter void   ) 
 

Get the adapter named "RootPOA" and cache the result, this is an optimization for the POA.

Definition at line 1816 of file ORB_Core.cpp.

References ACE_GUARD_RETURN, adapter_registry_, TAO_Adapter_Registry::find_adapter(), poa_adapter_, and TAO_SYNCH_MUTEX.

Referenced by root_poa().

01817 {
01818   if (this->poa_adapter_ == 0)
01819     {
01820       ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->lock_, 0);
01821       if (this->poa_adapter_ == 0)
01822         {
01823           this->poa_adapter_ =
01824             this->adapter_registry_.find_adapter ("RootPOA");
01825         }
01826     }
01827   return this->poa_adapter_;
01828 }

CORBA::Object_ptr TAO_ORB_Core::poa_current void   ) 
 

Todo:
In the future this hook should change, instead of hardcoding the object we should add a "Resolver" to the ORB, so the "POACurrent" object returns a per-ORB object.
Similarly, each ORB should implement the TSS pattern to put the POA_Current_Impl in a void* slot. The current approach *does* decouple the POA from the ORB, but it cannot add new adapters or other components transparently.

ACE_INLINE TAO_Policy_Current & TAO_ORB_Core::policy_current void   ) 
 

Accesors to the policy current, this object should be kept in TSS storage. The POA has to reset the policy current object on every upcall.

Definition at line 498 of file ORB_Core.inl.

References policy_current_.

Referenced by get_cached_policy_including_current(), get_policy_including_current(), and CORBA::ORB::resolve_policy_current().

00499 {
00500   return *this->policy_current_;
00501 }

ACE_INLINE TAO::PolicyFactory_Registry_Adapter * TAO_ORB_Core::policy_factory_registry void   ) 
 

Return pointer to the policy factory registry associated with this ORB core.

Definition at line 446 of file ORB_Core.inl.

References ACE_GUARD_RETURN, policy_factory_registry_, policy_factory_registry_i(), and TAO_SYNCH_MUTEX.

Referenced by CORBA::ORB::_create_policy(), and CORBA::ORB::create_policy().

00447 {
00448   ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, mon, this->lock_,
00449                     0);
00450   if (policy_factory_registry_ == 0)
00451     {
00452       return this->policy_factory_registry_i ();
00453     }
00454   return this->policy_factory_registry_;
00455 }

TAO::PolicyFactory_Registry_Adapter * TAO_ORB_Core::policy_factory_registry_i void   )  [protected]
 

Return pointer to the policy factory registry associated with this ORB core.

Definition at line 1551 of file ORB_Core.cpp.

References ACE_DYNAMIC_SERVICE_DIRECTIVE, ACE_TEXT, configuration(), TAO_PolicyFactory_Registry_Factory::create(), policy_factory_registry_, and ACE_Service_Gestalt::process_directive().

Referenced by policy_factory_registry().

01552 {
01553 
01554   TAO_PolicyFactory_Registry_Factory *loader =
01555     ACE_Dynamic_Service<TAO_PolicyFactory_Registry_Factory>::instance
01556       (this->configuration (),
01557        ACE_TEXT ("PolicyFactory_Loader"));
01558 
01559   if (loader == 0)
01560     {
01561       this->configuration ()->process_directive (
01562         ACE_DYNAMIC_SERVICE_DIRECTIVE("PolicyFactory_Loader",
01563                                       "TAO_PI",
01564                                       "_make_TAO_PolicyFactory_Loader",
01565                                       ""));
01566       loader =
01567         ACE_Dynamic_Service<TAO_PolicyFactory_Registry_Factory>::instance
01568           (this->configuration (),
01569            ACE_TEXT ("PolicyFactory_Loader"));
01570     }
01571 
01572   if (loader != 0)
01573     {
01574       this->policy_factory_registry_ =
01575         loader->create ();
01576     }
01577 
01578   return this->policy_factory_registry_;
01579 }

ACE_INLINE TAO_Policy_Manager * TAO_ORB_Core::policy_manager void   ) 
 

Return the Policy_Manager for this ORB.

Definition at line 249 of file ORB_Core.inl.

References policy_manager_.

Referenced by get_cached_policy(), get_policy(), and CORBA::ORB::resolve_policy_manager().

00250 {
00251   return this->policy_manager_;
00252 }

ACE_INLINE TAO_ProtocolFactorySet * TAO_ORB_Core::protocol_factories void   ) 
 

Get the protocol factories.

Definition at line 233 of file ORB_Core.inl.

References protocol_factories(), and TAO_OC_RETRIEVE.

Referenced by TAO_Connector_Registry::open(), TAO_Acceptor_Registry::open(), TAO_Acceptor_Registry::open_default(), and protocol_factories().

00234 {
00235   return TAO_OC_RETRIEVE (protocol_factories);
00236 }

TAO_Protocols_Hooks* TAO_ORB_Core::protocols_hooks void   ) 
 

Returns pointer to the Protocols_Hooks.

ACE_Reactor * TAO_ORB_Core::reactor void   ) 
 

Wrappers that forward the request to the concurrency strategy.

Definition at line 2824 of file ORB_Core.cpp.

References leader_follower(), and TAO_Leader_Follower::reactor().

Referenced by TAO_Connection_Handler::close_connection_eh(), TAO::Transport_Cache_Manager::find_transport(), TAO_Resume_Handle::handle_input_return_value_hook(), init(), TAO_Transport::notify_reactor(), TAO_Transport::register_handler(), TAO_Leader_Follower::reset_client_thread(), TAO_Resume_Handle::resume_handle(), run(), TAO_Leader_Follower::set_client_thread(), TAO_Wait_On_Read::wait(), TAO_Wait_On_Reactor::wait(), and CORBA::ORB::work_pending().

02825 {
02826   return this->leader_follower ().reactor ();
02827 }

int TAO_ORB_Core::register_handle ACE_HANDLE  handle  ) 
 

Register the handle of an open connection with the ORB Core handle set. This handle set will be used to explicitly remove corresponding event handlers from the reactor.

CORBA::Long TAO_ORB_Core::reinitialize_object TAO_Stub stub  ) 
 

Reinitialise a stub after the effective profile has changed. This will happen after a location forward has been received or if a location forward supplied new target subsequently fails.

Definition at line 1966 of file ORB_Core.cpp.

References TAO_Stub::base_profiles(), TAO_Stub::forward_profiles(), and initialize_object_i().

Referenced by CORBA::Object::_set_policy_overrides().

01967 {
01968   return initialize_object_i (stub, stub->forward_profiles ()
01969                                     ? *(stub->forward_profiles ())
01970                                     : stub->base_profiles ());
01971 }

int TAO_ORB_Core::remove_handle ACE_HANDLE  handle  ) 
 

Remove from the ORB Core's handle set so that it isn't included in the set that is passed to the reactor upon ORB destruction.

void TAO_ORB_Core::request_dispatcher TAO_Request_Dispatcher rd  ) 
 

Set a new request dispatcher. The ORB Core retains ownership of the request dispatcher once it gets it. Currently, this only gets called at initialization.

Definition at line 1840 of file ORB_Core.cpp.

References request_dispatcher_.

01841 {
01842   // Assume ownership of the request dispatcher.
01843   TAO_Request_Dispatcher *tmp = this->request_dispatcher_;
01844   this->request_dispatcher_ = request_dispatcher;
01845   delete tmp;
01846 }

ACE_INLINE TAO_Request_Dispatcher * TAO_ORB_Core::request_dispatcher void   ) 
 

Return the current request dispatcher strategy.

Definition at line 166 of file ORB_Core.inl.

References request_dispatcher_.

Referenced by TAO::Collocated_Invocation::invoke(), TAO_GIOP_Message_Base::process_locate_request(), and TAO_GIOP_Message_Base::process_request().

00167 {
00168   return this->request_dispatcher_;
00169 }

ACE_INLINE CORBA::Object_ptr TAO_ORB_Core::resolve_codecfactory void   ) 
 

Resolve the CodecFactory DLL.

Definition at line 387 of file ORB_Core.inl.

References CORBA::Object::_duplicate(), ACE_GUARD_RETURN, CORBA::is_nil(), resolve_codecfactory_i(), and TAO_SYNCH_MUTEX.

Referenced by CORBA::ORB::resolve_initial_references().

00388 {
00389   ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, mon, this->lock_,
00390                     CORBA::Object::_nil ());
00391   if (CORBA::is_nil (this->codec_factory_))
00392     {
00393       this->resolve_codecfactory_i ();
00394     }
00395   return CORBA::Object::_duplicate (this->codec_factory_);
00396 }

void TAO_ORB_Core::resolve_codecfactory_i void   )  [protected]
 

Obtain and cache the codec factory object reference.

Definition at line 2375 of file ORB_Core.cpp.

References ACE_DYNAMIC_SERVICE_DIRECTIVE, ACE_TEXT, codec_factory_, configuration(), TAO_Object_Loader::create_object(), and ACE_Service_Gestalt::process_directive().

Referenced by resolve_codecfactory().

02376 {
02377   TAO_Object_Loader *loader =
02378     ACE_Dynamic_Service<TAO_Object_Loader>::instance
02379       (this->configuration (),
02380        ACE_TEXT ("CodecFactory_Loader"));
02381 
02382   if (loader == 0)
02383     {
02384       this->configuration()->process_directive
02385         (ACE_DYNAMIC_SERVICE_DIRECTIVE("CodecFactory",
02386                                        "TAO_CodecFactory",
02387                                        "_make_TAO_CodecFactory_Loader",
02388                                        ""));
02389       loader =
02390         ACE_Dynamic_Service<TAO_Object_Loader>::instance
02391           (this->configuration (), ACE_TEXT ("CodecFactory_Loader"));
02392     }
02393 
02394   if (loader != 0)
02395     {
02396       this->codec_factory_ =
02397         loader->create_object (this->orb_, 0, 0);
02398     }
02399 }

ACE_INLINE CORBA::Object_ptr TAO_ORB_Core::resolve_compression_manager void   ) 
 

Resolve the Compression DLL.

Definition at line 399 of file ORB_Core.inl.

References CORBA::Object::_duplicate(), ACE_GUARD_RETURN, CORBA::is_nil(), resolve_compression_manager_i(), and TAO_SYNCH_MUTEX.

Referenced by CORBA::ORB::resolve_initial_references().

00400 {
00401   ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, mon, this->lock_,
00402                     CORBA::Object::_nil ());
00403   if (CORBA::is_nil (this->compression_manager_))
00404     {
00405       this->resolve_compression_manager_i ();
00406     }
00407   return CORBA::Object::_duplicate (this->compression_manager_);
00408 }

void TAO_ORB_Core::resolve_compression_manager_i void   )  [protected]
 

Obtain and cache the compression manager object reference.

Definition at line 2402 of file ORB_Core.cpp.

References ACE_DYNAMIC_SERVICE_DIRECTIVE, ACE_TEXT, compression_manager_, configuration(), TAO_Object_Loader::create_object(), and ACE_Service_Gestalt::process_directive().

Referenced by resolve_compression_manager().

02403 {
02404   TAO_Object_Loader *loader =
02405     ACE_Dynamic_Service<TAO_Object_Loader>::instance
02406       (this->configuration (),
02407        ACE_TEXT ("Compression_Loader"));
02408 
02409   if (loader == 0)
02410     {
02411       this->configuration()->process_directive
02412         (ACE_DYNAMIC_SERVICE_DIRECTIVE("Compression",
02413                                        "TAO_Compression",
02414                                        "_make_TAO_Compression_Loader",
02415                                        ""));
02416       loader =
02417         ACE_Dynamic_Service<TAO_Object_Loader>::instance
02418           (this->configuration (), ACE_TEXT ("Compression_Loader"));
02419     }
02420 
02421   if (loader != 0)
02422     {
02423       this->compression_manager_ = loader->create_object (this->orb_, 0, 0);
02424     }
02425 }

ACE_INLINE CORBA::Object_ptr TAO_ORB_Core::resolve_dynanyfactory void   ) 
 

Resolve the Dynamic Any Factory.

Definition at line 458 of file ORB_Core.inl.

References CORBA::Object::_duplicate(), ACE_GUARD_RETURN, CORBA::is_nil(), resolve_dynanyfactory_i(), and TAO_SYNCH_MUTEX.

Referenced by CORBA::ORB::resolve_initial_references().

00459 {
00460   ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, mon, this->lock_,
00461                     CORBA::Object::_nil ());
00462   if (CORBA::is_nil (this->dynany_factory_))
00463     {
00464       this->resolve_dynanyfactory_i ();
00465     }
00466   return CORBA::Object::_duplicate (this->dynany_factory_);
00467 }

void TAO_ORB_Core::resolve_dynanyfactory_i void   )  [protected]
 

Obtain and cache the dynamic any factory object reference.

Definition at line 2488 of file ORB_Core.cpp.

References ACE_DYNAMIC_SERVICE_DIRECTIVE, ACE_TEXT, configuration(), TAO_Object_Loader::create_object(), dynany_factory_, and ACE_Service_Gestalt::process_directive().

Referenced by resolve_dynanyfactory().

02489 {
02490   TAO_Object_Loader *loader =
02491     ACE_Dynamic_Service<TAO_Object_Loader>::instance
02492       (this->configuration (),
02493        ACE_TEXT ("DynamicAny_Loader"));
02494 
02495   if (loader == 0)
02496     {
02497       this->configuration ()->process_directive
02498         (ACE_DYNAMIC_SERVICE_DIRECTIVE("DynamicAny_Loader",
02499                                        "TAO_DynamicAny",
02500                                        "_make_TAO_DynamicAny_Loader",
02501                                        ""));
02502       loader =
02503         ACE_Dynamic_Service<TAO_Object_Loader>::instance
02504         (this->configuration (),
02505          ACE_TEXT ("DynamicAny_Loader"));
02506     }
02507 
02508   if (loader != 0)
02509     {
02510       this->dynany_factory_ = loader->create_object (this->orb_, 0, 0);
02511     }
02512 }

ACE_INLINE CORBA::Object_ptr TAO_ORB_Core::resolve_ior_manipulation void   ) 
 

Resolve the IOR Manipulation reference for this ORB.

Definition at line 470 of file ORB_Core.inl.

References CORBA::Object::_duplicate(), ACE_GUARD_RETURN, CORBA::is_nil(), resolve_iormanipulation_i(), and TAO_SYNCH_MUTEX.

Referenced by CORBA::ORB::resolve_initial_references().

00471 {
00472   ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, mon, this->lock_,
00473                     CORBA::Object::_nil ());
00474   if (CORBA::is_nil (this->ior_manip_factory_))
00475     {
00476       this->resolve_iormanipulation_i ();
00477     }
00478   return CORBA::Object::_duplicate (this->ior_manip_factory_);
00479 }

ACE_INLINE CORBA::Object_ptr TAO_ORB_Core::resolve_ior_table void   ) 
 

Resolve the IOR Table reference for this ORB.

Definition at line 482 of file ORB_Core.inl.

References CORBA::Object::_duplicate(), ACE_GUARD_RETURN, CORBA::is_nil(), resolve_ior_table_i(), and TAO_SYNCH_MUTEX.

Referenced by CORBA::ORB::resolve_initial_references().

00483 {
00484   ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, mon, this->lock_,
00485                     CORBA::Object::_nil ());
00486   if (CORBA::is_nil (this->ior_table_))
00487     {
00488       this->resolve_ior_table_i ();
00489     }
00490   return CORBA::Object::_duplicate (this->ior_table_);
00491 }

void TAO_ORB_Core::resolve_ior_table_i void   )  [private]
 

Obtain and cache the dynamic any factory object reference.

Definition at line 2541 of file ORB_Core.cpp.

References TAO_Pseudo_Var_T< T >::_retn(), ACE_DYNAMIC_SERVICE_DIRECTIVE, ACE_TEXT, adapter_registry_, configuration(), TAO_Adapter_Factory::create(), ACE_Auto_Basic_Ptr< X >::get(), TAO_Adapter_Registry::insert(), ior_table_, CORBA::Object_var, ACE_Service_Gestalt::process_directive(), and ACE_Auto_Basic_Ptr< X >::release().

Referenced by resolve_ior_table().

02542 {
02543   TAO_Adapter_Factory *factory =
02544     ACE_Dynamic_Service<TAO_Adapter_Factory>::instance
02545       (this->configuration (),
02546        ACE_TEXT ("TAO_IORTable"));
02547 
02548   if (factory == 0)
02549     {
02550       this->configuration ()->process_directive
02551         (ACE_DYNAMIC_SERVICE_DIRECTIVE("TAO_IORTable",
02552                                        "TAO_IORTable",
02553                                        "_make_TAO_Table_Adapter_Factory",
02554                                        ""));
02555       factory =
02556         ACE_Dynamic_Service<TAO_Adapter_Factory>::instance
02557           (this->configuration (), ACE_TEXT ("TAO_IORTable"));
02558     }
02559 
02560   if (factory != 0)
02561     {
02562       ACE_Auto_Ptr <TAO_Adapter> iortable_adapter (factory->create (this));
02563       iortable_adapter->open ();
02564 
02565       CORBA::Object_var tmp_root = iortable_adapter->root ();
02566 
02567       this->adapter_registry_.insert (iortable_adapter.get ());
02568 
02569       // It is now (exception) safe to release ownership from the auto pointers
02570       this->ior_table_= tmp_root._retn ();
02571       iortable_adapter.release ();
02572     }
02573 }

void TAO_ORB_Core::resolve_iormanipulation_i void   )  [protected]
 

Obtain and cache the IORManipulation factory object reference.

Definition at line 2515 of file ORB_Core.cpp.

References ACE_DYNAMIC_SERVICE_DIRECTIVE, ACE_TEXT, configuration(), TAO_Object_Loader::create_object(), ior_manip_factory_, and ACE_Service_Gestalt::process_directive().

Referenced by resolve_ior_manipulation().

02516 {
02517   TAO_Object_Loader *loader =
02518     ACE_Dynamic_Service<TAO_Object_Loader>::instance
02519       (this->configuration (),
02520        ACE_TEXT ("IORManip_Loader"));
02521 
02522   if (loader == 0)
02523     {
02524       this->configuration()->process_directive
02525         (ACE_DYNAMIC_SERVICE_DIRECTIVE("IORManip_Loader",
02526                                        "TAO_IORManip",
02527                                        "_make_TAO_IORManip_Loader",
02528                                        ""));
02529       loader =
02530         ACE_Dynamic_Service<TAO_Object_Loader>::instance
02531           (this->configuration (), ACE_TEXT ("IORManip_Loader"));
02532     }
02533 
02534   if (loader != 0)
02535     {
02536       this->ior_manip_factory_ = loader->create_object (this->orb_, 0, 0);
02537     }
02538 }

ACE_INLINE CORBA::Object_ptr TAO_ORB_Core::resolve_picurrent void   ) 
 

Resolve the PICurrent.

Definition at line 373 of file ORB_Core.inl.

References CORBA::Object::_duplicate(), ACE_GUARD_RETURN, CORBA::is_nil(), resolve_picurrent_i(), and TAO_SYNCH_MUTEX.

Referenced by CORBA::ORB::resolve_initial_references().

00374 {
00375   ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, mon, this->lock_,
00376                     CORBA::Object::_nil ());
00377   if (CORBA::is_nil (this->pi_current_))
00378     {
00379       this->resolve_picurrent_i ();
00380     }
00381   return CORBA::Object::_duplicate (this->pi_current_);
00382 }

void TAO_ORB_Core::resolve_picurrent_i void   )  [protected]
 

Obtain and cache the picurrent factory object reference.

Definition at line 2457 of file ORB_Core.cpp.

References ACE_DYNAMIC_SERVICE_DIRECTIVE, ACE_TEXT, configuration(), TAO_Object_Loader::create_object(), CORBA::Object_ptr, pi_current_, and ACE_Service_Gestalt::process_directive().

Referenced by resolve_picurrent().

02458 {
02459   TAO_Object_Loader *loader =
02460     ACE_Dynamic_Service<TAO_Object_Loader>::instance
02461       (this->configuration (),
02462        ACE_TEXT ("PICurrent_Loader"));
02463 
02464   if (loader == 0)
02465     {
02466       this->configuration ()->process_directive
02467         (ACE_DYNAMIC_SERVICE_DIRECTIVE("PICurrent_Loader",
02468                                        "TAO_PI",
02469                                        "_make_TAO_PICurrent_Loader",
02470                                        ""));
02471       loader =
02472         ACE_Dynamic_Service<TAO_Object_Loader>::instance
02473           (this->configuration (), ACE_TEXT ("PICurrent_Loader"));
02474     }
02475 
02476   if (loader != 0)
02477     {
02478       CORBA::Object_ptr pi = loader->create_object (this->orb_, 0, 0);
02479 
02480       this->pi_current_ = pi;
02481     }
02482 }

ACE_INLINE CORBA::Object_ptr TAO_ORB_Core::resolve_poa_current void   ) 
 

Resolve POA Current.

Definition at line 506 of file ORB_Core.inl.

References CORBA::Object::_duplicate(), ACE_GUARD_RETURN, CORBA::is_nil(), resolve_poa_current_i(), and TAO_SYNCH_MUTEX.

Referenced by CORBA::ORB::resolve_initial_references().

00507 {
00508   ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, mon, this->lock_,
00509                     CORBA::Object::_nil ());
00510   if (CORBA::is_nil (this->poa_current_.in ()))
00511     {
00512       this->resolve_poa_current_i ();
00513     }
00514   return CORBA::Object::_duplicate (this->poa_current_.in ());
00515 }

void TAO_ORB_Core::resolve_poa_current_i void   )  [protected]
 

Obtain and cache the poa current.

Definition at line 2428 of file ORB_Core.cpp.

References ACE_DYNAMIC_SERVICE_DIRECTIVE, ACE_TEXT, configuration(), TAO_Object_Loader::create_object(), poa_current_, and ACE_Service_Gestalt::process_directive().

Referenced by resolve_poa_current().

02429 {
02430   TAO_Object_Loader *loader =
02431     ACE_Dynamic_Service<TAO_Object_Loader>::instance
02432       (this->configuration(),
02433        ACE_TEXT ("TAO_POA_Current_Factory"));
02434 
02435   if (loader == 0)
02436     {
02437       this->configuration()->process_directive
02438         (ACE_DYNAMIC_SERVICE_DIRECTIVE("TAO_POA_Current_Factory",
02439                                        "TAO_PortableServer",
02440                                        "_make_TAO_POA_Current_Factory",
02441                                        ""));
02442       loader =
02443         ACE_Dynamic_Service<TAO_Object_Loader>::instance
02444           (this->configuration(), ACE_TEXT ("TAO_POA_Current_Factory"));
02445     }
02446 
02447   if (loader != 0)
02448     {
02449       this->poa_current_ = loader->create_object (this->orb_, 0, 0);
02450     }
02451 }

CORBA::Object_ptr TAO_ORB_Core::resolve_rir const char *  name  ) 
 

Resolve an initial reference via the -ORBInitRef and.

Definition at line 2597 of file ORB_Core.cpp.

References CORBA::Object::_nil(), ACE_CString, connector_registry(), TAO_ORB_Parameters::default_init_ref(), TAO::String_var< charT >::in(), TAO_Connector_Registry::object_key_delimiter(), orb(), orb_params(), CORBA::ORB::string_to_object(), CORBA::String_var, ACE_OS::strlen(), and ACE_OS::strncmp().

Referenced by CORBA::ORB::resolve_initial_references().

02598 {
02599   // Get the table of initial references specified through
02600   // -ORBInitRef.
02601   ACE_CString ior;
02602   ACE_CString object_id ((const char *) name);
02603 
02604   // Get the list of initial reference prefixes specified through
02605   // -ORBDefaultInitRef.
02606   CORBA::String_var default_init_ref =
02607     this->orb_params ()->default_init_ref ();
02608 
02609   // Check if a DefaultInitRef was specified.
02610   if (ACE_OS::strlen (default_init_ref.in ()) != 0)
02611     {
02612       static const char corbaloc_prefix[] = "corbaloc:";
02613       static const char mcast_prefix[] = "mcast:";
02614       char object_key_delimiter = 0;
02615 
02616       ACE_CString list_of_profiles (default_init_ref.in ());
02617 
02618       // Check if the protocol is corbaloc: or mcast:.
02619       // If it is, set the object_key_delimiter.
02620       if ((ACE_OS::strncmp (default_init_ref.in (),
02621                             corbaloc_prefix,
02622                             sizeof corbaloc_prefix -1) == 0) ||
02623           (ACE_OS::strncmp (default_init_ref.in (),
02624                             mcast_prefix,
02625                             sizeof mcast_prefix -1) == 0))
02626         {
02627           object_key_delimiter = '/';
02628         }
02629       else
02630         {
02631           TAO_Connector_Registry *conn_reg = this->connector_registry ();
02632 
02633           // Obtain the appropriate object key delimiter for the
02634           // specified protocol.
02635           object_key_delimiter =
02636             conn_reg->object_key_delimiter (list_of_profiles.c_str ());
02637         }
02638 
02639       // Make sure that the default initial reference doesn't end
02640       // with the object key delimiter character.
02641       if (list_of_profiles[list_of_profiles.length() - 1] !=
02642           object_key_delimiter)
02643             list_of_profiles += ACE_CString (object_key_delimiter);
02644 
02645       list_of_profiles += object_id;
02646 
02647       return this->orb ()->string_to_object (list_of_profiles.c_str ());
02648     }
02649 
02650   return CORBA::Object::_nil ();
02651 }

ACE_INLINE CORBA::Object_ptr TAO_ORB_Core::resolve_rt_orb void   ) 
 

Resolve the RT ORB reference for this ORB.

Definition at line 529 of file ORB_Core.inl.

References CORBA::Object::_duplicate(), ACE_GUARD_RETURN, CORBA::is_nil(), object_ref_table(), TAO_Object_Ref_Table::resolve_initial_reference(), rt_orb_, TAO_OBJID_RTORB, and TAO_SYNCH_MUTEX.

00530 {
00531   if (CORBA::is_nil (this->rt_orb_.in ()))
00532     {
00533       ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, mon, this->lock_,
00534                         CORBA::Object::_nil ());
00535       if (CORBA::is_nil (this->rt_orb_.in ()))
00536         {
00537           // Save a reference to the priority mapping manager.
00538           this->rt_orb_ =
00539               this->object_ref_table ().resolve_initial_reference (
00540               TAO_OBJID_RTORB);
00541         }
00542     }
00543 
00544   return CORBA::Object::_duplicate (this->rt_orb_.in ());
00545 }

ACE_INLINE CORBA::Object_ptr TAO_ORB_Core::resolve_typecodefactory void   ) 
 

Resolve the TypeCodeFactory DLL.

Definition at line 359 of file ORB_Core.inl.

References CORBA::Object::_duplicate(), ACE_GUARD_RETURN, CORBA::is_nil(), resolve_typecodefactory_i(), and TAO_SYNCH_MUTEX.

Referenced by CORBA::ORB::resolve_initial_references().

00360 {
00361   ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, mon, this->lock_,
00362                     CORBA::Object::_nil ());
00363   if (CORBA::is_nil (this->typecode_factory_))
00364     {
00365       this->resolve_typecodefactory_i ();
00366     }
00367   return CORBA::Object::_duplicate (this->typecode_factory_);
00368 }

void TAO_ORB_Core::resolve_typecodefactory_i void   )  [protected]
 

Obtain and cache the typecode factory object reference.

Definition at line 2342 of file ORB_Core.cpp.

References ACE_DYNAMIC_SERVICE_DIRECTIVE, ACE_ERROR, ACE_TEXT, configuration(), TAO_Object_Loader::create_object(), LM_ERROR, ACE_Service_Gestalt::process_directive(), and typecode_factory_.

Referenced by resolve_typecodefactory().

02343 {
02344   TAO_Object_Loader *loader =
02345     ACE_Dynamic_Service<TAO_Object_Loader>::instance
02346       (this->configuration (),
02347        ACE_TEXT ("TypeCodeFactory_Loader"));
02348 
02349   if (loader == 0)
02350     {
02351       this->configuration ()->process_directive
02352         (ACE_DYNAMIC_SERVICE_DIRECTIVE("TypeCodeFactory",
02353                                        "TAO_TypeCodeFactory",
02354                                        "_make_TAO_TypeCodeFactory_Loader",
02355                                        ""));
02356       loader =
02357         ACE_Dynamic_Service<TAO_Object_Loader>::instance
02358         (this->configuration (),
02359          ACE_TEXT ("TypeCodeFactory_Loader"));
02360 
02361       if (loader == 0)
02362         {
02363           ACE_ERROR ((LM_ERROR,
02364                       ACE_TEXT ("(%P|%t) Unable to instantiate ")
02365                       ACE_TEXT ("a TypeCodeFactory_Loader\n")));
02366           throw ::CORBA::ORB::InvalidName ();
02367         }
02368     }
02369 
02370   this->typecode_factory_ =
02371     loader->create_object (this->orb_, 0, 0);
02372 }

TAO_Resource_Factory * TAO_ORB_Core::resource_factory void   ) 
 

Returns pointer to the resource factory.

Definition at line 1485 of file ORB_Core.cpp.

References ACE_CString, ACE_TEXT_CHAR_TO_TCHAR, configuration(), TAO_ORB_Core_Static_Resources::instance(), resource_factory_, and TAO_ORB_Core_Static_Resources::resource_factory_name_.

Referenced by TAO_Thread_Lane_Resources::acceptor_registry(), TAO_Thread_Lane_Resources::cleanup_rw_transports(), codeset_manager(), TAO_Thread_Lane_Resources::connector_registry(), create_input_cdr_data_block(), TAO::demarshal_sequence(), fragmentation_strategy(), init(), TAO::ObjectKey_Table::init(), locking_strategy(), CORBA::Object::Object(), TAO_Parser_Registry::open(), operator>>(), TAO_Leader_Follower::reactor(), TAO_Thread_Lane_Resources::resource_factory(), TAO_Leader_Follower::set_client_thread(), TAO_Thread_Lane_Resources::shutdown_reactor(), TAO_Asynch_Reply_Dispatcher_Base::TAO_Asynch_Reply_Dispatcher_Base(), TAO_Connection_Handler::TAO_Connection_Handler(), TAO_Thread_Lane_Resources_Manager::TAO_Thread_Lane_Resources_Manager(), TAO::Transport_Cache_Manager::Transport_Cache_Manager(), and TAO_Leader_Follower::~TAO_Leader_Follower().

01486 {
01487   // Check if there is a cached reference.
01488   if (this->resource_factory_ != 0)
01489     {
01490       return this->resource_factory_;
01491     }
01492 
01493   // Look in the service repository for an instance.
01494   ACE_CString &resource_factory_name =
01495     TAO_ORB_Core_Static_Resources::instance ()->resource_factory_name_;
01496 
01497   this->resource_factory_ =
01498     ACE_Dynamic_Service<TAO_Resource_Factory>::instance
01499       (this->configuration (),
01500        ACE_TEXT_CHAR_TO_TCHAR (resource_factory_name.c_str()));
01501 
01502   return this->resource_factory_;
01503 }

CORBA::Object_ptr TAO_ORB_Core::root_poa void   ) 
 

Return the RootPOA, or try to load it if not initialized already.

Definition at line 1760 of file ORB_Core.cpp.

References CORBA::Object::_duplicate(), CORBA::Object::_nil(), ACE_GUARD_RETURN, ACE_TEXT_CHAR_TO_TCHAR, adapter_registry_, configuration(), TAO_Adapter_Factory::create(), ACE_Auto_Basic_Ptr< X >::get(), TAO_Adapter_Registry::insert(), CORBA::is_nil(), orb_params(), poa_adapter(), TAO_ORB_Parameters::poa_factory_name(), ACE_Service_Gestalt::process_directive(), ACE_Auto_Basic_Ptr< X >::release(), root_poa_, and TAO_SYNCH_MUTEX.

Referenced by CORBA::ORB::resolve_initial_references().

01761 {
01762   // DCL ..
01763   if (CORBA::is_nil (this->root_poa_.in ()))
01764     {
01765 
01766       // Making sure the initialization process in the current thread uses
01767       // the correct service repository (ours), instead of the global one.
01768       ACE_Service_Config_Guard scg (this->configuration ());
01769 
01770       TAO_Adapter_Factory *factory =
01771         ACE_Dynamic_Service<TAO_Adapter_Factory>::instance
01772           (this->configuration (),
01773           this->orb_params ()->poa_factory_name ());
01774 
01775       if (factory == 0)
01776         {
01777           this->configuration()->process_directive (
01778            ACE_TEXT_CHAR_TO_TCHAR (
01779              this->orb_params ()->poa_factory_directive ()));
01780 
01781           factory =
01782             ACE_Dynamic_Service<TAO_Adapter_Factory>::instance
01783               (this->configuration (),
01784               this->orb_params ()->poa_factory_name ());
01785         }
01786 
01787       if (factory == 0)
01788         {
01789           return CORBA::Object::_nil ();
01790         }
01791 
01792       ACE_GUARD_RETURN (TAO_SYNCH_MUTEX,
01793                         monitor,
01794                         this->open_lock_,
01795                         0);
01796 
01797       if (CORBA::is_nil (this->root_poa_.in ()))
01798         {
01799           auto_ptr<TAO_Adapter> poa_adapter (factory->create (this));
01800 
01801           poa_adapter->open ();
01802 
01803           // @@ Not exception safe
01804           this->root_poa_ = poa_adapter->root ();
01805 
01806           this->adapter_registry_.insert (poa_adapter.get ());
01807 
01808           poa_adapter.release ();
01809         }
01810     }
01811 
01812   return CORBA::Object::_duplicate (this->root_poa_.in ());
01813 }

int TAO_ORB_Core::run ACE_Time_Value tv,
int  perform_work
 

Run the event loop.

Definition at line 2072 of file ORB_Core.cpp.

References ACE_DEBUG, ACE_TEXT, TAO_Server_Strategy_Factory::activate_server_connections(), ETIME, TAO_LF_Event_Loop_Thread_Helper::event_loop_return(), ACE_Reactor::handle_events(), has_shutdown(), leader_follower(), lf_strategy(), LM_DEBUG, ACE_Reactor::owner(), reactor(), server_factory_, TAO_debug_level, and ACE_Thread_Manager::wait().

Referenced by TAO_Reactive_Flushing_Strategy::flush_message(), TAO_Reactive_Flushing_Strategy::flush_transport(), TAO_Leader_Follower_Flushing_Strategy::flush_transport(), CORBA::ORB::perform_work(), CORBA::ORB::run(), and TAO_Reactive_Connect_Strategy::wait_i().

02073 {
02074   // ORB::run may be called from a thread, different from the one that
02075   // did the ORB_init, consequently we must establish the Service
02076   // Gestalt, this thread will consider "global"
02077 
02078   ACE_Service_Config_Guard use_orbs (this->configuration());
02079 
02080   if (TAO_debug_level > 2)
02081     {
02082       ACE_DEBUG ((LM_DEBUG,
02083                   ACE_TEXT ("TAO (%P|%t) - ORB_Core::run, ")
02084                   ACE_TEXT ("start [%s]\n"),
02085                   perform_work?ACE_TEXT("perform_work"):ACE_TEXT("run")));
02086     }
02087 
02088   // Fetch the Reactor
02089   ACE_Reactor *r = this->reactor ();
02090 
02091   int result = 1;
02092   // 1 to detect that nothing went wrong
02093 
02094   // Loop handling client requests until the ORB is shutdown.
02095 
02096   // We could use the leader-follower lock to check for the state
02097   // if this variable or use the lock <create_event_loop_lock> in
02098   // the server strategy factory.
02099   // We don't need to do this because we use the Reactor
02100   // mechanisms to shutdown in a thread-safe way.
02101 
02102   while (this->has_shutdown () == false)
02103     {
02104       // Every time we perform an interation we have to become the
02105       // leader again, because it is possible that a client has
02106       // acquired the leader role...
02107       TAO_Leader_Follower &leader_follower =
02108         this->leader_follower ();
02109 
02110       TAO_LF_Strategy &lf_strategy =
02111         this->lf_strategy ();
02112 
02113       TAO_LF_Event_Loop_Thread_Helper helper (leader_follower,
02114                                               lf_strategy,
02115                                               tv);
02116       result = helper.event_loop_return ();
02117       if (result != 0)
02118         {
02119           if (errno == ETIME)
02120             return 0;
02121           else
02122             return result;
02123         }
02124 
02125       // Set the owning thread of the Reactor to the one which we're
02126       // currently in.  This is necessary b/c it's possible that the
02127       // application is calling us from a thread other than that in which
02128       // the Reactor's CTOR (which sets the owner) was called.
02129       //
02130       // We need to do this on every iteration because the reactor may be
02131       // acquired by one of the client threads in the LF waiting
02132       // strategy
02133       r->owner (ACE_Thread::self ());
02134 
02135       if (TAO_debug_level > 2)
02136         {
02137           ACE_DEBUG ((LM_DEBUG,
02138                       ACE_TEXT ("TAO (%P|%t) - ORB_Core::run, ")
02139                       ACE_TEXT ( "calling handle_events()\n")));
02140         }
02141 
02142       result = r->handle_events (tv);
02143 
02144       if (TAO_debug_level > 2)
02145         {
02146           ACE_DEBUG ((LM_DEBUG,
02147                       ACE_TEXT ("TAO (%P|%t) - ORB_Core::run, ")
02148                       ACE_TEXT ("handle_events() returns %d\n"),
02149                       result));
02150         }
02151 
02152       if (result == -1)
02153         {
02154           // An error, terminate the loop
02155           break;
02156         }
02157       if (result == 0
02158           && tv != 0
02159           && *tv == ACE_Time_Value::zero)
02160         {
02161           // A timeout, terminate the loop...
02162           break;
02163         }
02164 
02165       if (perform_work)
02166         {
02167           // This is running on behalf of a perform_work() call,
02168           // The loop should run only once.
02169           break;
02170         }
02171       // Otherwise just continue..
02172     }
02173 
02174   if (this->has_shutdown () == true &&
02175       this->server_factory_->activate_server_connections ())
02176       this->tm_.wait ();
02177 
02178   if (TAO_debug_level > 2)
02179     {
02180       ACE_DEBUG ((LM_DEBUG,
02181                   ACE_TEXT ("TAO (%P|%t) - ORB_Core::run, ")
02182                   ACE_TEXT ("ends with result = %d\n"),
02183                   result));
02184     }
02185 
02186   return result;
02187 }

TAO_Server_Strategy_Factory * TAO_ORB_Core::server_factory void   ) 
 

Returns pointer to the server factory.

Definition at line 1745 of file ORB_Core.cpp.

References ACE_TEXT, configuration(), and server_factory_.

Referenced by TAO_Concurrency_Strategy< SVC_HANDLER >::activate_svc_handler(), and init().

01746 {
01747   if (this->server_factory_ == 0)
01748     {
01749       // Look in the service repository for an instance.
01750       this->server_factory_ =
01751         ACE_Dynamic_Service<TAO_Server_Strategy_Factory>::instance
01752           (this->configuration (),
01753            ACE_TEXT ("Server_Strategy_Factory"));
01754     }
01755 
01756   return this->server_factory_;
01757 }

ACE_INLINE const char * TAO_ORB_Core::server_id void   )  const
 

Resolve the RT Current flyweight for this ORB. Return server_id string.

Definition at line 411 of file ORB_Core.inl.

References server_id_.

00412 {
00413   return this->server_id_.c_str();
00414 }

ACE_INLINE TAO::ServerRequestInterceptor_Adapter * TAO_ORB_Core::serverrequestinterceptor_adapter void   ) 
 

Get the Server Request Interceptor adapter. Will not create a new one if not available yet.

Definition at line 574 of file ORB_Core.inl.

References server_request_interceptor_adapter_.

Referenced by TAO_ServerRequest::rs_pi_current(), and TAO_ServerRequest::~TAO_ServerRequest().

00575 {
00576   return this->server_request_interceptor_adapter_;
00577 }

TAO::ServerRequestInterceptor_Adapter * TAO_ORB_Core::serverrequestinterceptor_adapter_i void   )  [protected]
 

Get the Server Request Interceptor adapter. If not created, this method will try to create one if needed.

Definition at line 3283 of file ORB_Core.cpp.

References ACE_GUARD_RETURN, ACE_TEXT, configuration(), TAO_ServerRequestInterceptor_Adapter_Factory::create(), server_request_interceptor_adapter_, and TAO_SYNCH_MUTEX.

Referenced by add_interceptor().

03284 {
03285   if (this->server_request_interceptor_adapter_ == 0)
03286     {
03287       ACE_GUARD_RETURN (TAO_SYNCH_MUTEX,
03288                         ace_mon,
03289                         this->lock_,
03290                         0);
03291 
03292       if (this->server_request_interceptor_adapter_ == 0)
03293         {
03294           TAO_ServerRequestInterceptor_Adapter_Factory *factory =
03295             ACE_Dynamic_Service<TAO_ServerRequestInterceptor_Adapter_Factory>::instance
03296               (this->configuration (),
03297                ACE_TEXT ("ServerRequestInterceptor_Adapter_Factory"));
03298 
03299           if (factory)
03300             {
03301               this->server_request_interceptor_adapter_ =
03302                 factory->create ();
03303             }
03304         }
03305     }
03306 
03307   return this->server_request_interceptor_adapter_;
03308 }

void TAO_ORB_Core::service_context_list TAO_Stub stub,
TAO_Service_Context service_context,
CORBA::Boolean  retstart
 

Call the service layers with the Service Context to check whether they would like to add something to the list.

Definition at line 1709 of file ORB_Core.cpp.

References network_priority_protocols_hooks_, TAO_Network_Priority_Protocols_Hooks::np_service_context(), protocols_hooks_, and TAO_Protocols_Hooks::rt_service_context().

Referenced by TAO::Remote_Invocation::init_target_spec().

01713 {
01714   // @NOTE: Can use Interceptors instead..
01715   if (this->protocols_hooks_ != 0)
01716     {
01717       this->protocols_hooks_->rt_service_context (stub, service_context, restart);
01718     }
01719 
01720   // call the network priority protocols hooks that has been
01721   // registered.
01722   if (network_priority_protocols_hooks_ != 0)
01723     {
01724       this->network_priority_protocols_hooks_->np_service_context (stub,
01725         service_context, restart);
01726     }
01727 }

ACE_INLINE CORBA::Boolean TAO_ORB_Core::service_profile_selection const TAO_MProfile mprofile,
TAO_Profile *&  profile
 

The loaded service in the ORB_Core would determine if the profile selection is going to be made by the services or not. If the services do make the selection they would return the selected profile through .

Definition at line 85 of file ORB_Core.inl.

References ft_service_, TAO_Service_Callbacks::select_profile(), and TAO_Fault_Tolerance_Service::service_callback().

Referenced by is_collocation_enabled().

00087 {
00088   CORBA::Boolean retval = false;
00089   // @@ If different services have the same feature we may want to
00090   // prioritise them here. We need to decide here whose selection of
00091   // profile is more important.
00092   if (this->ft_service_.service_callback ())
00093     {
00094       retval =
00095         this->ft_service_.service_callback ()->select_profile (mprofile,
00096                                                                 profile);
00097     }
00098   return retval;
00099 }

TAO::Invocation_Status TAO_ORB_Core::service_raise_comm_failure IOP::ServiceContextList clist,
TAO_Profile profile
 

Raise a comm failure exception if a service is not loaded, else delegate to the service to see what the service has to do for this case.

Definition at line 1675 of file ORB_Core.cpp.

References ft_service_, TAO_Fault_Tolerance_Service::service_callback(), IOP::ServiceContextList, and TAO_INVOCATION_RECV_REQUEST_MINOR_CODE.

Referenced by TAO::Synch_Twoway_Invocation::wait_for_reply().

01678 {
01679   if (this->ft_service_.service_callback ())
01680     {
01681       return this->ft_service_.service_callback ()->
01682                  raise_comm_failure (clist, profile);
01683     }
01684 
01685   throw ::CORBA::COMM_FAILURE (
01686     CORBA::SystemException::_tao_minor_code (
01687       TAO_INVOCATION_RECV_REQUEST_MINOR_CODE,
01688       errno),
01689     CORBA::COMPLETED_MAYBE);
01690 }

TAO::Invocation_Status TAO_ORB_Core::service_raise_transient_failure IOP::ServiceContextList clist,
TAO_Profile profile
 

Raise a transient failure exception if a service is not loaded, else delegate to the service to see what the service has to do for this case.

Definition at line 1694 of file ORB_Core.cpp.

References ft_service_, TAO_Service_Callbacks::raise_transient_failure(), TAO_Fault_Tolerance_Service::service_callback(), and IOP::ServiceContextList.

Referenced by TAO::Synch_Twoway_Invocation::handle_system_exception().

01697 {
01698   if (this->ft_service_.service_callback ())
01699     {
01700       return
01701         this->ft_service_.service_callback ()->raise_transient_failure (clist,
01702                                  profile);
01703     }
01704 
01705   return TAO::TAO_INVOKE_FAILURE;
01706 }

void TAO_ORB_Core::services_callbacks_init void   )  [protected]
 

Search the Dynamic service list for well known services that has callbacks which can be dynamically loaded.

Definition at line 1664 of file ORB_Core.cpp.

References ft_service_, and TAO_Fault_Tolerance_Service::init().

Referenced by init().

01665 {
01666   // We (should) know what are the services that would need
01667   // callbacks. So, what we do is go through the Service Configurator
01668   // list for looking at the services that we want to load.
01669   this->ft_service_.init (this);
01670 
01671   // @@ Other service callbacks can be added here
01672 }

ACE_INLINE void TAO_ORB_Core::set_default const char *  orb_id  ) 
 

Set the ORB related to the orb_id as the default ORB and not the ORB that is first binded in the ORB Table

Definition at line 178 of file ORB_Core.inl.

References TAO::ORB_Table::instance(), and TAO::ORB_Table::set_default().

00179 {
00180   TAO::ORB_Table * const table = TAO::ORB_Table::instance ();
00181   table->set_default (orb_id);
00182 }

ACE_INLINE void TAO_ORB_Core::set_delayed_transport_queueing_strategy TAO::Transport_Queueing_Strategy strategy  ) 
 

Definition at line 626 of file ORB_Core.inl.

References delayed_transport_queueing_strategy_.

00628 {
00629   this->delayed_transport_queueing_strategy_ = strategy;
00630 }

ACE_INLINE void TAO_ORB_Core::set_eager_transport_queueing_strategy TAO::Transport_Queueing_Strategy strategy  ) 
 

Definition at line 618 of file ORB_Core.inl.

References eager_transport_queueing_strategy_.

00620 {
00621   this->eager_transport_queueing_strategy_ = strategy;
00622 }

int TAO_ORB_Core::set_endpoint_helper const ACE_CString lane,
const ACE_CString endpoints
[protected]
 

Pointer to the list of protocol loaded into this ORB instance. Helper method to hold the common code part for -ORBEndpoint and -ORBListenEndpoint options.

Definition at line 2576 of file ORB_Core.cpp.

References ACE_ERROR, ACE_TEXT, ACE_TEXT_CHAR_TO_TCHAR, TAO_ORB_Parameters::add_endpoints(), LM_ERROR, orb_params(), and TAO_ORB_CORE_INIT_LOCATION_CODE.

Referenced by init().

02578 {
02579   if (this->orb_params ()->add_endpoints (lane,
02580                                           endpoints) != 0)
02581     {
02582       ACE_ERROR ((LM_ERROR,
02583                   ACE_TEXT ("(%P|%t)\n")
02584                   ACE_TEXT ("Invalid endpoint(s) specified:\n%s\n"),
02585                   ACE_TEXT_CHAR_TO_TCHAR(endpoints.c_str ())));
02586       throw ::CORBA::BAD_PARAM (
02587         CORBA::SystemException::_tao_minor_code (
02588           TAO_ORB_CORE_INIT_LOCATION_CODE,
02589           EINVAL),
02590         CORBA::COMPLETED_NO);
02591     }
02592 
02593   return 0;
02594 }

void TAO_ORB_Core::set_gui_resource_factory TAO::GUIResource_Factory gui_factory  )  [static]
 

Sets the value of TAO_ORB_Core::gui_resource_factory_.

Sets the value of gui_resource_factory in TSS. ORB_Core is responsible for releasing this factory if needed.

Definition at line 1409 of file ORB_Core.cpp.

References ACE_DEBUG, TAO_TSS_Resources::gui_resource_factory_, TAO_TSS_Resources::instance(), LM_DEBUG, and TAO_debug_level.

01410 {
01411   if (TAO_TSS_Resources::instance ()->gui_resource_factory_ != 0)
01412     {
01413       if (TAO_debug_level > 2)
01414         {
01415           ACE_DEBUG ((LM_DEBUG,
01416                       "TAO (%P|%t) - Deleting old gui_resource_factory.\n"));
01417         }
01418       delete TAO_TSS_Resources::instance ()->gui_resource_factory_;
01419     }
01420 
01421   TAO_TSS_Resources::instance ()->gui_resource_factory_ = gui_resource_factory;
01422 }

void TAO_ORB_Core::set_network_priority_protocols_hooks const char *  network_priority_protocols_hooks_name  )  [static]
 

Sets the value of TAO_ORB_Core::network_priority_protocols_hooks_.

Definition at line 1654 of file ORB_Core.cpp.

References TAO_ORB_Core_Static_Resources::instance().

01656 {
01657   // Is synchronization necessary?
01658   TAO_ORB_Core_Static_Resources::instance ()->
01659     network_priority_protocols_hooks_name_ =
01660       network_priority_protocols_hooks_name;
01661 }

void TAO_ORB_Core::set_resource_factory const char *  resource_factory_name  )  [static]
 

Sets the value of TAO_ORB_Core::resource_factory_.

Definition at line 1402 of file ORB_Core.cpp.

References TAO_ORB_Core_Static_Resources::instance(), and TAO_ORB_Core_Static_Resources::resource_factory_name_.

01403 {
01404   TAO_ORB_Core_Static_Resources::instance ()->resource_factory_name_ =
01405     resource_factory_name;
01406 }

ACE_INLINE void TAO_ORB_Core::set_sync_scope_hook Sync_Scope_Hook  hook  ) 
 

Definition at line 601 of file ORB_Core.inl.

References Sync_Scope_Hook, and sync_scope_hook_.

00602 {
00603   this->sync_scope_hook_ = hook;
00604 }

ACE_INLINE void TAO_ORB_Core::set_timeout_hook Timeout_Hook  hook  ) 
 

Definition at line 608 of file ORB_Core.inl.

References Timeout_Hook, and timeout_hook_.

00609 {
00610   // Saving the hook pointer so that we can use it later when needed.
00611   this->timeout_hook_ = hook;
00612 }

ACE_INLINE int TAO_ORB_Core::set_tss_resource size_t  slot_id,
void * 
 

Set the TSS resource at the given slot. Returns 0 on success, and -1 on failure.

Definition at line 275 of file ORB_Core.inl.

References get_tss_resources(), TAO_ORB_Core_TSS_Resources::orb_core_, ACE_Array_Base< void * >::size(), TAO_Cleanup_Func_Registry::size(), TAO_ORB_Core_TSS_Resources::ts_objects_, and tss_cleanup_funcs_.

00276 {
00277   TAO_ORB_Core_TSS_Resources *tss_resources =
00278     this->get_tss_resources ();
00279 
00280   // The number of allocated slots is equal to the number of
00281   // registered TSS cleanup functions, *not* the size of the array in
00282   // the ORB core TSS resources.
00283   if (slot_id >= this->tss_cleanup_funcs_.size ())
00284     {
00285       errno = EINVAL;
00286       return -1;
00287     }
00288 
00289   // If the TSS array isn't large enough, then increase its size.
00290   // We're guaranteed not to exceed the number of allocated slots by
00291   // the above check.
00292   const size_t old_size = tss_resources->ts_objects_.size ();
00293   const size_t new_size = slot_id + 1;
00294   if (slot_id >= old_size
00295       && tss_resources->ts_objects_.size (new_size) != 0)
00296     return -1;
00297 
00298   // Initialize intermediate array elements to zero, since they
00299   // haven't been initialized yet.  This ensures that garbage is not
00300   // returned when accessing any of those elements at a later point in
00301   // time.
00302   for (size_t i = old_size; i < slot_id; ++i)
00303     tss_resources->ts_objects_[i] = 0;
00304 
00305   tss_resources->ts_objects_[slot_id] = ts_object;
00306 
00307   // Make sure the ORB core pointer is set in the ORB core's TSS
00308   // resources so that the TSS cleanup functions stored in the ORB
00309   // core can be invoked.
00310   tss_resources->orb_core_ = this;
00311 
00312   return 0;
00313 }

void TAO_ORB_Core::shutdown CORBA::Boolean  wait_for_completion  ) 
 

End the event loop.

Definition at line 2191 of file ORB_Core.cpp.

References CORBA::Object::_nil(), ACE_GUARD, adapter_registry_, ACE_Thread_Manager::cancel_all(), TAO_Adapter_Registry::check_close(), TAO_Thread_Lane_Resources_Manager::cleanup_rw_transports(), TAO_Adapter_Registry::close(), TAO_Object_Ref_Table::destroy(), has_shutdown(), has_shutdown_, object_ref_table_, pi_current_, CORBA::release(), TAO_Thread_Lane_Resources_Manager::shutdown_reactor(), TAO_SYNCH_MUTEX, thr_mgr(), thread_lane_resources_manager(), valuetype_adapter_, and ACE_Thread_Manager::wait().

Referenced by destroy(), fini(), and CORBA::ORB::shutdown().

02192 {
02193   {
02194     ACE_GUARD (TAO_SYNCH_MUTEX, monitor, this->lock_);
02195 
02196     if (this->has_shutdown () == true)
02197       return;
02198 
02199     // Check if we are on the right state, i.e. do not accept
02200     // shutdowns with the 'wait_for_completion' flag set in the middle
02201     // of an upcall (because those deadlock).
02202     this->adapter_registry_.check_close (wait_for_completion);
02203 
02204     // Set the 'has_shutdown' flag, so any further attempt to shutdown
02205     // becomes a noop.
02206     this->has_shutdown_ = true;
02207 
02208     // need to release the mutex, because some of the shutdown
02209     // operations invoke application code, that could (and in practice
02210     // does!) callback into ORB Core code.
02211   }
02212 
02213   this->adapter_registry_.close (wait_for_completion);
02214 
02215   // Shutdown reactor.
02216   this->thread_lane_resources_manager ().shutdown_reactor ();
02217 
02218   // Cleanup transports that use the RW strategies
02219   this->thread_lane_resources_manager ().cleanup_rw_transports ();
02220 
02221   // Grab the thread manager
02222   ACE_Thread_Manager *tm = this->thr_mgr ();
02223 
02224   // Try to cancel all the threads in the ORB.
02225   tm->cancel_all ();
02226 
02227   // If <wait_for_completion> is set, wait for all threads to exit.
02228   if (wait_for_completion != 0)
02229     tm->wait ();
02230 
02231   // Explicitly destroy the valuetype adapter
02232   delete this->valuetype_adapter_;
02233   this->valuetype_adapter_ = 0;
02234 
02235   // Explicitly destroy the object reference table since it
02236   // contains references to objects, which themselves may contain
02237   // reference to this ORB.
02238   this->object_ref_table_.destroy ();
02239 
02240 #if (TAO_HAS_INTERCEPTORS == 1)
02241   CORBA::release (this->pi_current_);
02242   this->pi_current_ = CORBA::Object::_nil ();
02243 #endif  /* TAO_HAS_INTERCEPTORS == 1 */
02244 }

TAO_Stub_Factory * TAO_ORB_Core::stub_factory void   ) 
 

Returns a pointer to the Stub factory.

Definition at line 1616 of file ORB_Core.cpp.

References ACE_TEXT_CHAR_TO_TCHAR, configuration(), orb_params(), stub_factory_, and TAO_ORB_Parameters::stub_factory_name().

Referenced by create_stub().

01617 {
01618   // Check if there is a cached reference.
01619   if (this->stub_factory_ != 0)
01620     return this->stub_factory_;
01621 
01622   // If not, look in the service repository for an instance.
01623   const char *stub_factory_name =
01624     this->orb_params ()->stub_factory_name ();
01625 
01626   this->stub_factory_ =
01627     ACE_Dynamic_Service<TAO_Stub_Factory>::instance
01628       (this->configuration (),
01629        ACE_TEXT_CHAR_TO_TCHAR (stub_factory_name));
01630 
01631   return this->stub_factory_;
01632 }

ACE_INLINE ACE_Thread_Manager * TAO_ORB_Core::thr_mgr void   ) 
 

Get the ACE_Thread_Manager.

Definition at line 148 of file ORB_Core.inl.

Referenced by fini(), TAO_IIOP_Connector::open(), and shutdown().

00149 {
00150   return &this->tm_;
00151 }

TAO_Thread_Lane_Resources_Manager & TAO_ORB_Core::thread_lane_resources_manager void   ) 
 

Returns a pointer to the Thread Lane Resources Manager.

Definition at line 1513 of file ORB_Core.cpp.

References ACE_TEXT_CHAR_TO_TCHAR, configuration(), TAO_Thread_Lane_Resources_Manager_Factory::create_thread_lane_resources_manager(), orb_params(), thread_lane_resources_manager_, and TAO_ORB_Parameters::thread_lane_resources_manager_factory_name().

Referenced by is_collocated(), lane_resources(), lf_strategy(), and shutdown().

01514 {
01515   // Check if there is a cached reference.
01516   if (this->thread_lane_resources_manager_ != 0)
01517     return *this->thread_lane_resources_manager_;
01518 
01519   // If not, lookup the corresponding factory and ask it to make one.
01520   const char *thread_lane_resources_manager_factory_name =
01521     this->orb_params ()->thread_lane_resources_manager_factory_name ();
01522 
01523   TAO_Thread_Lane_Resources_Manager_Factory *factory =
01524     ACE_Dynamic_Service<TAO_Thread_Lane_Resources_Manager_Factory>::instance
01525       (this->configuration (),
01526        ACE_TEXT_CHAR_TO_TCHAR (thread_lane_resources_manager_factory_name));
01527 
01528   this->thread_lane_resources_manager_ =
01529     factory->create_thread_lane_resources_manager (*this);
01530 
01531   return *this->thread_lane_resources_manager_;
01532 }

ACE_INLINE int TAO_ORB_Core::thread_per_connection_timeout ACE_Time_Value timeout  )  const
 

Returns the value used by the server threads to poll the shutdown flag. If the return value is zero then the server threads block forever.

Definition at line 328 of file ORB_Core.inl.

Referenced by TAO_Connection_Handler::svc_i().

00329 {
00330   timeout = this->thread_per_connection_timeout_;
00331   return this->thread_per_connection_use_timeout_;
00332 }

ACE_Allocator * TAO_ORB_Core::transport_message_buffer_allocator void   ) 
 

This allocator is always global and has no locks. It is intended for allocating the buffers used to queue messages in transports.

Definition at line 2751 of file ORB_Core.cpp.

References lane_resources(), and TAO_Thread_Lane_Resources::transport_message_buffer_allocator().

02752 {
02753   return this->lane_resources ().transport_message_buffer_allocator ();
02754 }

ACE_INLINE TAO_Cleanup_Func_Registry * TAO_ORB_Core::tss_cleanup_funcs void   ) 
 

Return the underlying TSS cleanup function registry.

Definition at line 316 of file ORB_Core.inl.

References tss_cleanup_funcs_.

00317 {
00318   return &(this->tss_cleanup_funcs_);
00319 }

const char * TAO_ORB_Core::typecodefactory_adapter_name void   )  [static]
 

Gets the value of TAO_ORB_Core::typecodefactory_adapter_name_.

Definition at line 1455 of file ORB_Core.cpp.

References TAO_ORB_Core_Static_Resources::instance(), and TAO_ORB_Core_Static_Resources::typecodefactory_adapter_name_.

void TAO_ORB_Core::typecodefactory_adapter_name const char *  name  )  [static]
 

Sets the value of TAO_ORB_Core::typecodefactory_adapter_name_.

Definition at line 1449 of file ORB_Core.cpp.

References TAO_ORB_Core_Static_Resources::instance(), and TAO_ORB_Core_Static_Resources::typecodefactory_adapter_name_.

ACE_INLINE CORBA::Boolean TAO_ORB_Core::use_global_collocation void   )  const
 

Definition at line 210 of file ORB_Core.inl.

References use_global_collocation_.

00211 {
00212   return this->use_global_collocation_;
00213 }

ACE_INLINE void TAO_ORB_Core::use_global_collocation CORBA::Boolean  opt  ) 
 

Definition at line 204 of file ORB_Core.inl.

References use_global_collocation_.

Referenced by is_collocation_enabled().

00205 {
00206   this->use_global_collocation_ = opt;
00207 }

ACE_INLINE CORBA::Boolean TAO_ORB_Core::use_implrepo void   ) 
 

Do we attempt to register with the Implementation Repository.

Definition at line 347 of file ORB_Core.inl.

References use_implrepo_.

00348 {
00349   return use_implrepo_;
00350 }

TAO_Valuetype_Adapter * TAO_ORB_Core::valuetype_adapter void   ) 
 

Return the valuetype adapter.

Definition at line 3313 of file ORB_Core.cpp.

References ACE_GUARD_RETURN, TAO_Valuetype_Adapter_Factory::create(), ACE_Dynamic_Service< TYPE >::instance(), TAO_SYNCH_MUTEX, valuetype_adapter_, and valuetype_adapter_factory_name().

Referenced by CORBA::ORB::lookup_value_factory(), CORBA::ORB::register_value_factory(), and CORBA::ORB::unregister_value_factory().

03314 {
03315   if (this->valuetype_adapter_ == 0)
03316     {
03317       ACE_GUARD_RETURN (TAO_SYNCH_MUTEX,
03318                         ace_mon,
03319                         this->lock_,
03320                         0);
03321 
03322       if (this->valuetype_adapter_ == 0)
03323         {
03324           try
03325             {
03326               TAO_Valuetype_Adapter_Factory * vt_ap_factory =
03327                 ACE_Dynamic_Service<TAO_Valuetype_Adapter_Factory>::instance (
03328                     TAO_ORB_Core::valuetype_adapter_factory_name ()
03329                   );
03330 
03331               if (vt_ap_factory)
03332                 {
03333                   this->valuetype_adapter_ = vt_ap_factory->create ();
03334                 }
03335             }
03336           catch (const ::CORBA::Exception& ex)
03337             {
03338               ex._tao_print_exception (
03339                 "Cannot initialize the valuetype_adapter \n");
03340             }
03341         }
03342 
03343       if (this->valuetype_adapter_ == 0)
03344         {
03345            throw ::CORBA::INTERNAL ();
03346         }
03347     }
03348 
03349   return this->valuetype_adapter_;
03350 }

const char * TAO_ORB_Core::valuetype_adapter_factory_name void   )  [static]
 

Gets the value of TAO_ORB_Core::valuetype_adapter_factory_name.

Definition at line 1479 of file ORB_Core.cpp.

References TAO_ORB_Core_Static_Resources::instance(), and TAO_ORB_Core_Static_Resources::valuetype_adapter_factory_name_.

void TAO_ORB_Core::valuetype_adapter_factory_name const char *  name  )  [static]
 

Sets the value of TAO_ORB_Core::valuetype_adapter_factory_name.

Definition at line 1473 of file ORB_Core.cpp.

References TAO_ORB_Core_Static_Resources::instance(), and TAO_ORB_Core_Static_Resources::valuetype_adapter_factory_name_.

Referenced by valuetype_adapter().


Friends And Related Function Documentation

CORBA::ORB_ptr CORBA::ORB_init int &  ,
char *  argv[],
const char * 
[friend]
 

friend class TAO_ORB_Core_Auto_Ptr [friend]
 

Definition at line 160 of file ORB_Core.h.


Member Data Documentation

TAO_Adapter_Registry TAO_ORB_Core::adapter_registry_ [protected]
 

The list of Adapters used in this ORB.

Definition at line 1119 of file ORB_Core.h.

Referenced by adapter_registry(), poa_adapter(), resolve_ior_table_i(), root_poa(), and shutdown().

TAO_BiDir_Adapter* TAO_ORB_Core::bidir_adapter_ [protected]
 

BiDirectional GIOP factory.

Definition at line 1205 of file ORB_Core.h.

Referenced by load_policy_validators().

CORBA::Boolean TAO_ORB_Core::bidir_giop_policy_ [protected]
 

Bir Dir GIOP policy value.

Definition at line 1208 of file ORB_Core.h.

Referenced by bidir_giop_policy().

TAO_Client_Strategy_Factory* TAO_ORB_Core::client_factory_ [protected]
 

Handle to the factory for Client-side strategies.

Definition at line 1071 of file ORB_Core.h.

Referenced by client_factory().

TAO::ClientRequestInterceptor_Adapter* TAO_ORB_Core::client_request_interceptor_adapter_ [protected]
 

The adapter for handling client request interceptors.

Definition at line 1188 of file ORB_Core.h.

Referenced by add_interceptor(), clientrequestinterceptor_adapter(), clientrequestinterceptor_adapter_i(), and destroy_interceptors().

CORBA::Object_ptr TAO_ORB_Core::codec_factory_ [protected]
 

The cached IOR for the CodecFactory DLL.

Definition at line 1010 of file ORB_Core.h.

Referenced by fini(), and resolve_codecfactory_i().

TAO_Codeset_Manager* TAO_ORB_Core::codeset_manager_ [protected]
 

Code Set Manager, received from the Resource Factory.

Definition at line 1214 of file ORB_Core.h.

Referenced by codeset_manager(), init(), and ~TAO_ORB_Core().

TAO_Collocation_Resolver* TAO_ORB_Core::collocation_resolver_ [protected]
 

Definition at line 990 of file ORB_Core.h.

Referenced by collocation_resolver().

CORBA::ULong TAO_ORB_Core::collocation_strategy_ [protected]
 

Default collocation policy. This should never be ORB_CONTROL.

Definition at line 1095 of file ORB_Core.h.

Referenced by get_collocation_strategy(), and init().

CORBA::Object_ptr TAO_ORB_Core::compression_manager_ [protected]
 

The cached IOR for the Compression DLL.

Definition at line 1013 of file ORB_Core.h.

Referenced by resolve_compression_manager_i().

ACE_Service_Gestalt* TAO_ORB_Core::config_ [protected]
 

ORB's service configuration.

Definition at line 1217 of file ORB_Core.h.

ACE_Lock_Adapter<TAO_SYNCH_MUTEX> TAO_ORB_Core::data_block_lock_ [protected]
 

The data block reference counts are locked using this mutex.

Definition at line 1128 of file ORB_Core.h.

Referenced by create_input_cdr_data_block(), and locking_strategy().

TAO_Policy_Set* TAO_ORB_Core::default_policies_ [protected]
 

The default policies.

Definition at line 1103 of file ORB_Core.h.

Referenced by get_default_policies(), and ~TAO_ORB_Core().

TAO::Transport_Queueing_Strategy* TAO_ORB_Core::default_transport_queueing_strategy_ [protected]
 

This strategy will not queue by default and not flush.

Definition at line 1166 of file ORB_Core.h.

TAO::Transport_Queueing_Strategy* TAO_ORB_Core::delayed_transport_queueing_strategy_ [protected]
 

This strategy will buffer messages.

Definition at line 1157 of file ORB_Core.h.

Referenced by get_transport_queueing_strategy(), set_delayed_transport_queueing_strategy(), and ~TAO_ORB_Core().

CORBA::Object_ptr TAO_ORB_Core::dynany_factory_ [protected]
 

The cached object reference for the DynAnyFactory.

Definition at line 1016 of file ORB_Core.h.

Referenced by fini(), and resolve_dynanyfactory_i().

TAO::Transport_Queueing_Strategy* TAO_ORB_Core::eager_transport_queueing_strategy_ [protected]
 

This strategy will buffer messages.

Definition at line 1154 of file ORB_Core.h.

Referenced by get_transport_queueing_strategy(), set_eager_transport_queueing_strategy(), and ~TAO_ORB_Core().

TAO_Endpoint_Selector_Factory* TAO_ORB_Core::endpoint_selector_factory_ [protected]
 

Definition at line 1149 of file ORB_Core.h.

Referenced by endpoint_selector_factory().

TAO::Transport_Queueing_Strategy* TAO_ORB_Core::flush_transport_queueing_strategy_ [protected]
 

This strategy will not queue by default, but will flush the queue each time

Definition at line 1161 of file ORB_Core.h.

Referenced by get_transport_queueing_strategy(), and ~TAO_ORB_Core().

TAO_Flushing_Strategy* TAO_ORB_Core::flushing_strategy_ [protected]
 

Hold the flushing strategy.

Definition at line 1211 of file ORB_Core.h.

Referenced by flushing_strategy(), init(), and ~TAO_ORB_Core().

TAO_Fault_Tolerance_Service TAO_ORB_Core::ft_service_ [protected]
 

Fault Tolerant service hook.

Definition at line 1082 of file ORB_Core.h.

Referenced by fault_tolerance_service(), hash_service(), is_profile_equivalent(), object_is_nil(), service_profile_selection(), service_raise_comm_failure(), service_raise_transient_failure(), and services_callbacks_init().

bool TAO_ORB_Core::has_shutdown_ [protected]
 

Flag which denotes that the ORB has been shutdown.

Definition at line 1138 of file ORB_Core.h.

Referenced by has_shutdown(), init(), and shutdown().

CORBA::Object_ptr TAO_ORB_Core::implrepo_service_ [protected]
 

The cached IOR for the Implementation Repository.

Definition at line 998 of file ORB_Core.h.

Referenced by fini(), and implrepo_service().

int TAO_ORB_Core::imr_endpoints_in_ior_ [protected]
 

Flag for whether to put the ImR endpoints into our object refs.

Definition at line 1004 of file ORB_Core.h.

Referenced by imr_endpoints_in_ior(), and init().

InitRefMap TAO_ORB_Core::init_ref_map_ [protected]
 

Return InitRefMap to find if a particular object id is present.

Definition at line 1051 of file ORB_Core.h.

Referenced by init(), init_ref_map(), and list_initial_references().

TAO_IORInterceptor_Adapter* TAO_ORB_Core::ior_interceptor_adapter_ [protected]
 

IORInterceptor adapter.

Definition at line 1196 of file ORB_Core.h.

Referenced by add_interceptor(), destroy_interceptors(), and ior_interceptor_adapter().

CORBA::Object_ptr TAO_ORB_Core::ior_manip_factory_ [protected]
 

The cached object reference for the IORManipulataion.

Definition at line 1019 of file ORB_Core.h.

Referenced by fini(), and resolve_iormanipulation_i().

CORBA::Object_ptr TAO_ORB_Core::ior_table_ [protected]
 

The cached object reference for the IORTable.

Definition at line 1022 of file ORB_Core.h.

Referenced by fini(), and resolve_ior_table_i().

TAO_SYNCH_MUTEX TAO_ORB_Core::lock_ [protected]
 

Synchronize internal state...

Definition at line 986 of file ORB_Core.h.

TAO_Network_Priority_Protocols_Hooks* TAO_ORB_Core::network_priority_protocols_hooks_
 

Handle to the factory for network_priority_protocols_hooks_..

Definition at line 537 of file ORB_Core.h.

Referenced by get_network_priority_protocols_hooks(), init(), and service_context_list().

TAO::ObjectKey_Table TAO_ORB_Core::object_key_table_ [protected]
 

Table that stores the object key instead of caching one per-profile.

Definition at line 1059 of file ORB_Core.h.

Referenced by fini(), init(), and object_key_table().

TAO_Object_Ref_Table TAO_ORB_Core::object_ref_table_ [protected]
 

Table that maps object key/name to (de-stringified) object reference. It is needed for supporting local objects in the resolve_initial_references() mechanism.

Definition at line 1056 of file ORB_Core.h.

Referenced by list_initial_references(), object_ref_table(), and shutdown().

TAO_SYNCH_MUTEX TAO_ORB_Core::open_lock_ [protected]
 

Mutual exclusion for calling open.

Definition at line 1147 of file ORB_Core.h.

CORBA::Boolean TAO_ORB_Core::opt_for_collocation_ [protected]
 

TRUE if we want to take advantage of collocation optimization in this ORB.

Definition at line 1088 of file ORB_Core.h.

Referenced by init(), and optimize_collocation_objects().

CORBA::ORB_ptr TAO_ORB_Core::orb_ [protected]
 

Note:
Should we keep a single ORB pointer? This is good because multiple calls to ORB_init() with the same ORBid can use the same object, but maybe don't want so much coupling.
Pointer to the ORB.

Definition at line 1040 of file ORB_Core.h.

Referenced by implrepo_service(), init(), orb(), and ~TAO_ORB_Core().

TAO_ORB_Parameters TAO_ORB_Core::orb_params_ [protected]
 

Parameters used by the ORB.

Definition at line 1048 of file ORB_Core.h.

Referenced by init(), and orb_params().

char* TAO_ORB_Core::orbid_ [protected]
 

The ORBid for this ORB.

Definition at line 1062 of file ORB_Core.h.

Referenced by fini(), and orbid().

TAO::ORBInitializer_Registry_Adapter* TAO_ORB_Core::orbinitializer_registry_ [protected]
 

Registry containing all orb initializers.

Definition at line 1175 of file ORB_Core.h.

Referenced by orbinitializer_registry(), orbinitializer_registry_i(), and ~TAO_ORB_Core().

TAO_Parser_Registry TAO_ORB_Core::parser_registry_ [protected]
 

The IOR parser registry.

Definition at line 1202 of file ORB_Core.h.

Referenced by init(), and parser_registry().

CORBA::Object_ptr TAO_ORB_Core::pi_current_ [protected]
 

Cached pointer/reference to the PICurrent object.

A pointer/reference to the PICurrent object is cached in the ORB Core since it is accessed in the critical path (i.e. the request invocation path). Caching it prevents additional overhead to due object resolution from occurring.

Definition at line 1185 of file ORB_Core.h.

Referenced by pi_current(), resolve_picurrent_i(), and shutdown().

TAO_Adapter* TAO_ORB_Core::poa_adapter_ [protected]
 

An optimization for the POA.

Definition at line 1122 of file ORB_Core.h.

Referenced by poa_adapter().

CORBA::Object_var TAO_ORB_Core::poa_current_ [protected]
 

POA current.

Definition at line 1116 of file ORB_Core.h.

Referenced by resolve_poa_current_i().

TAO_Policy_Current* TAO_ORB_Core::policy_current_ [protected]
 

Policy current.

Definition at line 1106 of file ORB_Core.h.

Referenced by policy_current(), and ~TAO_ORB_Core().

TAO::PolicyFactory_Registry_Adapter* TAO_ORB_Core::policy_factory_registry_ [protected]
 

Registry containing all registered policy factories.

Definition at line 1172 of file ORB_Core.h.

Referenced by policy_factory_registry(), policy_factory_registry_i(), and ~TAO_ORB_Core().

TAO_Policy_Manager* TAO_ORB_Core::policy_manager_ [protected]
 

The Policy_Manager for this ORB.

Definition at line 1100 of file ORB_Core.h.

Referenced by policy_manager(), and ~TAO_ORB_Core().

TAO_ProtocolFactorySet* TAO_ORB_Core::protocol_factories_ [protected]
 

Definition at line 994 of file ORB_Core.h.

TAO_Protocols_Hooks* TAO_ORB_Core::protocols_hooks_
 

Handle to the factory for protocols_hooks_..

Definition at line 534 of file ORB_Core.h.

Referenced by get_protocols_hooks(), init(), and service_context_list().

ACE_Atomic_Op<TAO_SYNCH_MUTEX, unsigned long> TAO_ORB_Core::refcount_ [protected]
 

Number of outstanding references to this object.

Definition at line 1169 of file ORB_Core.h.

TAO_Request_Dispatcher* TAO_ORB_Core::request_dispatcher_ [protected]
 

The request dispatching strategy.

Definition at line 1111 of file ORB_Core.h.

Referenced by request_dispatcher(), and ~TAO_ORB_Core().

TAO_Resource_Factory* TAO_ORB_Core::resource_factory_ [protected]
 

Handle to the factory for resource information..

Definition at line 1065 of file ORB_Core.h.

Referenced by resource_factory().

CORBA::Object_var TAO_ORB_Core::root_poa_ [protected]
 

Object reference to the root POA. It will eventually be the object reference returned by calls to CORBA::ORB::resolve_initial_references ("RootPOA").

Definition at line 1045 of file ORB_Core.h.

Referenced by root_poa().

CORBA::Object_var TAO_ORB_Core::rt_current_ [protected]
 

The cached object reference for the RTCORBA::Current interface.

Definition at line 1029 of file ORB_Core.h.

CORBA::Object_var TAO_ORB_Core::rt_orb_ [protected]
 

The cached object reference for the RTCORBA::RTORB.

Definition at line 1026 of file ORB_Core.h.

Referenced by resolve_rt_orb().

TAO_Server_Strategy_Factory* TAO_ORB_Core::server_factory_ [protected]
 

Handle to the factory for Server-side strategies.

Definition at line 1074 of file ORB_Core.h.

Referenced by run(), and server_factory().

ACE_CString TAO_ORB_Core::server_id_ [protected]
 

The server_id_ that was passed via -ORBServerId option.

Definition at line 1068 of file ORB_Core.h.

Referenced by init(), and server_id().

TAO::ServerRequestInterceptor_Adapter* TAO_ORB_Core::server_request_interceptor_adapter_ [protected]
 

The adapter for handling server request interceptors.

Definition at line 1191 of file ORB_Core.h.

Referenced by add_interceptor(), destroy_interceptors(), serverrequestinterceptor_adapter(), and serverrequestinterceptor_adapter_i().

TAO_Stub_Factory* TAO_ORB_Core::stub_factory_ [protected]
 

Definition at line 992 of file ORB_Core.h.

Referenced by stub_factory().

Sync_Scope_Hook TAO_ORB_Core::sync_scope_hook_ [protected]
 

The hook to be set for the SyncScopePolicy.

Definition at line 1220 of file ORB_Core.h.

Referenced by call_sync_scope_hook(), and set_sync_scope_hook().

TAO_Thread_Lane_Resources_Manager* TAO_ORB_Core::thread_lane_resources_manager_ [protected]
 

Definition at line 988 of file ORB_Core.h.

Referenced by fini(), thread_lane_resources_manager(), and ~TAO_ORB_Core().

ACE_Time_Value TAO_ORB_Core::thread_per_connection_timeout_ [protected]
 

Definition at line 1143 of file ORB_Core.h.

int TAO_ORB_Core::thread_per_connection_use_timeout_ [protected]
 

Definition at line 1142 of file ORB_Core.h.

Timeout_Hook TAO_ORB_Core::timeout_hook_ [protected]
 

The hook to be set for the RelativeRoundtripTimeoutPolicy.

Definition at line 1223 of file ORB_Core.h.

Referenced by call_timeout_hook(), and set_timeout_hook().

ACE_Thread_Manager TAO_ORB_Core::tm_ [protected]
 

The Thread Manager.

Definition at line 1125 of file ORB_Core.h.

TAO_Cleanup_Func_Registry TAO_ORB_Core::tss_cleanup_funcs_ [protected]
 

TSS Object cleanup functions. These correspond to the TSS objects stored in TAO's TSS resources.

Definition at line 1132 of file ORB_Core.h.

Referenced by add_tss_cleanup_func(), set_tss_resource(), and tss_cleanup_funcs().

CORBA::Object_ptr TAO_ORB_Core::typecode_factory_ [protected]
 

The cached IOR for the TypeCodeFactory DLL.

Definition at line 1007 of file ORB_Core.h.

Referenced by fini(), and resolve_typecodefactory_i().

CORBA::Boolean TAO_ORB_Core::use_global_collocation_ [protected]
 

TRUE if we want to consider all ORBs in this address space collocated.

Definition at line 1092 of file ORB_Core.h.

Referenced by init(), and use_global_collocation().

int TAO_ORB_Core::use_implrepo_ [protected]
 

Flag for whether the implrepo support is enabled or not.

Definition at line 1001 of file ORB_Core.h.

Referenced by implrepo_service(), init(), and use_implrepo().

bool TAO_ORB_Core::use_local_memory_pool_ [private]
 

Definition at line 981 of file ORB_Core.h.

TAO_Valuetype_Adapter* TAO_ORB_Core::valuetype_adapter_ [protected]
 

Pointer to the valuetype adapter.

Definition at line 1199 of file ORB_Core.h.

Referenced by shutdown(), and valuetype_adapter().


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