TAO's default resource factory. More...
#include <advanced_resource.h>


Public Types | |
| enum | Allocator_Lock_Type { TAO_ALLOCATOR_NULL_LOCK, TAO_ALLOCATOR_THREAD_LOCK } |
Type of lock used for the allocators. More... | |
| enum | { TAO_REACTOR_SELECT_MT = 1, TAO_REACTOR_SELECT_ST = 2, TAO_REACTOR_WFMO = 3, TAO_REACTOR_MSGWFMO = 4, TAO_REACTOR_TP = 5, TAO_REACTOR_DEV_POLL = 6 } |
Type of Reactor. More... | |
| enum | { TAO_THREAD_QUEUE_NOT_SET, TAO_THREAD_QUEUE_FIFO, TAO_THREAD_QUEUE_LIFO } |
Thread queueing Strategy. More... | |
Public Member Functions | |
| TAO_Advanced_Resource_Factory (void) | |
| Constructor. | |
| virtual | ~TAO_Advanced_Resource_Factory (void) |
| Destructor. | |
| virtual int | init (int argc, ACE_TCHAR *argv[]) |
| Dynamic linking hook. | |
| virtual TAO_Connection_Purging_Strategy * | create_purging_strategy (void) |
| Modify and get the source for the CDR allocators. | |
| virtual TAO_LF_Strategy * | create_lf_strategy (void) |
| Modify and get the source for the CDR allocators. | |
Resource Retrieval | |
| virtual int | init_protocol_factories (void) |
| Modify and get the source for the CDR allocators. | |
| virtual ACE_Allocator * | input_cdr_dblock_allocator (void) |
| Modify and get the source for the CDR allocators. | |
| virtual ACE_Allocator * | input_cdr_buffer_allocator (void) |
| Modify and get the source for the CDR allocators. | |
| virtual ACE_Allocator * | input_cdr_msgblock_allocator (void) |
| Modify and get the source for the CDR allocators. | |
| virtual ACE_Allocator * | amh_response_handler_allocator (void) |
| Modify and get the source for the CDR allocators. | |
| virtual ACE_Allocator * | ami_response_handler_allocator (void) |
| Modify and get the source for the CDR allocators. | |
| virtual int | input_cdr_allocator_type_locked (void) |
| Modify and get the source for the CDR allocators. | |
| virtual TAO_ProtocolFactorySet * | get_protocol_factories (void) |
| Modify and get the source for the CDR allocators. | |
Protected Member Functions | |
| virtual ACE_Reactor_Impl * | allocate_reactor_impl (void) const |
| Obtain the reactor implementation. | |
| void | report_option_value_error (const ACE_TCHAR *option_name, const ACE_TCHAR *option_value) |
| void | report_unsupported_error (const ACE_TCHAR *option_name) |
| virtual int | load_default_protocols (void) |
Protected Attributes | |
| TAO_ProtocolFactorySet | protocol_factories_ |
| List of loaded protocol factories. | |
| int | reactor_registry_type_ |
| The type of reactor registry. | |
| int | reactor_type_ |
| Flag indicating which kind of reactor we should use. | |
| int | threadqueue_type_ |
| Allocator_Lock_Type | cdr_allocator_type_ |
| The type of CDR allocators. | |
| Allocator_Lock_Type | amh_response_handler_allocator_lock_type_ |
| Type of lock used by AMH response handler allocator. | |
| Allocator_Lock_Type | ami_response_handler_allocator_lock_type_ |
| Type of lock used by AMI response handler allocator. | |
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.
Definition at line 39 of file advanced_resource.h.
| anonymous enum |
Type of Reactor.
| TAO_REACTOR_SELECT_MT |
Use ACE_Token. |
| TAO_REACTOR_SELECT_ST |
Use ACE_Noop_Token. |
| TAO_REACTOR_WFMO | |
| TAO_REACTOR_MSGWFMO | |
| TAO_REACTOR_TP | |
| TAO_REACTOR_DEV_POLL |
Definition at line 62 of file advanced_resource.h.
{
/// Use ACE_Token
TAO_REACTOR_SELECT_MT = 1,
/// Use ACE_Noop_Token
TAO_REACTOR_SELECT_ST = 2,
TAO_REACTOR_WFMO = 3,
TAO_REACTOR_MSGWFMO = 4,
TAO_REACTOR_TP = 5,
TAO_REACTOR_DEV_POLL = 6
};
| anonymous enum |
Thread queueing Strategy.
| TAO_THREAD_QUEUE_NOT_SET |
Not set, use LIFO. |
| TAO_THREAD_QUEUE_FIFO |
FIFO, first-in-first-out. |
| TAO_THREAD_QUEUE_LIFO |
LIFO, last-in-first-out (default). |
Definition at line 76 of file advanced_resource.h.
{
/// Not set, use LIFO.
TAO_THREAD_QUEUE_NOT_SET,
/// FIFO, first-in-first-out.
TAO_THREAD_QUEUE_FIFO,
/// LIFO, last-in-first-out (default).
TAO_THREAD_QUEUE_LIFO
};
Type of lock used for the allocators.
Definition at line 55 of file advanced_resource.h.
{
TAO_ALLOCATOR_NULL_LOCK,
TAO_ALLOCATOR_THREAD_LOCK
};
| TAO_Advanced_Resource_Factory::TAO_Advanced_Resource_Factory | ( | void | ) |
Constructor.
Definition at line 73 of file advanced_resource.cpp.
| TAO_Advanced_Resource_Factory::~TAO_Advanced_Resource_Factory | ( | void | ) | [virtual] |
Destructor.
Definition at line 83 of file advanced_resource.cpp.
{
// Destructor
TAO_ProtocolFactorySetItor end = this->protocol_factories_.end ();
for (TAO_ProtocolFactorySetItor iterator =
this->protocol_factories_.begin ();
iterator != end;
++iterator)
delete *iterator;
this->protocol_factories_.reset ();
}
| ACE_Reactor_Impl * TAO_Advanced_Resource_Factory::allocate_reactor_impl | ( | void | ) | const [protected, virtual] |
Obtain the reactor implementation.
Reimplemented from TAO_Default_Resource_Factory.
Definition at line 419 of file advanced_resource.cpp.
{
ACE_Reactor_Impl *impl = 0;
/*
* Hook for specializing the Reactor implementation in TAO.
*/
//@@ TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_START
switch (this->reactor_type_)
{
case TAO_REACTOR_SELECT_MT:
ACE_NEW_RETURN (impl,
TAO_REACTOR ((ACE_Sig_Handler*)0,
(ACE_Timer_Queue*)0,
0,
(ACE_Reactor_Notify*)0,
this->reactor_mask_signals_),
0);
break;
case TAO_REACTOR_SELECT_ST:
ACE_NEW_RETURN (impl,
TAO_NULL_LOCK_REACTOR ((ACE_Sig_Handler*)0,
(ACE_Timer_Queue*)0,
0,
(ACE_Reactor_Notify*)0,
this->reactor_mask_signals_),
0);
break;
case TAO_REACTOR_WFMO:
#if defined(ACE_WIN32)
ACE_NEW_RETURN (impl, ACE_WFMO_Reactor, 0);
#endif /* ACE_WIN32 */
break;
#if defined(ACE_WIN32) \
&& !defined (ACE_LACKS_MSG_WFMO) \
&& !defined (ACE_HAS_WINCE) \
&& !defined (ACE_HAS_PHARLAP)
case TAO_REACTOR_MSGWFMO:
ACE_NEW_RETURN (impl, ACE_Msg_WFMO_Reactor, 0);
break;
#endif /* ACE_WIN32 && !ACE_LACKS_MSG_WFMO */
#if defined (ACE_HAS_EVENT_POLL) || defined (ACE_HAS_DEV_POLL)
case TAO_REACTOR_DEV_POLL:
ACE_NEW_RETURN (impl,
ACE_Dev_Poll_Reactor (ACE::max_handles (),
1, // restart
(ACE_Sig_Handler*)0,
(ACE_Timer_Queue*)0,
0, // Do not disable notify
0, // Allocate notify handler
this->reactor_mask_signals_,
ACE_Select_Reactor_Token::LIFO),
0);
break;
#endif /* ACE_HAS_EVENT_POLL || ACE_HAS_DEV_POLL */
default:
case TAO_REACTOR_TP:
ACE_NEW_RETURN (impl,
ACE_TP_Reactor (ACE::max_handles (),
1,
(ACE_Sig_Handler*)0,
(ACE_Timer_Queue*)0,
this->reactor_mask_signals_,
this->threadqueue_type_ == TAO_THREAD_QUEUE_FIFO ?
ACE_Select_Reactor_Token::FIFO :
ACE_Select_Reactor_Token::LIFO),
0);
break;
}
//@@ TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_END
return impl;
}
| ACE_Allocator * TAO_Advanced_Resource_Factory::amh_response_handler_allocator | ( | void | ) | [virtual] |
Modify and get the source for the CDR allocators.
Reimplemented from TAO_Default_Resource_Factory.
Definition at line 559 of file advanced_resource.cpp.
{
ACE_Allocator *allocator = 0;
switch (this->amh_response_handler_allocator_lock_type_)
{
case TAO_ALLOCATOR_NULL_LOCK:
ACE_NEW_RETURN (allocator,
NULL_LOCK_ALLOCATOR,
0);
break;
default:
return
this->TAO_Default_Resource_Factory::amh_response_handler_allocator();
}
return allocator;
}
| ACE_Allocator * TAO_Advanced_Resource_Factory::ami_response_handler_allocator | ( | void | ) | [virtual] |
Modify and get the source for the CDR allocators.
Reimplemented from TAO_Default_Resource_Factory.
Definition at line 578 of file advanced_resource.cpp.
{
ACE_Allocator *allocator = 0;
switch (this->ami_response_handler_allocator_lock_type_)
{
case TAO_ALLOCATOR_NULL_LOCK:
ACE_NEW_RETURN (allocator,
NULL_LOCK_ALLOCATOR,
0);
break;
default:
return
this->TAO_Default_Resource_Factory::ami_response_handler_allocator();
}
return allocator;
}
| TAO_LF_Strategy * TAO_Advanced_Resource_Factory::create_lf_strategy | ( | void | ) | [virtual] |
Modify and get the source for the CDR allocators.
Reimplemented from TAO_Default_Resource_Factory.
Definition at line 644 of file advanced_resource.cpp.
{
TAO_LF_Strategy *strategy = 0;
if (this->reactor_type_ == TAO_REACTOR_SELECT_ST)
{
ACE_NEW_RETURN (strategy,
TAO_LF_Strategy_Null,
0);
}
else
{
ACE_NEW_RETURN (strategy,
TAO_LF_Strategy_Complete,
0);
}
return strategy;
}
| TAO_Connection_Purging_Strategy * TAO_Advanced_Resource_Factory::create_purging_strategy | ( | void | ) | [virtual] |
Modify and get the source for the CDR allocators.
Reimplemented from TAO_Default_Resource_Factory.
Definition at line 603 of file advanced_resource.cpp.
{
TAO_Connection_Purging_Strategy *strategy = 0;
switch(this->connection_purging_type_)
{
case TAO_Resource_Factory::LFU:
ACE_NEW_RETURN (strategy,
TAO_LFU_Connection_Purging_Strategy (
this->cache_maximum ()),
0);
break;
case TAO_Resource_Factory::FIFO:
ACE_NEW_RETURN (strategy,
TAO_FIFO_Connection_Purging_Strategy (
this->cache_maximum ()),
0);
break;
case TAO_Resource_Factory::NOOP:
ACE_NEW_RETURN (strategy,
TAO_NULL_Connection_Purging_Strategy (
this->cache_maximum ()),
0);
break;
case TAO_Resource_Factory::LRU:
ACE_NEW_RETURN (strategy,
TAO_LRU_Connection_Purging_Strategy (
this->cache_maximum ()),
0);
break;
default:
ACE_ERROR ((LM_ERROR,
ACE_TEXT("TAO (%P|%t) - ")
ACE_TEXT("Unknown connection purging strategy ")
ACE_TEXT("type was found.\n")));
}
return strategy;
}
| TAO_ProtocolFactorySet * TAO_Advanced_Resource_Factory::get_protocol_factories | ( | void | ) | [virtual] |
Modify and get the source for the CDR allocators.
Reimplemented from TAO_Default_Resource_Factory.
Definition at line 413 of file advanced_resource.cpp.
{
return &protocol_factories_;
}
| virtual int TAO_Advanced_Resource_Factory::init | ( | int | argc, | |
| ACE_TCHAR * | argv[] | |||
| ) | [virtual] |
Dynamic linking hook.
Reimplemented from TAO_Default_Resource_Factory.
| int TAO_Advanced_Resource_Factory::init_protocol_factories | ( | void | ) | [virtual] |
Modify and get the source for the CDR allocators.
Reimplemented from TAO_Default_Resource_Factory.
Definition at line 327 of file advanced_resource.cpp.
{
// If the default resource factory exists, then disable it.
// This causes any directives for the "Resource_Factory" to
// report warnings.
// This is needed to ensure warnings when no static directive
// for this factory is used (and init() is not called).
TAO_Resource_Factory *default_resource_factory =
ACE_Dynamic_Service<TAO_Resource_Factory>::instance ("Resource_Factory");
if (default_resource_factory != 0)
{
default_resource_factory->disable_factory();
}
TAO_ProtocolFactorySetItor end = protocol_factories_.end ();
TAO_ProtocolFactorySetItor factory = protocol_factories_.begin ();
if (factory == end)
{
int const r = this->load_default_protocols ();
if (r == -1)
return -1;
#if TAO_HAS_UIOP == 1
if (TAO::details::load_protocol_factory <TAO_UIOP_Protocol_Factory> (
this->protocol_factories_, "UIOP_Factory") == -1)
return -1;
#endif /* TAO_HAS_UIOP == 1 */
#if defined (TAO_HAS_SHMIOP) && (TAO_HAS_SHMIOP != 0)
if (TAO::details::load_protocol_factory <TAO_SHMIOP_Protocol_Factory> (
this->protocol_factories_, "SHMIOP_Factory") == -1)
return -1;
#endif /* TAO_HAS_SHMIOP && TAO_HAS_SHMIOP != 0 */
#if defined (TAO_HAS_DIOP) && (TAO_HAS_DIOP != 0)
if (TAO::details::load_protocol_factory <TAO_DIOP_Protocol_Factory> (
this->protocol_factories_, "DIOP_Factory") == -1)
return -1;
#endif /* TAO_HAS_DIOP && TAO_HAS_DIOP != 0 */
#if defined (TAO_HAS_SCIOP) && (TAO_HAS_SCIOP != 0)
if (TAO::details::load_protocol_factory <TAO_SCIOP_Protocol_Factory> (
this->protocol_factories_, "SCIOP_Factory") == -1)
return -1;
#endif /* TAO_HAS_SCIOP && TAO_HAS_SCIOP != 0 */
#if defined (TAO_HAS_COIOP) && (TAO_HAS_COIOP != 0)
if (TAO::details::load_protocol_factory <TAO_COIOP_Protocol_Factory> (
this->protocol_factories_, "COIOP_Factory") == -1)
return -1;
#endif /* TAO_HAS_COIOP && TAO_HAS_COIOP != 0 */
return 0;
}
for (; factory != end; factory++)
{
const ACE_CString &name = (*factory)->protocol_name ();
(*factory)->factory (
ACE_Dynamic_Service<TAO_Protocol_Factory>::instance (name.c_str ()));
if ((*factory)->factory () == 0)
{
ACE_ERROR_RETURN ((LM_ERROR,
ACE_TEXT("TAO (%P|%t) Unable to load ")
ACE_TEXT("protocol <%C>, %m\n"),
name.c_str ()),
-1);
}
if (TAO_debug_level > 0)
{
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT("TAO (%P|%t) Loaded protocol <%C>\n"),
name.c_str ()));
}
}
return 0;
}
| int TAO_Advanced_Resource_Factory::input_cdr_allocator_type_locked | ( | void | ) | [virtual] |
Modify and get the source for the CDR allocators.
Reimplemented from TAO_Default_Resource_Factory.
Definition at line 597 of file advanced_resource.cpp.
{
return this->cdr_allocator_type_ == TAO_ALLOCATOR_NULL_LOCK ? 0 : 1;
}
| ACE_Allocator * TAO_Advanced_Resource_Factory::input_cdr_buffer_allocator | ( | void | ) | [virtual] |
Modify and get the source for the CDR allocators.
Reimplemented from TAO_Default_Resource_Factory.
Definition at line 522 of file advanced_resource.cpp.
{
ACE_Allocator *allocator = 0;
switch (this->cdr_allocator_type_)
{
case TAO_ALLOCATOR_NULL_LOCK:
ACE_NEW_RETURN (allocator,
NULL_LOCK_ALLOCATOR,
0);
break;
default:
return
this->TAO_Default_Resource_Factory::input_cdr_buffer_allocator();
}
return allocator;
}
| ACE_Allocator * TAO_Advanced_Resource_Factory::input_cdr_dblock_allocator | ( | void | ) | [virtual] |
Modify and get the source for the CDR allocators.
Reimplemented from TAO_Default_Resource_Factory.
Definition at line 503 of file advanced_resource.cpp.
{
ACE_Allocator *allocator = 0;
switch (this->cdr_allocator_type_)
{
case TAO_ALLOCATOR_NULL_LOCK:
ACE_NEW_RETURN (allocator,
NULL_LOCK_ALLOCATOR,
0);
break;
default:
return
this->TAO_Default_Resource_Factory::input_cdr_dblock_allocator();
}
return allocator;
}
| ACE_Allocator * TAO_Advanced_Resource_Factory::input_cdr_msgblock_allocator | ( | void | ) | [virtual] |
Modify and get the source for the CDR allocators.
Reimplemented from TAO_Default_Resource_Factory.
Definition at line 540 of file advanced_resource.cpp.
{
ACE_Allocator *allocator = 0;
switch (this->cdr_allocator_type_)
{
case TAO_ALLOCATOR_NULL_LOCK:
ACE_NEW_RETURN (allocator,
NULL_LOCK_ALLOCATOR,
0);
break;
default:
return
this->TAO_Default_Resource_Factory::input_cdr_msgblock_allocator();
}
return allocator;
}
| int TAO_Advanced_Resource_Factory::load_default_protocols | ( | void | ) | [protected, virtual] |
Loads the default protocols. This method is used so that the advanced_resource.cpp can call the one in default_resource.cpp without calling unnecessary functions.
Reimplemented from TAO_Default_Resource_Factory.
Definition at line 308 of file advanced_resource.cpp.
{
int const r =
this->TAO_Default_Resource_Factory::load_default_protocols ();
this->protocol_factories_ =
this->TAO_Default_Resource_Factory::protocol_factories_;
this->TAO_Default_Resource_Factory::protocol_factories_.reset ();
if (r == -1)
return -1;
// Load the UIOP and SHMIOP protocols...
return 0;
}
| void TAO_Advanced_Resource_Factory::report_option_value_error | ( | const ACE_TCHAR * | option_name, | |
| const ACE_TCHAR * | option_value | |||
| ) | [protected] |
Reimplemented from TAO_Default_Resource_Factory.
Definition at line 664 of file advanced_resource.cpp.
| void TAO_Advanced_Resource_Factory::report_unsupported_error | ( | const ACE_TCHAR * | option_name | ) | [protected] |
Definition at line 676 of file advanced_resource.cpp.
Allocator_Lock_Type TAO_Advanced_Resource_Factory::amh_response_handler_allocator_lock_type_ [protected] |
Type of lock used by AMH response handler allocator.
Definition at line 132 of file advanced_resource.h.
Allocator_Lock_Type TAO_Advanced_Resource_Factory::ami_response_handler_allocator_lock_type_ [protected] |
Type of lock used by AMI response handler allocator.
Definition at line 135 of file advanced_resource.h.
The type of CDR allocators.
Definition at line 129 of file advanced_resource.h.
List of loaded protocol factories.
Reimplemented from TAO_Default_Resource_Factory.
Definition at line 116 of file advanced_resource.h.
int TAO_Advanced_Resource_Factory::reactor_registry_type_ [protected] |
The type of reactor registry.
Definition at line 119 of file advanced_resource.h.
int TAO_Advanced_Resource_Factory::reactor_type_ [protected] |
Flag indicating which kind of reactor we should use.
Definition at line 122 of file advanced_resource.h.
int TAO_Advanced_Resource_Factory::threadqueue_type_ [protected] |
The type of queueing strategy to use for multi-threaded select reactors, TAO_REACTOR_SELECT_MT and TAO_REACTOR_TP.
Definition at line 126 of file advanced_resource.h.
1.7.0