Public Member Functions | Protected Member Functions | Private Types | Private Attributes

TAO_Default_Client_Strategy_Factory Class Reference

This is the "default" client strategy factor for TAO. It includes strategies that are configured through command-line options so that everything operates as if there were no dynamically-linkable strategies. More...

#include <default_client.h>

Inheritance diagram for TAO_Default_Client_Strategy_Factory:
Inheritance graph
[legend]
Collaboration diagram for TAO_Default_Client_Strategy_Factory:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 TAO_Default_Client_Strategy_Factory (void)
 Constructor.
virtual ~TAO_Default_Client_Strategy_Factory (void)
 Destructor.
virtual int init (int argc, ACE_TCHAR *argv[])
 Dynamic linking hook.
int parse_args (int argc, ACE_TCHAR *argv[])
 Parse svc.conf arguments.
virtual ACE_Lockcreate_profile_lock (void)
virtual TAO_Configurable_Refcount create_profile_refcount (void)
 Create the refcount for the profile.
virtual
TAO_Transport_Mux_Strategy
create_transport_mux_strategy (TAO_Transport *transport)
 Create the correct client transport muxing strategy.
virtual ACE_Lockcreate_transport_mux_strategy_lock (void)
 Create the correct lock for request muxing strategy.
virtual int reply_dispatcher_table_size (void) const
 Return the size of the reply dispatcher table.
virtual int allow_callback (void)
 Does the client allow any form of callback?
virtual TAO_Wait_Strategycreate_wait_strategy (TAO_Transport *transport)
 Create the correct client <wait_for_reply> strategy.
virtual TAO_Connect_Strategycreate_connect_strategy (TAO_ORB_Core *)
 Create the correct client <asynch_connect> strategy.
virtual bool use_cleanup_options (void) const
 Cleanup options for wait strategy.
virtual Connect_Strategy connect_strategy (void) const
 Return the selected connection strategy option.

Protected Member Functions

void report_option_value_error (const ACE_TCHAR *option_name, const ACE_TCHAR *option_value)

Private Types

enum  Lock_Type { TAO_NULL_LOCK, TAO_THREAD_LOCK }
enum  Transport_Mux_Strategy { TAO_MUXED_TMS, TAO_EXCLUSIVE_TMS }
enum  Wait_Strategy { TAO_WAIT_ON_LEADER_FOLLOWER, TAO_WAIT_ON_REACTOR, TAO_WAIT_ON_READ, TAO_WAIT_ON_LF_NO_UPCALL }

Private Attributes

Lock_Type profile_lock_type_
 the lock type for forwarding IIOP Profile
Transport_Mux_Strategy transport_mux_strategy_
 The client Request Mux Strategy.
Wait_Strategy wait_strategy_
 The wait-for-reply strategy.
Connect_Strategy connect_strategy_
 The connection initiation strategy.
int rd_table_size_
 Size of the reply dispatcher table.
Lock_Type muxed_strategy_lock_type_
 Type of lock for the muxed_strategy.
bool use_cleanup_options_
 Cleanupoptions for RW strategy.

Detailed Description

This is the "default" client strategy factor for TAO. It includes strategies that are configured through command-line options so that everything operates as if there were no dynamically-linkable strategies.

Definition at line 36 of file default_client.h.


Member Enumeration Documentation

Enumerator:
TAO_NULL_LOCK 
TAO_THREAD_LOCK 

Definition at line 72 of file default_client.h.

  {
    TAO_NULL_LOCK,
    TAO_THREAD_LOCK
  };

Enumerator:
TAO_MUXED_TMS 
TAO_EXCLUSIVE_TMS 

Definition at line 81 of file default_client.h.

  {
    TAO_MUXED_TMS,
    TAO_EXCLUSIVE_TMS
  };

Enumerator:
TAO_WAIT_ON_LEADER_FOLLOWER 
TAO_WAIT_ON_REACTOR 
TAO_WAIT_ON_READ 
TAO_WAIT_ON_LF_NO_UPCALL 

Definition at line 90 of file default_client.h.

  {
    TAO_WAIT_ON_LEADER_FOLLOWER,
    TAO_WAIT_ON_REACTOR,
    TAO_WAIT_ON_READ,
    TAO_WAIT_ON_LF_NO_UPCALL
  };


Constructor & Destructor Documentation

TAO_Default_Client_Strategy_Factory::TAO_Default_Client_Strategy_Factory ( void   ) 

