summaryrefslogtreecommitdiff
path: root/TAO/tao/default_resource.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/default_resource.h')
-rw-r--r--TAO/tao/default_resource.h288
1 files changed, 288 insertions, 0 deletions
diff --git a/TAO/tao/default_resource.h b/TAO/tao/default_resource.h
new file mode 100644
index 00000000000..924364b681c
--- /dev/null
+++ b/TAO/tao/default_resource.h
@@ -0,0 +1,288 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file default_resource.h
+ *
+ * $Id$
+ *
+ * @author Chris Cleeland
+ * @author Carlos O'Ryan
+ */
+//=============================================================================
+
+
+#ifndef TAO_DEFAULT_RESOURCE_H
+#define TAO_DEFAULT_RESOURCE_H
+
+#include /**/ "ace/pre.h"
+#include "ace/Service_Config.h"
+#include "ace/Dynamic_Service_Dependency.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/Resource_Factory.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+class ACE_Reactor_Impl;
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+class TAO_Object_Adapter;
+class TAO_IOR_Parser;
+class TAO_LF_Strategy;
+class TAO_Codeset_Descriptor_Base;
+
+/**
+ * @class TAO_Default_Resource_Factory
+ *
+ * @brief TAO's default resource factory
+ *
+ * Using a <{resource source specifier}> as a discriminator, the
+ * factory can return resource instances which are, e.g., global,
+ * stored in thread-specific storage, stored in shared memory,
+ * etc.
+ *
+ * @note When using an ORB created by a dynamically loaded object, it
+ * is generally necessary to pre-load a "Resource_Factory" prior
+ * to initializing the ORB. In the case of the
+ * TAO_Default_Resource_Factory, this can be done by adding the
+ * following Service Configurator directive to your `svc.conf'
+ * file before your the directive that loads the object that
+ * initialized your ORB:
+ * @par
+ * static Resource_Factory ""
+ * @par
+ * Alternatively, explicitly pre-load the Resource_Factory using
+ * the following in your code:
+ * @par
+ * ACE_Service_Config::process_directive (
+ * ACE_TEXT ("static Resource_Factory \"\"") );
+ * @par
+ * In both cases, place the appropriate resource factory
+ * arguments, if any, between the quotes immediately following
+ * "Resource_Factory."
+ */
+class TAO_Export TAO_Default_Resource_Factory
+ : public TAO_Resource_Factory
+{
+public:
+
+ /// Constructor.
+ TAO_Default_Resource_Factory (void);
+
+ /// Destructor.
+ virtual ~TAO_Default_Resource_Factory (void);
+
+ /**
+ * @name Service Configurator Hooks
+ */
+ //@{
+ /// Dynamic linking hook
+ virtual int init (int argc, ACE_TCHAR *argv[]);
+
+ /// Parse svc.conf arguments
+ int parse_args (int argc, ACE_TCHAR* argv[]);
+ //@}
+
+ /**
+ * @name Member Accessors
+ */
+ //@{
+
+ int get_parser_names (char **&names,
+ int &number_of_names);
+ enum
+ {
+ TAO_ALLOCATOR_THREAD_LOCK
+ };
+
+ /// Modify and get the source for the CDR allocators
+ int cdr_allocator_source (void);
+
+ // = Resource Retrieval
+ virtual int use_locked_data_blocks (void) const;
+ virtual ACE_Reactor *get_reactor (void);
+ virtual void reclaim_reactor (ACE_Reactor *);
+ virtual TAO_Acceptor_Registry *get_acceptor_registry (void);
+ virtual TAO_Connector_Registry *get_connector_registry (void);
+ virtual void use_local_memory_pool (bool);
+ virtual ACE_Allocator* input_cdr_dblock_allocator (void);
+ virtual ACE_Allocator* input_cdr_buffer_allocator (void);
+ virtual ACE_Allocator* input_cdr_msgblock_allocator (void);
+ virtual int input_cdr_allocator_type_locked (void);
+ virtual ACE_Allocator* output_cdr_dblock_allocator (void);
+ virtual ACE_Allocator* output_cdr_buffer_allocator (void);
+ virtual ACE_Allocator* output_cdr_msgblock_allocator (void);
+ virtual ACE_Allocator* amh_response_handler_allocator (void);
+ virtual ACE_Allocator* ami_response_handler_allocator (void);
+ virtual TAO_ProtocolFactorySet *get_protocol_factories (void);
+
+ virtual int init_protocol_factories (void);
+
+ virtual TAO_Codeset_Manager * codeset_manager (void);
+
+ virtual int cache_maximum (void) const;
+ virtual int purge_percentage (void) const;
+ virtual int max_muxed_connections (void) const;
+ virtual ACE_Lock *create_cached_connection_lock (void);
+ virtual ACE_Lock *create_object_key_table_lock (void);
+ virtual TAO_Configurable_Refcount create_corba_object_refcount (void);
+ virtual ACE_Lock *create_corba_object_lock (void);
+ virtual int locked_transport_cache (void);
+ virtual TAO_Flushing_Strategy *create_flushing_strategy (void);
+ virtual TAO_Connection_Purging_Strategy *create_purging_strategy (void);
+ TAO_Resource_Factory::Resource_Usage resource_usage_strategy (void) const;
+ virtual TAO_LF_Strategy *create_lf_strategy (void);
+ virtual auto_ptr<TAO_GIOP_Fragmentation_Strategy>
+ create_fragmentation_strategy (TAO_Transport * transport,
+ CORBA::ULong max_message_size) const;
+ virtual void disable_factory (void);
+ virtual bool drop_replies_during_shutdown (void) const;
+ //@}
+
+protected:
+
+ /// Obtain the reactor implementation
+ virtual ACE_Reactor_Impl *allocate_reactor_impl (void) const;
+
+ /// Add a Parser name to the list of Parser names.
+ int add_to_ior_parser_names (const char *);
+
+ void report_option_value_error (const ACE_TCHAR* option_name,
+ const ACE_TCHAR* option_value);
+
+protected:
+
+ /// The type of data blocks that the ORB should use
+ int use_locked_data_blocks_;
+
+ /// The number of the different types of Parsers.
+ int parser_names_count_;
+
+ /// Array consisting of the names of the parsers
+ char **parser_names_;
+
+ /// Index of the current element in the parser_names_ array
+ int index_;
+
+ /// list of loaded protocol factories.
+ TAO_ProtocolFactorySet protocol_factories_;
+
+ /// Specifies the typeof purging strategy we should use for cleaning
+ /// up unused connections
+ TAO_Resource_Factory::Purging_Strategy connection_purging_type_;
+
+ /// Specifies the maximum number of connections which should get cached
+ /// in the ORB.
+ int cache_maximum_;
+
+ /// Specifies the percentage of entries which should get purged on
+ /// demand.
+ int purge_percentage_;
+
+ /// Specifies the limit on the number of muxed connections
+ /// allowed per-property for the ORB. A value of 0 indicates no
+ /// limit
+ int max_muxed_connections_;
+
+ /// If <0> then we create reactors with signal handling disabled.
+ int reactor_mask_signals_;
+
+ /**
+ * Flag that is set to 1 if the reactor obtained from the
+ * get_reactor() method is dynamically allocated. If this flag is
+ * set to 1, then the reclaim_reactor() method with call the delete
+ * operator on the given reactor. This flag is necessary to make
+ * sure that a reactor not allocated by the default resource factory
+ * is not reclaimed by the default resource factory. Such a
+ * situation can occur when a resource factory derived from the
+ * default one overrides the get_reactor() method but does not
+ * override the reclaim_reactor() method.
+ */
+ int dynamically_allocated_reactor_;
+
+ virtual int load_default_protocols (void);
+
+ /// This flag is used to determine whether options have been
+ /// processed via the init() function. It is necessary to
+ /// properly report errors when the default factory is replaced.
+ int options_processed_;
+
+ /// This flag specifies whether the factory has been disabled.
+ /// If it has been disabled we should print warnings if options
+ /// were processed before (or later).
+ int factory_disabled_;
+
+ enum Output_CDR_Allocator_Type
+ {
+ LOCAL_MEMORY_POOL,
+#ifdef ACE_HAS_SENDFILE
+ MMAP_ALLOCATOR,
+#endif /* ACE_HAS_SENDFILE */
+ DEFAULT
+ };
+
+ /// Type of allocator to use for output CDR buffers.
+ Output_CDR_Allocator_Type output_cdr_allocator_type_;
+
+ /// This flag is used to determine whether the CDR allocators
+ /// should use the local memory pool or not.
+ bool use_local_memory_pool_;
+
+private:
+ void init_codeset_descriptors (void);
+
+ enum Lock_Type
+ {
+ TAO_NULL_LOCK,
+ TAO_THREAD_LOCK
+ };
+
+ /// Type of lock used by the cached connector.
+ Lock_Type cached_connection_lock_type_;
+
+ /// Type of lock used by the corba object.
+ Lock_Type object_key_table_lock_type_;
+
+ /// Type of lock used by the corba object.
+ Lock_Type corba_object_lock_type_;
+
+ enum Flushing_Strategy_Type
+ {
+ TAO_LEADER_FOLLOWER_FLUSHING,
+ TAO_REACTIVE_FLUSHING,
+ TAO_BLOCKING_FLUSHING
+ };
+
+ /// Type of flushing strategy configured
+ Flushing_Strategy_Type flushing_strategy_type_;
+
+ TAO_Codeset_Manager *codeset_manager_;
+ TAO_Codeset_Descriptor_Base *char_codeset_descriptor_;
+ TAO_Codeset_Descriptor_Base * wchar_codeset_descriptor_;
+
+ /// Resource usage strategy
+ Resource_Usage resource_usage_strategy_;
+
+ /// Flag to indicate whether replies should be dropped during ORB
+ /// shutdown.
+ bool drop_replies_;
+
+ // Makes a dependency on a specific dynamic service ("TAO_Codeset") explicit.
+ // It helps to keep the corresponding DLL around until the last instance
+ // is destroyed. Note that failure to delete the instances will "pin" the
+ // DLL in memory, preventing it from being unloaded on demand.
+ ACE_Dynamic_Service_Dependency *principal_;
+};
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+ACE_STATIC_SVC_DECLARE_EXPORT (TAO, TAO_Default_Resource_Factory)
+ACE_FACTORY_DECLARE (TAO, TAO_Default_Resource_Factory)
+
+#include /**/ "ace/post.h"
+#endif /* TAO_DEFAULT_CLIENT_H */