diff options
Diffstat (limited to 'TAO/tao/SHMIOP_Connector.cpp')
-rw-r--r-- | TAO/tao/SHMIOP_Connector.cpp | 529 |
1 files changed, 131 insertions, 398 deletions
diff --git a/TAO/tao/SHMIOP_Connector.cpp b/TAO/tao/SHMIOP_Connector.cpp index a1edfd21874..616de94e0ae 100644 --- a/TAO/tao/SHMIOP_Connector.cpp +++ b/TAO/tao/SHMIOP_Connector.cpp @@ -14,291 +14,58 @@ ACE_RCSID(tao, SHMIOP_Connector, "$Id$") -#if defined (TAO_USES_ROBUST_CONNECTION_MGMT) -int -TAO_SHMIOP_Connector::purge_connections (void) -{ - return this->cached_connect_strategy_->purge_connections (); -} - -#define TAO_HANDLER TAO_SHMIOP_Client_Connection_Handler -#define TAO_SVC_TUPLE ACE_Svc_Tuple<TAO_HANDLER> -#define TAO_ADDR TAO_SHMIOP_Connector::TAO_IADDR -#define TAO_HASH_KEY TAO_SHMIOP_Connector::TAO_HASH_KEY -#define TAO_COMPARE_KEYS TAO_SHMIOP_Connector::TAO_COMPARE_KEYS -#define TAO_ATTRIBUTES TAO_SHMIOP_Connector::TAO_ATTRIBUTES -#define TAO_CACHED_HANDLER TAO_SHMIOP_Connector::TAO_CACHED_HANDLER -#define TAO_HASH_MAP TAO_SHMIOP_Connector::TAO_HASH_MAP -#define TAO_HASH_MAP_ITERATOR TAO_SHMIOP_Connector::TAO_HASH_MAP_ITERATOR -#define TAO_HASH_MAP_REVERSE_ITERATOR TAO_SHMIOP_Connector::TAO_HASH_MAP_REVERSE_ITERATOR -#define TAO_CACHING_UTILITY TAO_SHMIOP_Connector::TAO_CACHING_UTILITY -#define TAO_CACHING_STRATEGY TAO_SHMIOP_Connector::TAO_CACHING_STRATEGY -#define TAO_CACHED_CONNECT_STRATEGY TAO_SHMIOP_Connector::TAO_CACHED_CONNECT_STRATEGY - -typedef ACE_LRU_Caching_Strategy<TAO_ATTRIBUTES, TAO_CACHING_UTILITY> - TAO_SHMIOP_LRU_CACHING_STRATEGY; - -#if defined (ACE_HAS_BROKEN_EXTENDED_TEMPLATES) || (TAO_HAS_MINIMUM_CONNECTION_CACHING_STRATEGY == 1) -typedef TAO_SHMIOP_LRU_CACHING_STRATEGY - TAO_SHMIOP_CACHING_STRATEGY; -#else -#if (TAO_HAS_MINIMUM_CONNECTION_CACHING_STRATEGY == 0) -typedef ACE_Caching_Strategy<TAO_ATTRIBUTES, TAO_CACHING_UTILITY> - TAO_SHMIOP_CACHING_STRATEGY; -typedef ACE_LFU_Caching_Strategy<TAO_ATTRIBUTES, TAO_CACHING_UTILITY> - TAO_SHMIOP_LFU_CACHING_STRATEGY; -typedef ACE_FIFO_Caching_Strategy<TAO_ATTRIBUTES, TAO_CACHING_UTILITY> - TAO_SHMIOP_FIFO_CACHING_STRATEGY; -typedef ACE_Null_Caching_Strategy<TAO_ATTRIBUTES, TAO_CACHING_UTILITY> - TAO_SHMIOP_NULL_CACHING_STRATEGY; -typedef ACE_Caching_Strategy_Adapter<TAO_ATTRIBUTES, TAO_CACHING_UTILITY, TAO_SHMIOP_LRU_CACHING_STRATEGY> - TAO_SHMIOP_LRU_CACHING_STRATEGY_ADAPTER; -typedef ACE_Caching_Strategy_Adapter<TAO_ATTRIBUTES, TAO_CACHING_UTILITY, TAO_SHMIOP_LFU_CACHING_STRATEGY> - TAO_SHMIOP_LFU_CACHING_STRATEGY_ADAPTER; -typedef ACE_Caching_Strategy_Adapter<TAO_ATTRIBUTES, TAO_CACHING_UTILITY, TAO_SHMIOP_FIFO_CACHING_STRATEGY> - TAO_SHMIOP_FIFO_CACHING_STRATEGY_ADAPTER; -typedef ACE_Caching_Strategy_Adapter<TAO_ATTRIBUTES, TAO_CACHING_UTILITY, TAO_SHMIOP_NULL_CACHING_STRATEGY> - TAO_SHMIOP_NULL_CACHING_STRATEGY_ADAPTER; -#endif /* TAO_HAS_MINIMUM_CONNECTION_CACHING_STRATEGY = 0*/ -#endif /* ACE_HAS_BROKEN_EXTENDED_TEMPLATES - TAO_HAS_MINIMUM_CONNECTION_CACHING_STRATEGY == 1*/ - -int -TAO_SHMIOP_Connector::make_caching_strategy (void) -{ - TAO_Resource_Factory *resource_factory = - this->orb_core_->resource_factory (); - -#if defined (ACE_HAS_BROKEN_EXTENDED_TEMPLATES) || (TAO_HAS_MINIMUM_CONNECTION_CACHING_STRATEGY == 1) - ACE_NEW_RETURN (this->caching_strategy_, - TAO_SHMIOP_CACHING_STRATEGY, - -1); -#else -#if (TAO_HAS_MINIMUM_CONNECTION_CACHING_STRATEGY == 0) - switch (resource_factory->connection_caching_strategy_type ()) - { - case TAO_Resource_Factory::NOOP: - ACE_NEW_RETURN (this->caching_strategy_, - TAO_SHMIOP_NULL_CACHING_STRATEGY_ADAPTER, - -1); - break; - - default: - case TAO_Resource_Factory::LRU: - ACE_NEW_RETURN (this->caching_strategy_, - TAO_SHMIOP_LRU_CACHING_STRATEGY_ADAPTER, - -1); - break; - - case TAO_Resource_Factory::LFU: - ACE_NEW_RETURN (this->caching_strategy_, - TAO_SHMIOP_LFU_CACHING_STRATEGY_ADAPTER, - -1); - break; - - case TAO_Resource_Factory::FIFO: - ACE_NEW_RETURN (this->caching_strategy_, - TAO_SHMIOP_FIFO_CACHING_STRATEGY_ADAPTER, - -1); - break; - } -#endif /* TAO_HAS_MINIMUM_CONNECTION_CACHING_STRATEGY == 0*/ -#endif /* ACE_HAS_BROKEN_EXTENDED_TEMPLATES - TAO_HAS_MINIMUM_CONNECTION_CACHING_STRATEGY == 1*/ - - this->caching_strategy_->purge_percent (resource_factory->purge_percentage ()); - return 0; -} -#endif /* TAO_USES_ROBUST_CONNECTION_MGMT */ - -// The TAO_Cached_Connector_Lock template instantiations are in -// Resource_Factory.cpp. - -#if !defined (TAO_USES_ROBUST_CONNECTION_MGMT) -#define TAO_SVC_TUPLE ACE_Svc_Tuple<TAO_SHMIOP_Client_Connection_Handler> -#define CACHED_CONNECT_STRATEGY ACE_Cached_Connect_Strategy<TAO_SHMIOP_Client_Connection_Handler, ACE_MEM_CONNECTOR, TAO_Cached_Connector_Lock> -#define TAO_ADDR ACE_Refcounted_Hash_Recyclable<ACE_INET_Addr> -#define TAO_HANDLER TAO_SHMIOP_Client_Connection_Handler -#define TAO_HASH_KEY ACE_Hash<TAO_ADDR> -#define TAO_COMPARE_KEYS ACE_Equal_To<TAO_ADDR> -#endif /* TAO_USES_ROBUST_CONNECTION_MGMT */ - -#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) || \ - defined (ACE_HAS_GNU_REPO) +#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) + +template class ACE_Node<ACE_INET_Addr>; +template class ACE_Unbounded_Stack<ACE_INET_Addr>; +template class ACE_Refcounted_Hash_Recyclable<ACE_INET_Addr>; +template class ACE_Auto_Basic_Array_Ptr<ACE_INET_Addr>; +template class ACE_Hash<ARHR<ACE_INET_Addr> >; +template class ACE_Equal_To<ACE_Refcounted_Hash_Recyclable<ACE_INET_Addr> >; + +template class ACE_NOOP_Concurrency_Strategy<TAO_SHMIOP_Client_Connection_Handler>; +template class ACE_Concurrency_Strategy<TAO_SHMIOP_Client_Connection_Handler>; +template class ACE_Creation_Strategy<TAO_SHMIOP_Client_Connection_Handler>; +template class ACE_Strategy_Connector<TAO_SHMIOP_Client_Connection_Handler, ACE_MEM_CONNECTOR>; +template class ACE_Connect_Strategy<TAO_SHMIOP_Client_Connection_Handler, ACE_MEM_CONNECTOR>; +template class ACE_Connector<TAO_SHMIOP_Client_Connection_Handler, ACE_MEM_CONNECTOR>; +template class ACE_Svc_Tuple<TAO_SHMIOP_Client_Connection_Handler>; + +template class ACE_Map_Manager<int, ACE_Svc_Tuple<TAO_SHMIOP_Client_Connection_Handler> *, ACE_SYNCH_RW_MUTEX>; +template class ACE_Map_Iterator_Base<int, ACE_Svc_Tuple<TAO_SHMIOP_Client_Connection_Handler> *, ACE_SYNCH_RW_MUTEX>; +template class ACE_Map_Entry<int,ACE_Svc_Tuple<TAO_SHMIOP_Client_Connection_Handler>*>; +template class ACE_Map_Iterator<int,ACE_Svc_Tuple<TAO_SHMIOP_Client_Connection_Handler>*,ACE_SYNCH_RW_MUTEX>; +template class ACE_Map_Reverse_Iterator<int,ACE_Svc_Tuple<TAO_SHMIOP_Client_Connection_Handler>*,ACE_SYNCH_RW_MUTEX>; template class ACE_Auto_Basic_Array_Ptr<TAO_SHMIOP_Client_Connection_Handler*>; -template class auto_ptr<TAO_SHMIOP_Connect_Creation_Strategy>; -template class ACE_Auto_Basic_Ptr<TAO_SHMIOP_Connect_Creation_Strategy>; - -#if !defined (TAO_USES_ROBUST_CONNECTION_MGMT) -template class CACHED_CONNECT_STRATEGY; -#endif /* TAO_USES_ROBUST_CONNECTION_MGMT */ - -template class ACE_Svc_Handler<ACE_MEM_STREAM, ACE_NULL_SYNCH>; -template class ACE_NOOP_Creation_Strategy<TAO_HANDLER>; -template class ACE_Concurrency_Strategy<TAO_HANDLER>; -template class ACE_Connect_Strategy<TAO_HANDLER, ACE_MEM_CONNECTOR>; -template class ACE_Connector<TAO_HANDLER, ACE_MEM_CONNECTOR>; -template class ACE_Creation_Strategy<TAO_HANDLER>; -template class ACE_Hash_Map_Entry<TAO_ADDR, TAO_HANDLER *>; -template class ACE_Map_Entry<ACE_HANDLE, TAO_SVC_TUPLE *>; -template class ACE_Map_Manager<ACE_HANDLE, TAO_SVC_TUPLE *, ACE_SYNCH_RW_MUTEX>; -template class ACE_Map_Iterator_Base<ACE_HANDLE, TAO_SVC_TUPLE *, ACE_SYNCH_RW_MUTEX>; -template class ACE_Map_Iterator<ACE_HANDLE, TAO_SVC_TUPLE *, ACE_SYNCH_RW_MUTEX>; -template class ACE_Map_Reverse_Iterator<ACE_HANDLE, TAO_SVC_TUPLE *, ACE_SYNCH_RW_MUTEX>; -template class ACE_NOOP_Concurrency_Strategy<TAO_HANDLER>; -template class ACE_Recycling_Strategy<TAO_HANDLER>; -template class ACE_Strategy_Connector<TAO_HANDLER, ACE_MEM_CONNECTOR>; -template class TAO_SVC_TUPLE; - -template class ACE_Hash_Map_Manager<TAO_ADDR, TAO_HANDLER *, ACE_Null_Mutex>; -template class ACE_Hash_Map_Iterator<TAO_ADDR, TAO_HANDLER *, ACE_Null_Mutex>; -template class ACE_Hash_Map_Reverse_Iterator<TAO_ADDR, TAO_HANDLER *, ACE_Null_Mutex>; -template class ACE_Hash_Map_Manager_Ex<TAO_ADDR, TAO_HANDLER *, TAO_HASH_KEY, TAO_COMPARE_KEYS, ACE_Null_Mutex>; -template class ACE_Hash_Map_Iterator_Ex<TAO_ADDR, TAO_HANDLER *, TAO_HASH_KEY, TAO_COMPARE_KEYS, ACE_Null_Mutex>; -template class ACE_Hash_Map_Reverse_Iterator_Ex<TAO_ADDR, TAO_HANDLER *, TAO_HASH_KEY, TAO_COMPARE_KEYS, ACE_Null_Mutex>; -template class ACE_Hash_Map_Iterator_Base_Ex<TAO_ADDR, TAO_HANDLER *, TAO_HASH_KEY, TAO_COMPARE_KEYS, ACE_Null_Mutex>; -template class ACE_Hash_Map_Bucket_Iterator<TAO_ADDR, TAO_HANDLER *, TAO_HASH_KEY, TAO_COMPARE_KEYS, ACE_Null_Mutex>; - -#if defined (TAO_USES_ROBUST_CONNECTION_MGMT) -template class ACE_Pair<TAO_HANDLER *, TAO_ATTRIBUTES>; -template class ACE_Reference_Pair<TAO_ADDR, TAO_HANDLER *>; -template class ACE_Hash_Map_Entry<TAO_ADDR, TAO_CACHED_HANDLER>; - -template class ACE_Hash_Map_Manager<TAO_ADDR, TAO_CACHED_HANDLER, ACE_Null_Mutex>; -template class ACE_Hash_Map_Iterator<TAO_ADDR, TAO_CACHED_HANDLER, ACE_Null_Mutex>; -template class ACE_Hash_Map_Reverse_Iterator<TAO_ADDR, TAO_CACHED_HANDLER, ACE_Null_Mutex>; -template class ACE_Hash_Map_Manager_Ex<TAO_ADDR, TAO_CACHED_HANDLER, TAO_HASH_KEY, TAO_COMPARE_KEYS, ACE_Null_Mutex>; -template class ACE_Hash_Map_Iterator_Ex<TAO_ADDR, TAO_CACHED_HANDLER, TAO_HASH_KEY, TAO_COMPARE_KEYS, ACE_Null_Mutex>; -template class ACE_Hash_Map_Reverse_Iterator_Ex<TAO_ADDR, TAO_CACHED_HANDLER, TAO_HASH_KEY, TAO_COMPARE_KEYS, ACE_Null_Mutex>; -template class ACE_Hash_Map_Iterator_Base_Ex<TAO_ADDR, TAO_CACHED_HANDLER, TAO_HASH_KEY, TAO_COMPARE_KEYS, ACE_Null_Mutex>; -template class ACE_Hash_Map_Bucket_Iterator<TAO_ADDR, TAO_CACHED_HANDLER, TAO_HASH_KEY, TAO_COMPARE_KEYS, ACE_Null_Mutex>; - -// = Caching_Strategy -template class ACE_Hash_Cache_Map_Manager<TAO_ADDR, TAO_HANDLER *, TAO_HASH_KEY, TAO_COMPARE_KEYS, TAO_CACHING_STRATEGY, TAO_ATTRIBUTES>; - -template class ACE_LRU_Caching_Strategy<TAO_ATTRIBUTES, TAO_CACHING_UTILITY>; - -#if !defined (ACE_HAS_BROKEN_EXTENDED_TEMPLATES) -#if (TAO_HAS_MINIMUM_CONNECTION_CACHING_STRATEGY == 0) -template class ACE_Caching_Strategy<TAO_ATTRIBUTES, TAO_CACHING_UTILITY>; -template class ACE_LFU_Caching_Strategy<TAO_ATTRIBUTES, TAO_CACHING_UTILITY>; -template class ACE_FIFO_Caching_Strategy<TAO_ATTRIBUTES, TAO_CACHING_UTILITY>; -template class ACE_Null_Caching_Strategy<TAO_ATTRIBUTES, TAO_CACHING_UTILITY>; - -template class ACE_Caching_Strategy_Adapter<TAO_ATTRIBUTES, TAO_CACHING_UTILITY, TAO_SHMIOP_LRU_CACHING_STRATEGY>; -template class ACE_Caching_Strategy_Adapter<TAO_ATTRIBUTES, TAO_CACHING_UTILITY, TAO_SHMIOP_LFU_CACHING_STRATEGY>; -template class ACE_Caching_Strategy_Adapter<TAO_ATTRIBUTES, TAO_CACHING_UTILITY, TAO_SHMIOP_FIFO_CACHING_STRATEGY>; -template class ACE_Caching_Strategy_Adapter<TAO_ATTRIBUTES, TAO_CACHING_UTILITY, TAO_SHMIOP_NULL_CACHING_STRATEGY>; - -template class ACE_Cache_Map_Manager<TAO_ADDR, TAO_HANDLER *, TAO_HASH_MAP, TAO_HASH_MAP_ITERATOR, TAO_HASH_MAP_REVERSE_ITERATOR, TAO_CACHING_STRATEGY, TAO_ATTRIBUTES>; -template class ACE_Cache_Map_Iterator<TAO_ADDR, TAO_HANDLER *, TAO_HASH_MAP_ITERATOR, TAO_CACHING_STRATEGY, TAO_ATTRIBUTES>; -template class ACE_Cache_Map_Reverse_Iterator<TAO_ADDR, TAO_HANDLER *, TAO_HASH_MAP_REVERSE_ITERATOR, TAO_CACHING_STRATEGY, TAO_ATTRIBUTES>; -#endif /*TAO_HAS_MINIMUM_CONNECTION_CACHING_STRATEGY == 0*/ -#else - -template class ACE_Cache_Map_Manager<TAO_ADDR, TAO_HANDLER *, TAO_HASH_MAP, TAO_CACHING_STRATEGY, TAO_ATTRIBUTES>; - -#endif /* ACE_HAS_BROKEN_EXTENDED_TEMPLATES - TAO_HAS_MINIMUM_CONNECTION_CACHING_STRATEGY == 0*/ - -template class ACE_Cached_Connect_Strategy_Ex<TAO_HANDLER, ACE_MEM_CONNECTOR, TAO_CACHING_STRATEGY, TAO_ATTRIBUTES, TAO_Cached_Connector_Lock>; -template class ACE_Cached_Connect_Strategy<TAO_HANDLER, ACE_MEM_CONNECTOR, TAO_Cached_Connector_Lock>; - -template class ACE_Cleanup_Strategy<TAO_ADDR, TAO_CACHED_HANDLER, TAO_HASH_MAP>; -template class ACE_Refcounted_Recyclable_Handler_Cleanup_Strategy<TAO_ADDR, TAO_CACHED_HANDLER, TAO_HASH_MAP>; -template class ACE_Refcounted_Recyclable_Handler_Caching_Utility<TAO_ADDR, TAO_CACHED_HANDLER, TAO_HASH_MAP, TAO_HASH_MAP_ITERATOR, TAO_ATTRIBUTES>; -#endif /* TAO_USES_ROBUST_CONNECTION_MGMT */ #elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) +#pragma instantiate ACE_Node<ACE_INET_Addr> +#pragma instantiate ACE_Unbounded_Stack<ACE_INET_Addr> +#pragma instantiate ACE_Refcounted_Hash_Recyclable<ACE_INET_Addr> +#pragma instantiate ACE_Equal_To<ACE_Refcounted_Hash_Recyclable<ACE_INET_Addr> > +#pragma instantiate ACE_Auto_Basic_Array_Ptr<ACE_INET_Addr> +#pragma instantiate ACE_Hash<ACE_Refcounted_Hash_Recyclable<ACE_INET_Addr> > + +#pragma instantiate ACE_NOOP_Concurrency_Strategy<TAO_SHMIOP_Client_Connection_Handler> +#pragma instantiate ACE_Concurrency_Strategy<TAO_SHMIOP_Client_Connection_Handler> +#pragma instantiate ACE_Strategy_Connector<TAO_SHMIOP_Client_Connection_Handler, ACE_MEM_CONNECTOR> +#pragma instantiate ACE_Connect_Strategy<TAO_SHMIOP_Client_Connection_Handler, ACE_MEM_CONNECTOR> + +#pragma instantiate ACE_Connector<TAO_SHMIOP_Client_Connection_Handler, ACE_MEM_Connector> +#pragma instantiate ACE_Creation_Strategy<TAO_SHMIOP_Client_Connection_Handler> +#pragma instantiate ACE_Svc_Tuple<TAO_SHMIOP_Client_Connection_Handler> +#pragma instantiate ACE_Map_Manager<int, ACE_Svc_Tuple<TAO_SHMIOP_Client_Connection_Handler> *, ACE_SYNCH_RW_MUTEX> +#pragma instantiate ACE_Map_Iterator_Base<int, ACE_Svc_Tuple<TAO_SHMIOP_Client_Connection_Handler> *, ACE_SYNCH_RW_MUTEX> +#pragma instantiate ACE_Map_Entry<int,ACE_Svc_Tuple<TAO_SHMIOP_Client_Connection_Handler>*> +#pragma instantiate ACE_Map_Iterator<int,ACE_Svc_Tuple<TAO_SHMIOP_Client_Connection_Handler>*,ACE_SYNCH_RW_MUTEX> +#pragma instantiate ACE_Map_Reverse_Iterator<int,ACE_Svc_Tuple<TAO_SHMIOP_Client_Connection_Handler>*,ACE_SYNCH_RW_MUTEX> #pragma instantiate ACE_Auto_Basic_Array_Ptr<TAO_SHMIOP_Client_Connection_Handler*> -#pragma instantiate auto_ptr<TAO_SHMIOP_Connect_Creation_Strategy> -#pragma instantiate ACE_Auto_Basic_Ptr<TAO_SHMIOP_Connect_Creation_Strategy> - -#if !defined (TAO_USES_ROBUST_CONNECTION_MGMT) -#pragma instantiate CACHED_CONNECT_STRATEGY -#pragma instantiate TAO_ADDR -#endif /* TAO_USES_ROBUST_CONNECTION_MGMT */ - -#pragma instantiate ACE_Svc_Handler<ACE_MEM_STREAM, ACE_NULL_SYNCH> -#pragma instantiate ACE_NOOP_Creation_Strategy<TAO_HANDLER> -#pragma instantiate ACE_Concurrency_Strategy<TAO_HANDLER> -#pragma instantiate ACE_Connect_Strategy<TAO_HANDLER, ACE_MEM_CONNECTOR> -#pragma instantiate ACE_Connector<TAO_HANDLER, ACE_MEM_CONNECTOR> -#pragma instantiate ACE_Creation_Strategy<TAO_HANDLER> -#pragma instantiate ACE_Hash_Map_Entry<TAO_ADDR, TAO_HANDLER *> -#pragma instantiate ACE_Map_Entry<ACE_HANDLE, TAO_SVC_TUPLE *> -#pragma instantiate ACE_Map_Manager<ACE_HANDLE, TAO_SVC_TUPLE *, ACE_SYNCH_RW_MUTEX> -#pragma instantiate ACE_Map_Iterator_Base<ACE_HANDLE, TAO_SVC_TUPLE *, ACE_SYNCH_RW_MUTEX> -#pragma instantiate ACE_Map_Iterator<ACE_HANDLE, TAO_SVC_TUPLE *, ACE_SYNCH_RW_MUTEX> -#pragma instantiate ACE_Map_Reverse_Iterator<ACE_HANDLE, TAO_SVC_TUPLE *, ACE_SYNCH_RW_MUTEX> -#pragma instantiate ACE_NOOP_Concurrency_Strategy<TAO_HANDLER> -#pragma instantiate ACE_Recycling_Strategy<TAO_HANDLER> -#pragma instantiate ACE_Strategy_Connector<TAO_HANDLER, ACE_MEM_CONNECTOR> -#pragma instantiate TAO_SVC_TUPLE - -#pragma instantiate ACE_Hash_Map_Manager<TAO_ADDR, TAO_HANDLER *, ACE_Null_Mutex> -#pragma instantiate ACE_Hash_Map_Iterator<TAO_ADDR, TAO_HANDLER *, ACE_Null_Mutex> -#pragma instantiate ACE_Hash_Map_Reverse_Iterator<TAO_ADDR, TAO_HANDLER *, ACE_Null_Mutex> -#pragma instantiate ACE_Hash_Map_Manager_Ex<TAO_ADDR, TAO_HANDLER *, TAO_HASH_KEY, TAO_COMPARE_KEYS, ACE_Null_Mutex> -#pragma instantiate ACE_Hash_Map_Iterator_Ex<TAO_ADDR, TAO_HANDLER *, TAO_HASH_KEY, TAO_COMPARE_KEYS, ACE_Null_Mutex> -#pragma instantiate ACE_Hash_Map_Reverse_Iterator_Ex<TAO_ADDR, TAO_HANDLER *, TAO_HASH_KEY, TAO_COMPARE_KEYS, ACE_Null_Mutex> -#pragma instantiate ACE_Hash_Map_Iterator_Base_Ex<TAO_ADDR, TAO_HANDLER *, TAO_HASH_KEY, TAO_COMPARE_KEYS, ACE_Null_Mutex> -#pragma instantiate ACE_Hash_Map_Bucket_Iterator<TAO_ADDR, TAO_HANDLER *, TAO_HASH_KEY, TAO_COMPARE_KEYS, ACE_Null_Mutex> - -#if defined (TAO_USES_ROBUST_CONNECTION_MGMT) -#pragma instantiate ACE_Pair<TAO_HANDLER *, TAO_ATTRIBUTES> -#pragma instantiate ACE_Reference_Pair<TAO_ADDR, TAO_HANDLER *> -#pragma instantiate ACE_Hash_Map_Entry<TAO_ADDR, TAO_CACHED_HANDLER> - -#pragma instantiate ACE_Hash_Map_Manager<TAO_ADDR, TAO_CACHED_HANDLER, ACE_Null_Mutex> -#pragma instantiate ACE_Hash_Map_Iterator<TAO_ADDR, TAO_CACHED_HANDLER, ACE_Null_Mutex> -#pragma instantiate ACE_Hash_Map_Reverse_Iterator<TAO_ADDR, TAO_CACHED_HANDLER, ACE_Null_Mutex> -#pragma instantiate ACE_Hash_Map_Manager_Ex<TAO_ADDR, TAO_CACHED_HANDLER, TAO_HASH_KEY, TAO_COMPARE_KEYS, ACE_Null_Mutex> -#pragma instantiate ACE_Hash_Map_Iterator_Ex<TAO_ADDR, TAO_CACHED_HANDLER, TAO_HASH_KEY, TAO_COMPARE_KEYS, ACE_Null_Mutex> -#pragma instantiate ACE_Hash_Map_Reverse_Iterator_Ex<TAO_ADDR, TAO_CACHED_HANDLER, TAO_HASH_KEY, TAO_COMPARE_KEYS, ACE_Null_Mutex> -#pragma instantiate ACE_Hash_Map_Iterator_Base_Ex<TAO_ADDR, TAO_CACHED_HANDLER, TAO_HASH_KEY, TAO_COMPARE_KEYS, ACE_Null_Mutex> -#pragma instantiate ACE_Hash_Map_Bucket_Iterator<TAO_ADDR, TAO_CACHED_HANDLER, TAO_HASH_KEY, TAO_COMPARE_KEYS, ACE_Null_Mutex> - -// = Caching_Strategy -#pragma instantiate ACE_Hash_Cache_Map_Manager<TAO_ADDR, TAO_HANDLER *, TAO_HASH_KEY, TAO_COMPARE_KEYS, TAO_CACHING_STRATEGY, TAO_ATTRIBUTES> - -#pragma instantiate ACE_LRU_Caching_Strategy<TAO_ATTRIBUTES, TAO_CACHING_UTILITY> - -#if !defined (ACE_HAS_BROKEN_EXTENDED_TEMPLATES) -#if (TAO_HAS_MINIMUM_CONNECTION_CACHING_STRATEGY == 0) - -#pragma instantiate ACE_Caching_Strategy<TAO_ATTRIBUTES, TAO_CACHING_UTILITY> -#pragma instantiate ACE_LFU_Caching_Strategy<TAO_ATTRIBUTES, TAO_CACHING_UTILITY> -#pragma instantiate ACE_FIFO_Caching_Strategy<TAO_ATTRIBUTES, TAO_CACHING_UTILITY> -#pragma instantiate ACE_Null_Caching_Strategy<TAO_ATTRIBUTES, TAO_CACHING_UTILITY> - -#pragma instantiate ACE_Caching_Strategy_Adapter<TAO_ATTRIBUTES, TAO_CACHING_UTILITY, TAO_SHMIOP_LRU_CACHING_STRATEGY> -#pragma instantiate ACE_Caching_Strategy_Adapter<TAO_ATTRIBUTES, TAO_CACHING_UTILITY, TAO_SHMIOP_LFU_CACHING_STRATEGY> -#pragma instantiate ACE_Caching_Strategy_Adapter<TAO_ATTRIBUTES, TAO_CACHING_UTILITY, TAO_SHMIOP_FIFO_CACHING_STRATEGY> -#pragma instantiate ACE_Caching_Strategy_Adapter<TAO_ATTRIBUTES, TAO_CACHING_UTILITY, TAO_SHMIOP_NULL_CACHING_STRATEGY> - -#pragma instantiate ACE_Cache_Map_Manager<TAO_ADDR, TAO_HANDLER *, TAO_HASH_MAP, TAO_HASH_MAP_ITERATOR, TAO_HASH_MAP_REVERSE_ITERATOR, TAO_CACHING_STRATEGY, TAO_ATTRIBUTES> -#pragma instantiate ACE_Cache_Map_Iterator<TAO_ADDR, TAO_HANDLER *, TAO_HASH_MAP_ITERATOR, TAO_CACHING_STRATEGY, TAO_ATTRIBUTES> -#pragma instantiate ACE_Cache_Map_Reverse_Iterator<TAO_ADDR, TAO_HANDLER *, TAO_HASH_MAP_REVERSE_ITERATOR, TAO_CACHING_STRATEGY, TAO_ATTRIBUTES> -#endif /* TAO_HAS_MINIMUM_CONNECTION_CACHING_STRATEGY == 0 */ -#else - -#pragma instantiate ACE_Cache_Map_Manager<TAO_ADDR, TAO_HANDLER *, TAO_HASH_MAP, TAO_CACHING_STRATEGY, TAO_ATTRIBUTES> - -#endif /* ACE_HAS_BROKEN_EXTENDED_TEMPLATES*/ - -#pragma instantiate ACE_Cached_Connect_Strategy_Ex<TAO_HANDLER, ACE_MEM_CONNECTOR, TAO_CACHING_STRATEGY, TAO_ATTRIBUTES, TAO_Cached_Connector_Lock> -#pragma instantiate ACE_Cached_Connect_Strategy<TAO_HANDLER, ACE_MEM_CONNECTOR, TAO_Cached_Connector_Lock> - -#pragma instantiate ACE_Cleanup_Strategy<TAO_ADDR, TAO_CACHED_HANDLER, TAO_HASH_MAP> -#pragma instantiate ACE_Refcounted_Recyclable_Handler_Cleanup_Strategy<TAO_ADDR, TAO_CACHED_HANDLER, TAO_HASH_MAP> -#pragma instantiate ACE_Refcounted_Recyclable_Handler_Caching_Utility<TAO_ADDR, TAO_CACHED_HANDLER, TAO_HASH_MAP, TAO_HASH_MAP_ITERATOR, TAO_ATTRIBUTES> -#endif /* TAO_USES_ROBUST_CONNECTION_MGMT */ #endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ + TAO_SHMIOP_Connect_Creation_Strategy:: TAO_SHMIOP_Connect_Creation_Strategy (ACE_Thread_Manager* t, TAO_ORB_Core *orb_core, @@ -324,120 +91,44 @@ TAO_SHMIOP_Connect_Creation_Strategy::make_svc_handler // **************************************************************** -#if !defined (TAO_USES_ROBUST_CONNECTION_MGMT) -typedef ACE_Cached_Connect_Strategy<TAO_SHMIOP_Client_Connection_Handler, - ACE_MEM_CONNECTOR, - TAO_Cached_Connector_Lock> - TAO_CACHED_CONNECT_STRATEGY; -#endif /* ! TAO_USES_ROBUST_CONNECTION_MGMT */ - TAO_SHMIOP_Connector::TAO_SHMIOP_Connector (CORBA::Octet flag) : TAO_Connector (TAO_TAG_SHMEM_PROFILE), - orb_core_ (0), base_connector_ (), lite_flag_ (flag) -#if defined (TAO_USES_ROBUST_CONNECTION_MGMT) - , - cached_connect_strategy_ (0), - caching_strategy_ (0) -#endif /* TAO_USES_ROBUST_CONNECTION_MGMT */ { } int TAO_SHMIOP_Connector::open (TAO_ORB_Core *orb_core) { - this->orb_core_ = orb_core; - -#if defined (TAO_USES_ROBUST_CONNECTION_MGMT) - if (this->make_caching_strategy () == -1) - return -1; -#endif /* TAO_USES_ROBUST_CONNECTION_MGMT */ + this->orb_core (orb_core); TAO_SHMIOP_Connect_Creation_Strategy *connect_creation_strategy = 0; ACE_NEW_RETURN (connect_creation_strategy, TAO_SHMIOP_Connect_Creation_Strategy - (this->orb_core_->thr_mgr (), - this->orb_core_, + (this->orb_core ()->thr_mgr (), + this->orb_core (), this->lite_flag_), -1); - auto_ptr<TAO_SHMIOP_Connect_Creation_Strategy> - new_connect_creation_strategy (connect_creation_strategy); - TAO_Cached_Connector_Lock *connector_lock = 0; - ACE_NEW_RETURN (connector_lock, - TAO_Cached_Connector_Lock (this->orb_core_), - -1); - - auto_ptr<TAO_Cached_Connector_Lock> new_connector_lock (connector_lock); - -#if defined (TAO_USES_ROBUST_CONNECTION_MGMT) - ACE_NEW_RETURN (this->cached_connect_strategy_, - TAO_CACHED_CONNECT_STRATEGY (*this->caching_strategy_, - new_connect_creation_strategy.get (), - 0, - 0, - new_connector_lock.get (), - 1), - -1); -#else /* TAO_USES_ROBUST_CONNECTION_MGMT */ - TAO_CACHED_CONNECT_STRATEGY *cached_connect_strategy = 0; - ACE_NEW_RETURN (cached_connect_strategy, - TAO_CACHED_CONNECT_STRATEGY - (new_connect_creation_strategy.get (), - 0, - 0, - new_connector_lock.get (), - 1), - -1); -#endif /* TAO_USES_ROBUST_CONNECTION_MGMT */ - - // Finally everything is fine. Make sure to take ownership away - // from the auto pointer. - connect_creation_strategy = - new_connect_creation_strategy.release (); - connector_lock = - new_connector_lock.release (); - -#if defined (TAO_USES_ROBUST_CONNECTION_MGMT) - return this->base_connector_.open (this->orb_core_->reactor (), - &this->null_creation_strategy_, - this->cached_connect_strategy_, - &this->null_activation_strategy_); -#else /* TAO_USES_ROBUST_CONNECTION_MGMT */ - return this->base_connector_.open (this->orb_core_->reactor (), - &this->null_creation_strategy_, - cached_connect_strategy, + return this->base_connector_.open (this->orb_core ()->reactor (), + connect_creation_strategy, + &this->connect_strategy_, &this->null_activation_strategy_); -#endif /* TAO_USES_ROBUST_CONNECTION_MGMT */ } int TAO_SHMIOP_Connector::close (void) { - this->base_connector_.close (); - - // Zap the creation strategy that we created earlier -#if defined (TAO_USES_ROBUST_CONNECTION_MGMT) - delete this->cached_connect_strategy_->creation_strategy (); - delete this->cached_connect_strategy_; - delete this->caching_strategy_; -#else /* TAO_USES_ROBUST_CONNECTION_MGMT */ - TAO_CACHED_CONNECT_STRATEGY *cached_connect_strategy = - ACE_dynamic_cast (TAO_CACHED_CONNECT_STRATEGY *, - this->base_connector_.connect_strategy ()); - - delete cached_connect_strategy->creation_strategy (); - delete cached_connect_strategy; -#endif /* TAO_USES_ROBUST_CONNECTION_MGMT */ - + delete this->base_connector_.creation_strategy (); + return this->base_connector_.close (); return 0; } int -TAO_SHMIOP_Connector::connect (TAO_Endpoint *endpoint, +TAO_SHMIOP_Connector::connect (TAO_Base_Connection_Property *prop, TAO_Transport *&transport, ACE_Time_Value *max_wait_time, CORBA::Environment &) @@ -447,12 +138,15 @@ TAO_SHMIOP_Connector::connect (TAO_Endpoint *endpoint, ACE_TEXT ("TAO (%P|%t) Connector::connect - ") ACE_TEXT ("looking for SHMIOP connection.\n"))); + TAO_Endpoint *endpoint = prop->endpoint (); + if (endpoint->tag () != TAO_TAG_SHMEM_PROFILE) return -1; TAO_SHMIOP_Endpoint *shmiop_endpoint = ACE_dynamic_cast (TAO_SHMIOP_Endpoint *, endpoint); + if (shmiop_endpoint == 0) return -1; @@ -476,55 +170,94 @@ TAO_SHMIOP_Connector::connect (TAO_Endpoint *endpoint, return -1; } - TAO_SHMIOP_Client_Connection_Handler* svc_handler = 0; int result = 0; + TAO_SHMIOP_Client_Connection_Handler *svc_handler = 0; + TAO_Connection_Handler *conn_handler = 0; - if (max_wait_time != 0) + // Check the Cache first for connections + if (this->orb_core ()->connection_cache ().find_handler (prop, + conn_handler) == 0) { - ACE_Synch_Options synch_options; - synch_options.set (ACE_Synch_Options::USE_TIMEOUT, - *max_wait_time); - - // The connect call will set the hint () stored in the Endpoint - // object; but we obtain the transport in the <svc_handler> - // variable. Other threads may modify the hint, but we are not - // affected. - result = this->base_connector_.connect (shmiop_endpoint->hint (), - svc_handler, - remote_address, - synch_options); + if (TAO_debug_level > 5) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("(%P|%t) SHMIOP_Connector::connect ") + ACE_TEXT ("got an existing connection \n"))); + + // We have found a connection and a handler + svc_handler = + ACE_dynamic_cast (TAO_SHMIOP_Client_Connection_Handler *, + conn_handler); } else { - // The connect call will set the hint () stored in the Endpoint - // object; but we obtain the transport in the <svc_handler> - // variable. Other threads may modify the hint, but we are not - // affected. - result = this->base_connector_.connect (shmiop_endpoint->hint (), - svc_handler, - remote_address); - } + if (TAO_debug_level > 4) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("(%P|%t) SHMIOP_Connector::connect ") + ACE_TEXT ("making a new connection \n"))); - if (result == -1) - { // Give users a clue to the problem. - if (TAO_orbdebug) + // @@ This needs to change in the next round when we implement a + // policy that will not allow new connections when a connection + // is busy. + if (max_wait_time != 0) + { + ACE_Synch_Options synch_options (ACE_Synch_Options::USE_TIMEOUT, + *max_wait_time); + + // We obtain the transport in the <svc_handler> variable. As + // we know now that the connection is not available in Cache + // we can make a new connection + result = this->base_connector_.connect (svc_handler, + remote_address, + synch_options); + } + else + { + // We obtain the transport in the <svc_handler> variable. As + // we know now that the connection is not available in Cache + // we can make a new connection + result = this->base_connector_.connect (svc_handler, + remote_address); + } + + if (TAO_debug_level > 4) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("(%P|%t) SHMIOP_Connector::connect ") + ACE_TEXT ("The result is <%d> \n"), result)); + + if (result == -1) { char buffer [MAXNAMELEN * 2]; endpoint->addr_to_string (buffer, - (MAXNAMELEN * 2) - 1); - ACE_DEBUG ((LM_ERROR, - ACE_TEXT ("(%P|%t) %s:%u, connection to ") - ACE_TEXT ("%s failed (%p)\n"), - __FILE__, - __LINE__, - buffer, - "errno")); + (MAXNAMELEN * 2) - 1); + + // Give users a clue to the problem. + if (TAO_debug_level > 0) + { + ACE_DEBUG ((LM_ERROR, + ACE_TEXT ("(%P|%t) %s:%u, connection to ") + ACE_TEXT ("%s failed (%p)\n"), + __FILE__, + __LINE__, + buffer, + "errno")); + } + return -1; + } + + // Add the handler to Cache + int retval = + this->orb_core ()->connection_cache ().cache_handler (prop, + svc_handler); + + if (retval != 0 && TAO_debug_level > 0) + { + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("(%P|%t) IIOP_Connector::connect ") + ACE_TEXT ("could not add the new connection to Cache \n"))); } - return -1; } transport = svc_handler->transport (); - return 0; } @@ -690,7 +423,7 @@ TAO_SHMIOP_Connector::create_profile (TAO_InputCDR& cdr) { TAO_Profile *pfile; ACE_NEW_RETURN (pfile, - TAO_SHMIOP_Profile (this->orb_core_), + TAO_SHMIOP_Profile (this->orb_core ()), 0); int r = pfile->decode (cdr); @@ -715,7 +448,7 @@ TAO_SHMIOP_Connector::make_profile (const char *endpoint, ACE_NEW_THROW_EX (profile, TAO_SHMIOP_Profile (endpoint, - this->orb_core_, + this->orb_core (), ACE_TRY_ENV), CORBA::NO_MEMORY ()); |