Constructor.

Definition at line 28 of file default_client.cpp.

  : profile_lock_type_ (TAO_THREAD_LOCK)
  , transport_mux_strategy_ (TAO_MUXED_TMS)
  , wait_strategy_ (TAO_WAIT_ON_LEADER_FOLLOWER)
  , connect_strategy_ (TAO_LEADER_FOLLOWER_CONNECT)
  , rd_table_size_ (TAO_RD_TABLE_SIZE)
  , muxed_strategy_lock_type_ (TAO_THREAD_LOCK)
  , use_cleanup_options_ (false)
{
  // Use single thread client connection handler
#if defined (TAO_USE_ST_CLIENT_CONNECTION_HANDLER)
  this->wait_strategy_ = TAO_WAIT_ON_REACTOR;
#elif defined (TAO_USE_WAIT_ON_LF_NO_UPCALL)
  this->wait_strategy_ = TAO_WAIT_ON_LF_NO_UPCALL;
#else
  this->wait_strategy_ = TAO_WAIT_ON_LEADER_FOLLOWER;
#endif /* TAO_USE_ST_CLIENT_CONNECTION_HANDLER */

#if TAO_USE_MUXED_TRANSPORT_MUX_STRATEGY == 1
  this->transport_mux_strategy_ = TAO_MUXED_TMS;
#else
  this->transport_mux_strategy_ = TAO_EXCLUSIVE_TMS;
#endif /* TAO_USE_MUXED_TRANSPORT_MUX_STRATEGY */

  // @todo: will be changed when other strategies are implemented.
  this->connect_strategy_ = TAO_LEADER_FOLLOWER_CONNECT;
}

TAO_Default_Client_Strategy_Factory::~TAO_Default_Client_Strategy_Factory ( void   )  [virtual]

Destructor.

Definition at line 56 of file default_client.cpp.

{
}


Member Function Documentation

int TAO_Default_Client_Strategy_Factory::allow_callback ( void   )  [virtual]

Does the client allow any form of callback?

Reimplemented from TAO_Client_Strategy_Factory.

Definition at line 436 of file default_client.cpp.

{
  return (this->wait_strategy_ != TAO_WAIT_ON_READ);
}

TAO_Client_Strategy_Factory::Connect_Strategy TAO_Default_Client_Strategy_Factory::connect_strategy ( void   )  const [virtual]

Return the selected connection strategy option.

Reimplemented from TAO_Client_Strategy_Factory.

Definition at line 396 of file default_client.cpp.

{
  return this->connect_strategy_;
}

TAO_Connect_Strategy * TAO_Default_Client_Strategy_Factory::create_connect_strategy ( TAO_ORB_Core  )  [virtual]

Create the correct client <asynch_connect> strategy.

Reimplemented from TAO_Client_Strategy_Factory.

Definition at line 402 of file default_client.cpp.

{
  TAO_Connect_Strategy *cs = 0;

  switch (this->connect_strategy_)
    {
      case TAO_BLOCKED_CONNECT:
        {
          ACE_NEW_RETURN (cs,
                          TAO_Blocked_Connect_Strategy (orb_core),
                          0);
          break;
        }
      case TAO_REACTIVE_CONNECT:
        {
          ACE_NEW_RETURN (cs,
                          TAO_Reactive_Connect_Strategy (orb_core),
                          0);
          break;
        }
      case TAO_LEADER_FOLLOWER_CONNECT :
        {
          ACE_NEW_RETURN (cs,
                          TAO_LF_Connect_Strategy (orb_core),
                          0);
          break;
        }
    }

  return cs;
}

ACE_Lock * TAO_Default_Client_Strategy_Factory::create_profile_lock ( void   )  [virtual]

Create the lock for the stub and the profile

Reimplemented from TAO_Client_Strategy_Factory.

Definition at line 250 of file default_client.cpp.

{
  ACE_Lock *the_lock = 0;

  switch (this->profile_lock_type_)
    {
      case TAO_NULL_LOCK:
        {
          ACE_NEW_RETURN (the_lock,
                          ACE_Lock_Adapter<ACE_SYNCH_NULL_MUTEX> (),
                          0);
          break;
        }
      case TAO_THREAD_LOCK:
        {
          ACE_NEW_RETURN (the_lock,
                          ACE_Lock_Adapter<TAO_SYNCH_MUTEX> (),
                          0);
          break;
        }
    }

  return the_lock;
}

