diff options
author | kirthika <kirthika@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-07-19 22:51:11 +0000 |
---|---|---|
committer | kirthika <kirthika@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-07-19 22:51:11 +0000 |
commit | ad419fcf8dc2708b7a7a6a881d01fe56ab16c15a (patch) | |
tree | d8f4c4f9ab059c5158d6924ed039993285f5ad1c | |
parent | 52904c0eaa542ce9d63c34a6d83fd78649cc8eca (diff) | |
download | ATCD-ad419fcf8dc2708b7a7a6a881d01fe56ab16c15a.tar.gz |
Added changes to incorporate the new cached_connect strategy and cachig strategies.
-rw-r--r-- | TAO/tao/UIOP_Connector.cpp | 214 | ||||
-rw-r--r-- | TAO/tao/UIOP_Connector.h | 64 |
2 files changed, 262 insertions, 16 deletions
diff --git a/TAO/tao/UIOP_Connector.cpp b/TAO/tao/UIOP_Connector.cpp index 8c756eea8eb..8469ed57343 100644 --- a/TAO/tao/UIOP_Connector.cpp +++ b/TAO/tao/UIOP_Connector.cpp @@ -55,11 +55,6 @@ TAO_UIOP_Connect_Creation_Strategy::make_svc_handler ( // **************************************************************** -typedef ACE_Cached_Connect_Strategy<TAO_UIOP_Client_Connection_Handler, - ACE_LSOCK_CONNECTOR, - TAO_Cached_Connector_Lock> - TAO_CACHED_CONNECT_STRATEGY; - TAO_UIOP_Connector::TAO_UIOP_Connector (void) : TAO_Connector (TAO_IOP_TAG_UNIX_IOP), base_connector_ (), @@ -77,8 +72,12 @@ TAO_UIOP_Connector::open (TAO_ORB_Core *orb_core) TAO_Cached_Connector_Lock (orb_core), -1); - TAO_CACHED_CONNECT_STRATEGY* cached_connect_strategy = - new TAO_CACHED_CONNECT_STRATEGY ( + int result = make_connection_caching_strategy (); + if (result == -1) + return -1; + + this->cached_connect_strategy_ = + new TAO_CACHED_CONNECT_STRATEGY (*this->caching_strategy_, new TAO_UIOP_Connect_Creation_Strategy ( orb_core->thr_mgr (), orb_core), @@ -89,7 +88,7 @@ TAO_UIOP_Connector::open (TAO_ORB_Core *orb_core) return this->base_connector_.open (orb_core->reactor (), &this->null_creation_strategy_, - cached_connect_strategy, + this->cached_connect_strategy_, &this->null_activation_strategy_); } @@ -102,12 +101,118 @@ TAO_UIOP_Connector::close (void) // Zap the creation strategy that we created earlier delete cached_connect_strategy->creation_strategy (); - delete cached_connect_strategy; + delete cached_connect_strategy_; + delete caching_strategy_; this->base_connector_.close (); return 0; } +// = Typedefs for the Connection Caching Strategy. +typedef size_t ATTRIBUTES; +typedef ACE_Pair<TAO_UIOP_Client_Connection_Handler *, ATTRIBUTES> + CACHED_HANDLER; +typedef ACE_Refcounted_Hash_Recyclable<ACE_UNIX_Addr> + UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR; +typedef ACE_Hash_Map_Manager_Ex<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, ACE_Hash<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_Equal_To<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_Null_Mutex> + UIOP_HASH_MAP; +typedef ACE_Hash_Map_Iterator_Ex<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, ACE_Hash<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_Equal_To<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_Null_Mutex> + UIOP_HASH_ITERATOR; +typedef ACE_Hash_Map_Reverse_Iterator_Ex<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, ACE_Hash<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_Equal_To<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_Null_Mutex> + UIOP_HASH_REVERSE_ITERATOR; +typedef ACE_Recyclable_Handler_Caching_Utility<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, UIOP_HASH_MAP, UIOP_HASH_ITERATOR, ATTRIBUTES> + UIOP_CACHING_UTILITY; + +typedef ACE_LRU_Caching_Strategy<ATTRIBUTES, UIOP_CACHING_UTILITY> + LRU_UIOP_CACHING_STRATEGY; + +#if defined (ACE_HAS_BROKEN_EXTENDED_TEMPLATES) + typedef LRU_UIOP_CACHING_STRATEGY + UIOP_CACHING_STRATEGY; +#else + typedef ACE_Caching_Strategy<ATTRIBUTES, UIOP_CACHING_UTILITY> + UIOP_CACHING_STRATEGY; + typedef ACE_LFU_Caching_Strategy<ATTRIBUTES, UIOP_CACHING_UTILITY> + LFU_UIOP_CACHING_STRATEGY; + typedef ACE_FIFO_Caching_Strategy<ATTRIBUTES, UIOP_CACHING_UTILITY> + FIFO_UIOP_CACHING_STRATEGY; + typedef ACE_Null_Caching_Strategy<ATTRIBUTES, UIOP_CACHING_UTILITY> + NULL_UIOP_CACHING_STRATEGY; + typedef ACE_Caching_Strategy_Adapter<ATTRIBUTES, UIOP_CACHING_UTILITY, LRU_UIOP_CACHING_STRATEGY> + LRU_UIOP_CACHING_STRATEGY_ADAPTER; + typedef ACE_Caching_Strategy_Adapter<ATTRIBUTES, UIOP_CACHING_UTILITY, LFU_UIOP_CACHING_STRATEGY> + LFU_UIOP_CACHING_STRATEGY_ADAPTER; + typedef ACE_Caching_Strategy_Adapter<ATTRIBUTES, UIOP_CACHING_UTILITY, FIFO_UIOP_CACHING_STRATEGY> + FIFO_UIOP_CACHING_STRATEGY_ADAPTER; + typedef ACE_Caching_Strategy_Adapter<ATTRIBUTES, UIOP_CACHING_UTILITY, NULL_UIOP_CACHING_STRATEGY> + NULL_UIOP_CACHING_STRATEGY_ADAPTER; +#endif /* ACE_HAS_BROKEN_EXTENDED_TEMPLATES */ + +typedef ACE_Cached_Connect_Strategy_Ex<TAO_UIOP_Client_Connection_Handler, ACE_LSOCK_CONNECTOR, UIOP_CACHING_STRATEGY, ATTRIBUTES, TAO_Cached_Connector_Lock> + TAO_CACHED_CONNECT_STRATEGY; + +TAO_CACHED_CONNECT_STRATEGY & +TAO_UIOP_Connector::cached_connect_strategy (void) +{ + return *this->cached_connect_strategy_; +} + +int +TAO_UIOP_Connector::make_connection_caching_strategy (void) +{ + +#if defined (ACE_HAS_BROKEN_EXTENDED_TEMPLATES) + if (TAO_debug_level > 0) + ACE_DEBUG ((LM_DEBUG, "\nLRU_Caching_Strategy\n\n")); + ACE_NEW_RETURN (this->caching_strategy_, + UIOP_CACHING_STRATEGY, + -1); +#else + + this->caching_strategy_ = 0; + + switch (this->orb_core_->connection_caching_strategy_type ()) + { + case TAO_NULL: + if (TAO_debug_level > 0) + ACE_DEBUG ((LM_DEBUG, "\nNull_Caching_Strategy\n\n")); + ACE_NEW_RETURN (this->caching_strategy_, + NULL_UIOP_CACHING_STRATEGY_ADAPTER, + -1); + break; + + default: + case TAO_LRU: + if (TAO_debug_level > 0) + ACE_DEBUG ((LM_DEBUG, "\nLRU_Caching_Strategy\n\n")); + ACE_NEW_RETURN (this->caching_strategy_, + LRU_UIOP_CACHING_STRATEGY_ADAPTER, + -1); + break; + + case TAO_LFU: + if (TAO_debug_level > 0) + ACE_DEBUG ((LM_DEBUG, "\nLFU_Caching_Strategy\n\n")); + ACE_NEW_RETURN (this->caching_strategy_, + LFU_UIOP_CACHING_STRATEGY_ADAPTER, + -1); + break; + + case TAO_FIFO: + if (TAO_debug_level > 0) + ACE_DEBUG ((LM_DEBUG, "\nFIFO_Caching_Strategy\n\n")); + ACE_NEW_RETURN (this->caching_strategy_, + FIFO_UIOP_CACHING_STRATEGY_ADAPTER, + -1); + break; + + } +#endif /* ACE_HAS_BROKEN_EXTENDED_TEMPLATES */ + + this->caching_strategy_->purge_percent (this->orb_core_->purge_percentage ()); + return 0; +} + int TAO_UIOP_Connector::connect (TAO_Profile *profile, TAO_Transport *& transport, @@ -353,7 +458,6 @@ TAO_UIOP_Connector::object_key_delimiter (void) const } #define TAO_UIOP_SVC_TUPLE ACE_Svc_Tuple<TAO_UIOP_Client_Connection_Handler> -#define UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR ACE_Refcounted_Hash_Recyclable<ACE_UNIX_Addr> # if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) @@ -364,8 +468,7 @@ template class ACE_Unbounded_Stack_Iterator<ACE_UNIX_Addr>; template class ACE_Connector<TAO_UIOP_Client_Connection_Handler, ACE_LSOCK_CONNECTOR>; template class ACE_Connect_Strategy<TAO_UIOP_Client_Connection_Handler, ACE_LSOCK_CONNECTOR>; template class ACE_Cached_Connect_Strategy<TAO_UIOP_Client_Connection_Handler, ACE_LSOCK_CONNECTOR, TAO_Cached_Connector_Lock>; -template class ACE_Strategy_Connector<TAO_UIOP_Client_Connection_Handler, - ACE_LSOCK_CONNECTOR>; +template class ACE_Strategy_Connector<TAO_UIOP_Client_Connection_Handler, ACE_LSOCK_CONNECTOR>; template class ACE_Concurrency_Strategy<TAO_UIOP_Client_Connection_Handler>; template class ACE_Creation_Strategy<TAO_UIOP_Client_Connection_Handler>; @@ -375,7 +478,7 @@ template class ACE_NOOP_Concurrency_Strategy<TAO_UIOP_Client_Connection_Handler> template class ACE_Recycling_Strategy<TAO_UIOP_Client_Connection_Handler>; template class ACE_Svc_Handler<ACE_LSOCK_STREAM, ACE_NULL_SYNCH>; -template class UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR; +template class ACE_Refcounted_Hash_Recyclable<ACE_UNIX_Addr>; template class TAO_UIOP_SVC_TUPLE; template class ACE_Map_Manager<int, TAO_UIOP_SVC_TUPLE*, ACE_SYNCH_RW_MUTEX>; template class ACE_Map_Iterator_Base<int, TAO_UIOP_SVC_TUPLE*, ACE_SYNCH_RW_MUTEX>; @@ -407,6 +510,48 @@ template class ACE_Hash_Map_Bucket_Iterator<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR template class ACE_Hash_Map_Reverse_Iterator<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_UIOP_Client_Connection_Handler *, ACE_SYNCH_NULL_MUTEX>; template class ACE_Hash_Map_Reverse_Iterator_Ex<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_UIOP_Client_Connection_Handler *, ACE_Hash<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_Equal_To<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_SYNCH_NULL_MUTEX>; +// = Caching Strategy +template class ACE_Pair<TAO_UIOP_Client_Connection_Handler *, ATTRIBUTES>; +template class ACE_Reference_Pair<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_UIOP_Client_Connection_Handler *>; +template class ACE_Hash_Map_Entry<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER>; +template class ACE_Hash_Map_Manager_Ex<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, ACE_Hash<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_Equal_To<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_SYNCH_NULL_MUTEX>; +template class ACE_Hash_Map_Iterator_Ex<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, ACE_Hash<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_Equal_To<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_SYNCH_NULL_MUTEX>; +template class ACE_Hash_Map_Reverse_Iterator_Ex<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, ACE_Hash<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_Equal_To<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_SYNCH_NULL_MUTEX>; +template class ACE_Hash_Map_Iterator_Base_Ex<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, ACE_Hash<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_Equal_To<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_SYNCH_NULL_MUTEX>; +template class ACE_Hash_Map_Manager<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, ACE_SYNCH_NULL_MUTEX>; +template class ACE_Hash_Map_Iterator<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, ACE_SYNCH_NULL_MUTEX>; +template class ACE_Hash_Map_Reverse_Iterator<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, ACE_SYNCH_NULL_MUTEX>; +template class ACE_Hash_Map_Bucket_Iterator<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, ACE_Hash<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_Equal_To<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_SYNCH_NULL_MUTEX>; + +template class ACE_Recyclable_Handler_Cleanup_Strategy<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, UIOP_HASH_MAP>; +template class ACE_Cleanup_Strategy<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, UIOP_HASH_MAP>; + +template class ACE_Recyclable_Handler_Caching_Utility<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, UIOP_HASH_MAP, UIOP_HASH_ITERATOR, ATTRIBUTES>; +template class ACE_Hash_Cache_Map_Manager<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_UIOP_Client_Connection_Handler *, ACE_Hash<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_Equal_To<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, UIOP_CACHING_STRATEGY, ATTRIBUTES>; +template class ACE_LRU_Caching_Strategy<ATTRIBUTES, UIOP_CACHING_UTILITY>; + +#if !defined (ACE_HAS_BROKEN_EXTENDED_TEMPLATES) +template class ACE_Caching_Strategy<ATTRIBUTES, UIOP_CACHING_UTILITY>; +template class ACE_LFU_Caching_Strategy<ATTRIBUTES, UIOP_CACHING_UTILITY>; +template class ACE_FIFO_Caching_Strategy<ATTRIBUTES, UIOP_CACHING_UTILITY>; +template class ACE_Null_Caching_Strategy<ATTRIBUTES, UIOP_CACHING_UTILITY>; +template class ACE_Caching_Strategy_Adapter<ATTRIBUTES, UIOP_CACHING_UTILITY, LRU_UIOP_CACHING_STRATEGY>; +template class ACE_Caching_Strategy_Adapter<ATTRIBUTES, UIOP_CACHING_UTILITY, LFU_UIOP_CACHING_STRATEGY>; +template class ACE_Caching_Strategy_Adapter<ATTRIBUTES, UIOP_CACHING_UTILITY, FIFO_UIOP_CACHING_STRATEGY>; +template class ACE_Caching_Strategy_Adapter<ATTRIBUTES, UIOP_CACHING_UTILITY, NULL_UIOP_CACHING_STRATEGY>; + +template class ACE_Cache_Map_Manager<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_UIOP_Client_Connection_Handler *, UIOP_HASH_MAP, UIOP_HASH_ITERATOR, UIOP_HASH_REVERSE_ITERATOR, UIOP_CACHING_STRATEGY, ATTRIBUTES>; +template class ACE_Cache_Map_Iterator<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_UIOP_Client_Connection_Handler *, UIOP_HASH_ITERATOR, UIOP_CACHING_STRATEGY, ATTRIBUTES>; +template class ACE_Cache_Map_Reverse_Iterator<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_UIOP_Client_Connection_Handler *, UIOP_HASH_REVERSE_ITERATOR, UIOP_CACHING_STRATEGY, ATTRIBUTES>; + +#else + +template class ACE_Cache_Map_Manager<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_UIOP_Client_Connection_Handler *, UIOP_HASH_MAP, UIOP_CACHING_STRATEGY, ATTRIBUTES>; + +#endif /* ACE_HAS_BROKEN_EXTENDED_TEMPLATES */ + +template class ACE_Cached_Connect_Strategy_Ex<TAO_UIOP_Client_Connection_Handler, ACE_LSOCK_CONNECTOR, UIOP_CACHING_STRATEGY, ATTRIBUTES, TAO_Cached_Connector_Lock>; + # elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) #pragma instantiate ACE_Node<ACE_UNIX_Addr> @@ -427,7 +572,7 @@ template class ACE_Hash_Map_Reverse_Iterator_Ex<UIOP_REFCOUNTED_HASH_RECYCLABLE_ #pragma instantiate ACE_Recycling_Strategy<TAO_UIOP_Client_Connection_Handler> #pragma instantiate ACE_Svc_Handler<ACE_LSOCK_STREAM, ACE_NULL_SYNCH> -#pragma instantiate UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR +#pragma instantiate ACE_Refcounted_Hash_Recyclable<ACE_UNIX_Addr> #pragma instantiate TAO_UIOP_SVC_TUPLE #pragma instantiate ACE_Map_Manager<int, TAO_UIOP_SVC_TUPLE*, ACE_SYNCH_RW_MUTEX> #pragma instantiate ACE_Map_Iterator_Base<int, TAO_UIOP_SVC_TUPLE*, ACE_SYNCH_RW_MUTEX> @@ -459,6 +604,47 @@ template class ACE_Hash_Map_Reverse_Iterator_Ex<UIOP_REFCOUNTED_HASH_RECYCLABLE_ #pragma instantiate ACE_Hash_Map_Reverse_Iterator<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_UIOP_Client_Connection_Handler *, ACE_SYNCH_NULL_MUTEX> #pragma instantiate ACE_Hash_Map_Reverse_Iterator_Ex<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_UIOP_Client_Connection_Handler *, ACE_Hash<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_Equal_To<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_SYNCH_NULL_MUTEX> +// = Caching Strategy +#pragma instantiate ACE_Pair<TAO_UIOP_Client_Connection_Handler *, ATTRIBUTES> +#pragma instantiate ACE_Reference_Pair<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_UIOP_Client_Connection_Handler *> +#pragma instantiate ACE_Hash_Map_Entry<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER> +#pragma instantiate ACE_Hash_Map_Manager_Ex<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, ACE_Hash<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_Equal_To<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_SYNCH_NULL_MUTEX> +#pragma instantiate ACE_Hash_Map_Iterator_Ex<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, ACE_Hash<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_Equal_To<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_SYNCH_NULL_MUTEX> +#pragma instantiate ACE_Hash_Map_Reverse_Iterator_Ex<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, ACE_Hash<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_Equal_To<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_SYNCH_NULL_MUTEX> +#pragma instantiate ACE_Hash_Map_Iterator_Base_Ex<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, ACE_Hash<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_Equal_To<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_SYNCH_NULL_MUTEX> +#pragma instantiate ACE_Hash_Map_Manager<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, ACE_SYNCH_NULL_MUTEX> +#pragma instantiate ACE_Hash_Map_Iterator<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, ACE_SYNCH_NULL_MUTEX> +#pragma instantiate ACE_Hash_Map_Reverse_Iterator<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, ACE_SYNCH_NULL_MUTEX> +#pragma instantiate ACE_Hash_Map_Bucket_Iterator<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, ACE_Hash<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_Equal_To<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_SYNCH_NULL_MUTEX> + +#pragma instantiate ACE_Recyclable_Handler_Cleanup_Strategy<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, UIOP_HASH_MAP> +#pragma instantiate ACE_Cleanup_Strategy<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, UIOP_HASH_MAP> +#pragma instantiate ACE_Recyclable_Handler_Caching_Utility<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, CACHED_HANDLER, UIOP_HASH_MAP, UIOP_HASH_ITERATOR, ATTRIBUTES> + +#pragma instantiate ACE_Hash_Cache_Map_Manager<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_UIOP_Client_Connection_Handler *, ACE_Hash<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, ACE_Equal_To<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR>, UIOP_CACHING_STRATEGY, ATTRIBUTES> +#pragma instantiate ACE_LRU_Caching_Strategy<ATTRIBUTES, UIOP_CACHING_UTILITY> + +#if !defined (ACE_HAS_BROKEN_EXTENDED_TEMPLATES) +#pragma instantiate ACE_Caching_Strategy<ATTRIBUTES, UIOP_CACHING_UTILITY> +#pragma instantiate ACE_LFU_Caching_Strategy<ATTRIBUTES, UIOP_CACHING_UTILITY> +#pragma instantiate ACE_FIFO_Caching_Strategy<ATTRIBUTES, UIOP_CACHING_UTILITY> +#pragma instantiate ACE_Null_Caching_Strategy<ATTRIBUTES, UIOP_CACHING_UTILITY> +#pragma instantiate ACE_Caching_Strategy_Adapter<ATTRIBUTES, UIOP_CACHING_UTILITY, LRU_UIOP_CACHING_STRATEGY> +#pragma instantiate ACE_Caching_Strategy_Adapter<ATTRIBUTES, UIOP_CACHING_UTILITY, LFU_UIOP_CACHING_STRATEGY> +#pragma instantiate ACE_Caching_Strategy_Adapter<ATTRIBUTES, UIOP_CACHING_UTILITY, FIFO_UIOP_CACHING_STRATEGY> +#pragma instantiate ACE_Caching_Strategy_Adapter<ATTRIBUTES, UIOP_CACHING_UTILITY, NULL_UIOP_CACHING_STRATEGY> + +#pragma instantiate ACE_Cache_Map_Manager<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_UIOP_Client_Connection_Handler *, UIOP_HASH_MAP, UIOP_HASH_ITERATOR, UIOP_HASH_REVERSE_ITERATOR, UIOP_CACHING_STRATEGY, ATTRIBUTES> +#pragma instantiate ACE_Cache_Map_Iterator<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_UIOP_Client_Connection_Handler *, UIOP_HASH_ITERATOR, UIOP_CACHING_STRATEGY, ATTRIBUTES> +#pragma instantiate ACE_Cache_Map_Reverse_Iterator<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_UIOP_Client_Connection_Handler *, UIOP_HASH_REVERSE_ITERATOR, UIOP_CACHING_STRATEGY, ATTRIBUTES> + +#else + +#pragma instantiate ACE_Cache_Map_Manager<UIOP_REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_UIOP_Client_Connection_Handler *, UIOP_HASH_MAP, UIOP_CACHING_STRATEGY, ATTRIBUTES> +#endif /* ACE_HAS_BROKEN_EXTENDED_TEMPLATES */ + +#pragma instantiate ACE_Cached_Connect_Strategy_Ex<TAO_UIOP_Client_Connection_Handler, ACE_LSOCK_CONNECTOR, UIOP_CACHING_STRATEGY, ATTRIBUTES, TAO_Cached_Connector_Lock> + # endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ #endif /* !ACE_LACKS_UNIX_DOMAIN_SOCKETS */ diff --git a/TAO/tao/UIOP_Connector.h b/TAO/tao/UIOP_Connector.h index 950cb74233a..5382d9257b8 100644 --- a/TAO/tao/UIOP_Connector.h +++ b/TAO/tao/UIOP_Connector.h @@ -33,9 +33,16 @@ #include "tao/Pluggable.h" #include "tao/UIOP_Connect.h" +#include "tao/Resource_Factory.h" -typedef ACE_Strategy_Connector<TAO_UIOP_Client_Connection_Handler, - ACE_LSOCK_CONNECTOR> TAO_UIOP_BASE_CONNECTOR; +#if defined(__GNUC__) && __GNUC__ == 2 && __GNUC_MINOR__ < 8 +#define ACE_HAS_BROKEN_EXTENDED_TEMPLATES +#endif /* __GNUC__ */ + +#include "ace/Cached_Connect_Strategy_T.h" + +typedef ACE_Strategy_Connector<TAO_UIOP_Client_Connection_Handler, ACE_LSOCK_CONNECTOR> + TAO_UIOP_BASE_CONNECTOR; // **************************************************************** @@ -91,6 +98,37 @@ public: virtual char object_key_delimiter (void) const; + // = Connection Caching Strategy. Used with TAO_UIOP_Connector. + typedef size_t ATTRIBUTES; + typedef ACE_Refcounted_Hash_Recyclable<ACE_UNIX_Addr> + UIOP_ADDR; + typedef ACE_Pair<TAO_UIOP_Client_Connection_Handler *, ATTRIBUTES> + UIOP_CACHED_HANDLER; + typedef ACE_Hash<UIOP_ADDR> UIOP_HASH_KEY; + typedef ACE_Equal_To<UIOP_ADDR> UIOP_CMP_KEYS; + typedef ACE_Hash_Map_Manager_Ex<UIOP_ADDR, UIOP_CACHED_HANDLER, UIOP_HASH_KEY, UIOP_CMP_KEYS, ACE_Null_Mutex> + UIOP_HASH_MAP; + typedef ACE_Hash_Map_Iterator_Ex<UIOP_ADDR, UIOP_CACHED_HANDLER, UIOP_HASH_KEY, UIOP_CMP_KEYS, ACE_Null_Mutex> + UIOP_HASH_ITERATOR; + typedef ACE_Hash_Map_Reverse_Iterator_Ex<UIOP_ADDR, UIOP_CACHED_HANDLER, UIOP_HASH_KEY, UIOP_CMP_KEYS, ACE_Null_Mutex> + UIOP_HASH_REVERSE_ITERATOR; + typedef ACE_Recyclable_Handler_Cleanup_Strategy<UIOP_ADDR, UIOP_CACHED_HANDLER, UIOP_HASH_MAP> + UIOP_CLEANUP_STRATEGY; + typedef ACE_Recyclable_Handler_Caching_Utility<UIOP_ADDR, UIOP_CACHED_HANDLER, UIOP_HASH_MAP, UIOP_HASH_ITERATOR, ATTRIBUTES> + UIOP_CACHING_UTILITY; +#if defined (ACE_HAS_BROKEN_EXTENDED_TEMPLATES) + typedef ACE_LRU_Caching_Strategy<ATTRIBUTES, UIOP_CACHING_UTILITY> + UIOP_CACHING_STRATEGY; +#else + typedef ACE_Caching_Strategy<ATTRIBUTES, UIOP_CACHING_UTILITY> + UIOP_CACHING_STRATEGY; +#endif /* ACE_HAS_BROKEN_EXTENDED_TEMPLATES */ + typedef ACE_Cached_Connect_Strategy_Ex<TAO_UIOP_Client_Connection_Handler, ACE_LSOCK_CONNECTOR, UIOP_CACHING_STRATEGY, ATTRIBUTES, TAO_Cached_Connector_Lock> + TAO_CACHED_CONNECT_STRATEGY; + + virtual TAO_CACHED_CONNECT_STRATEGY &cached_connect_strategy (void); + // Accessor to the connect strategy. + protected: // = More TAO_Connector methods, please check the documentation on // Pluggable.h @@ -98,6 +136,10 @@ protected: TAO_Profile *&, CORBA::Environment &ACE_TRY_ENV = TAO_default_environment ()); + virtual int make_connection_caching_strategy (void); + // According to the option specified, create the appropriate caching strategy used for purging + // unused connections from the connection cache. + protected: typedef ACE_NOOP_Creation_Strategy<TAO_UIOP_Client_Connection_Handler> TAO_NULL_CREATION_STRATEGY; @@ -105,10 +147,28 @@ protected: typedef ACE_NOOP_Concurrency_Strategy<TAO_UIOP_Client_Connection_Handler> TAO_NULL_ACTIVATION_STRATEGY; + enum + { + TAO_LRU, // Use Least Recently Used caching strategy + TAO_LFU, // Use Least Frequently Used caching strategy + TAO_FIFO, // Use First In First Out caching strategy + TAO_NULL // Dont use any strategy. + }; + private: TAO_NULL_CREATION_STRATEGY null_creation_strategy_; TAO_NULL_ACTIVATION_STRATEGY null_activation_strategy_; + TAO_CACHED_CONNECT_STRATEGY *cached_connect_strategy_; + // This is the connection strategy. + + UIOP_CACHING_STRATEGY *caching_strategy_; + // This is the caching strategy which decides the order of removal + // of entries from the connection cache. This can be decided at + // run-time by using the -ORBConnectionCachingStrategy option. The + // choices are: Least Recently Used, Least Frequently Used, First In + // First Out, and Null (which does nothing). By default, LRU is used. + TAO_UIOP_BASE_CONNECTOR base_connector_; // The connector initiating connection requests for UIOP. |