TAO_Configurable_Refcount TAO_Default_Client_Strategy_Factory::create_profile_refcount ( void   )  [virtual]

Create the refcount for the profile.

Reimplemented from TAO_Client_Strategy_Factory.

Definition at line 276 of file default_client.cpp.

TAO_Transport_Mux_Strategy * TAO_Default_Client_Strategy_Factory::create_transport_mux_strategy ( TAO_Transport transport  )  [virtual]

Create the correct client transport muxing strategy.

Reimplemented from TAO_Client_Strategy_Factory.

Definition at line 292 of file default_client.cpp.

{
  TAO_Transport_Mux_Strategy *tms = 0;

  switch (this->transport_mux_strategy_)
    {
      case TAO_MUXED_TMS:
      {
        ACE_NEW_RETURN (tms,
                        TAO_Muxed_TMS (transport),
                        0);
        break;
      }
      case TAO_EXCLUSIVE_TMS:
      {
        ACE_NEW_RETURN (tms,
                        TAO_Exclusive_TMS (transport),
                        0);
        break;
      }
    }

  return tms;
}

ACE_Lock * TAO_Default_Client_Strategy_Factory::create_transport_mux_strategy_lock ( void   )  [virtual]

Create the correct lock for request muxing strategy.

Reimplemented from TAO_Client_Strategy_Factory.

Definition at line 318 of file default_client.cpp.

{
  ACE_Lock *the_lock = 0;

  switch (this->muxed_strategy_lock_type_)
    {
      case TAO_NULL_LOCK:
        {
          ACE_NEW_RETURN (the_lock,
                          ACE_Lock_Adapter<ACE_SYNCH_NULL_MUTEX> (),
                          0);
          break;
        }
      case TAO_THREAD_LOCK:
        {
          ACE_NEW_RETURN (the_lock,
                          ACE_Lock_Adapter<TAO_SYNCH_RECURSIVE_MUTEX> (),
                          0);
          break;
        }
    }

  return the_lock;
}

TAO_Wait_Strategy * TAO_Default_Client_Strategy_Factory::create_wait_strategy ( TAO_Transport transport  )  [virtual]

Create the correct client <wait_for_reply> strategy.

Reimplemented from TAO_Client_Strategy_Factory.

Definition at line 350 of file default_client.cpp.

{
  TAO_Wait_Strategy *ws = 0;

/*
 * Hook to customize the wait strategy object when the concrete wait strategy
 * object is known a priori.
 */
//@@ WAIT_STRATEGY_SPL_COMMENT_HOOK_START
  switch (this->wait_strategy_)
    {
      case TAO_WAIT_ON_LEADER_FOLLOWER :
        {
          ACE_NEW_RETURN (ws,
                          TAO_Wait_On_Leader_Follower (transport),
                          0);
          break;
        }
      case TAO_WAIT_ON_REACTOR:
        {
          ACE_NEW_RETURN (ws,
                          TAO_Wait_On_Reactor (transport),
                          0);
          break;
        }
      case TAO_WAIT_ON_READ:
        {
          ACE_NEW_RETURN (ws,
                          TAO_Wait_On_Read (transport),
                          0);
          break;
        }
      case TAO_WAIT_ON_LF_NO_UPCALL:
        {
          ACE_NEW_RETURN (ws,
                          TAO::Wait_On_LF_No_Upcall (transport),
                          0);
          break;
        }
    }
//@@ WAIT_STRATEGY_SPL_COMMENT_HOOK_END

  return ws;
}

int TAO_Default_Client_Strategy_Factory::init ( int  argc,
ACE_TCHAR argv[] 
) [virtual]

Dynamic linking hook.

Reimplemented from ACE_Shared_Object.

Definition at line 61 of file default_client.cpp.

{
  return this->parse_args (argc, argv);
}

int TAO_Default_Client_Strategy_Factory::parse_args ( int  argc,
ACE_TCHAR argv[] 
)

Parse svc.conf arguments.

Definition at line 67 of file default_client.cpp.

{
  ACE_TRACE ("TAO_Default_Client_Strategy_Factory::parse_args");

  int curarg;

  for (curarg = 0; curarg < argc && argv[curarg]; ++curarg)
    {
      if (ACE_OS::strcasecmp (argv[curarg],
                              ACE_TEXT("-ORBProfileLock")) == 0)
        {
        curarg++;
        if (curarg < argc)
          {
            ACE_TCHAR* name = argv[curarg];

            if (ACE_OS::strcasecmp (name,
                                    ACE_TEXT("thread")) == 0)
              this->profile_lock_type_ = TAO_THREAD_LOCK;
            else if (ACE_OS::strcasecmp (name,
                                         ACE_TEXT("null")) == 0)
              this->profile_lock_type_ = TAO_NULL_LOCK;
            else
              this->report_option_value_error (ACE_TEXT("-ORBProfileLock"), name);
          }
        }
      else if (ACE_OS::strcasecmp (argv[curarg],
                                   ACE_TEXT("-ORBIIOPProfileLock")) == 0)
        {
          ACE_DEBUG ((LM_DEBUG,
                      ACE_TEXT ("WARNING: The -ORBIIOPProfileLock option")
                      ACE_TEXT (" is deprecated and will be removed.\n")
                      ACE_TEXT ("         Please use -ORBProfileLock instead\n")));
          curarg++;
          if (curarg < argc)
            {
              ACE_TCHAR* name = argv[curarg];

              if (ACE_OS::strcasecmp (name,
                                      ACE_TEXT("thread")) == 0)
                this->profile_lock_type_ = TAO_THREAD_LOCK;
              else if (ACE_OS::strcasecmp (name,
                                           ACE_TEXT("null")) == 0)
                this->profile_lock_type_ = TAO_NULL_LOCK;
              else
                this->report_option_value_error (ACE_TEXT("-ORBIIOPProfileLock"), name);
            }
        }

      else if (ACE_OS::strcasecmp (argv[curarg],
                                   ACE_TEXT("-ORBClientConnectionHandler")) == 0
               ||
               ACE_OS::strcasecmp (argv[curarg],
                                   ACE_TEXT("-ORBWaitStrategy")) == 0)
        {
          curarg++;
          if (curarg < argc)
            {
              ACE_TCHAR* name = argv[curarg];

              if (ACE_OS::strcasecmp (name,
                                      ACE_TEXT("MT")) == 0)
                this->wait_strategy_ = TAO_WAIT_ON_LEADER_FOLLOWER;
              else if (ACE_OS::strcasecmp (name,
                                           ACE_TEXT("ST")) == 0)
                this->wait_strategy_ = TAO_WAIT_ON_REACTOR;
              else if (ACE_OS::strcasecmp (name,
                                           ACE_TEXT("RW")) == 0)
                this->wait_strategy_ = TAO_WAIT_ON_READ;
              else if (ACE_OS::strcasecmp (name,
                                           ACE_TEXT("MT_NOUPCALL")) == 0)
                this->wait_strategy_ = TAO_WAIT_ON_LF_NO_UPCALL;
              else
                this->report_option_value_error (ACE_TEXT("-ORBClientConnectionHandler"), name);
            }
        }
      else if (ACE_OS::strcasecmp (argv[curarg],
                                   ACE_TEXT("-ORBTransportMuxStrategy")) == 0)
        {
          curarg++;
          if (curarg < argc)
            {
              ACE_TCHAR* name = argv[curarg];

              if (ACE_OS::strcasecmp (name,
                                      ACE_TEXT("MUXED")) == 0)
                this->transport_mux_strategy_ = TAO_MUXED_TMS;
              else if (ACE_OS::strcasecmp (name,
                                           ACE_TEXT("EXCLUSIVE")) == 0)
                this->transport_mux_strategy_ = TAO_EXCLUSIVE_TMS;
              else
                this->report_option_value_error (ACE_TEXT("-ORBTransportMuxStrategy"), name);
            }
        }
      else if (ACE_OS::strcasecmp (argv[curarg],
                                   ACE_TEXT("-ORBTransportMuxStrategyLock")) == 0)
        {
          curarg++;
          if (curarg < argc)
            {
              ACE_TCHAR* name = argv[curarg];

              if (ACE_OS::strcasecmp (name,
                                      ACE_TEXT("null")) == 0)
                this->muxed_strategy_lock_type_ = TAO_NULL_LOCK;
              else if (ACE_OS::strcasecmp (name,
                                           ACE_TEXT("thread")) == 0)
                this->muxed_strategy_lock_type_ = TAO_THREAD_LOCK;
              else
                this->report_option_value_error (ACE_TEXT("-ORBTransportMuxStrategyLock"), name);
            }
        }
      else if (ACE_OS::strcasecmp (argv[curarg],
                                   ACE_TEXT("-ORBConnectStrategy")) == 0)
        {
          curarg++;
          if (curarg < argc)
            {
              ACE_TCHAR* name = argv[curarg];

              if (ACE_OS::strcasecmp (name,
                                      ACE_TEXT("Blocked")) == 0)
                this->connect_strategy_ = TAO_BLOCKED_CONNECT;
              else if (ACE_OS::strcasecmp (name,
                                           ACE_TEXT("Reactive")) == 0)
                this->connect_strategy_ = TAO_REACTIVE_CONNECT;
              else if (ACE_OS::strcasecmp (name,
                                           ACE_TEXT("LF")) == 0)
                this->connect_strategy_ = TAO_LEADER_FOLLOWER_CONNECT;
              else
                this->report_option_value_error (ACE_TEXT("-ORBConnectStrategy"), name);
            }
        }
      else if (ACE_OS::strcasecmp (argv[curarg],
                                   ACE_TEXT("-ORBReplyDispatcherTableSize")) == 0)
        {
          curarg++;
          if (curarg < argc)
            {
              this->rd_table_size_ = ACE_OS::atoi (argv[curarg]);
            }
        }
      else if (ACE_OS::strcmp (argv[curarg],
                               ACE_TEXT("-ORBConnectionHandlerCleanup")) == 0)
         {
           curarg++;
           if (curarg < argc)
             {
               ACE_TCHAR* name = argv[curarg];

               if (ACE_OS::strcmp (name, ACE_TEXT("0")) == 0 ||
                   ACE_OS::strcasecmp (name, ACE_TEXT("false")) == 0)
                 this->use_cleanup_options_ = false;
               else if (ACE_OS::strcmp (name, ACE_TEXT("1")) == 0 ||
                        ACE_OS::strcasecmp (name, ACE_TEXT("true")) == 0)
                 this->use_cleanup_options_ = true;
               else
                 this->report_option_value_error (ACE_TEXT("-ORBConnectionHandlerCleanup"), name);
             }
         }
      else if (ACE_OS::strncmp (argv[curarg], ACE_TEXT("-ORB"), 4) == 0)
        {
          // Can we assume there is an argument after the option?
          // curarg++;
          ACE_ERROR ((LM_ERROR,
                      "Client_Strategy_Factory - "
                      "unknown option <%s>\n",
                      argv[curarg]));
        }
      else
        {
          ACE_DEBUG ((LM_DEBUG,
                      "Client_Strategy_Factory - "
                      "ignoring option <%s>\n",
                      argv[curarg]));
        }


    }
  return 0;
}

int TAO_Default_Client_Strategy_Factory::reply_dispatcher_table_size ( void   )  const [virtual]

Return the size of the reply dispatcher table.

Reimplemented from TAO_Client_Strategy_Factory.

Definition at line 344 of file default_client.cpp.

{
  return this->rd_table_size_;
}

void TAO_Default_Client_Strategy_Factory::report_option_value_error ( const ACE_TCHAR option_name,
const ACE_TCHAR option_value 
) [protected]

Definition at line 442 of file default_client.cpp.

{
  ACE_DEBUG((LM_DEBUG,
             ACE_TEXT ("Client_Strategy_Factory - unknown argument")
             ACE_TEXT (" <%s> for <%s>\n"),
             option_value, option_name));
}

bool TAO_Default_Client_Strategy_Factory::use_cleanup_options ( void   )  const [virtual]

Cleanup options for wait strategy.

Only applicable to RW wait strategy

Reimplemented from TAO_Client_Strategy_Factory.

Definition at line 453 of file default_client.cpp.

{
  return this->use_cleanup_options_;
}


Member Data Documentation

The connection initiation strategy.

Definition at line 102 of file default_client.h.

Type of lock for the muxed_strategy.

Definition at line 108 of file default_client.h.

the lock type for forwarding IIOP Profile

Definition at line 79 of file default_client.h.

Size of the reply dispatcher table.

Definition at line 105 of file default_client.h.

The client Request Mux Strategy.

Definition at line 88 of file default_client.h.

Cleanupoptions for RW strategy.

Definition at line 111 of file default_client.h.

The wait-for-reply strategy.

Definition at line 99 of file default_client.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines