Public Member Functions

TAO::CSD::TP_Strategy_Factory Class Reference

An ACE_Service_Object capable of creating TP_Strategy objects. More...

#include <CSD_TP_Strategy_Factory.h>

Inheritance diagram for TAO::CSD::TP_Strategy_Factory:
Inheritance graph
[legend]
Collaboration diagram for TAO::CSD::TP_Strategy_Factory:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 TP_Strategy_Factory ()
 Constructor.
virtual ~TP_Strategy_Factory ()
 Virtual Destructor.
int init (int argc, ACE_TCHAR *argv[])

Detailed Description

An ACE_Service_Object capable of creating TP_Strategy objects.

TBD - Explain in more detail.

Definition at line 43 of file CSD_TP_Strategy_Factory.h.


Constructor & Destructor Documentation

TP_Strategy_Factory::TP_Strategy_Factory (  ) 

Constructor.

Definition at line 17 of file CSD_TP_Strategy_Factory.cpp.

{
}

TP_Strategy_Factory::~TP_Strategy_Factory (  )  [virtual]

Virtual Destructor.

Definition at line 22 of file CSD_TP_Strategy_Factory.cpp.

{
}


Member Function Documentation

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

Reimplemented from ACE_Shared_Object.

Definition at line 28 of file CSD_TP_Strategy_Factory.cpp.

{
  ACE_TRACE ("TAO::CSD::TP_Strategy_Factory::init");

  static int initialized = 0;

  // Only allow initialization once.
  if (initialized)
    return 0;

  initialized = 1;
  TAO_CSD_Strategy_Repository *repo =
    ACE_Dynamic_Service<TAO_CSD_Strategy_Repository>::instance ("TAO_CSD_Strategy_Repository");

  if (repo != 0)
    repo->init(0,0);

  // Parse any service configurator parameters.
  for (int curarg = 0; curarg < argc; curarg++)
    if (ACE_OS::strcasecmp (argv[curarg],
                            ACE_TEXT("-CSDtp")) == 0)
      {
        ACE_CString poa_name;
        unsigned long num_threads = 1;
        bool serialize_servants = true;

        curarg++;
        if (curarg < argc)
          {
            // Parse the parameter
            ACE_CString arg ((const char *)argv[curarg]);
            ACE_CString::size_type pos = arg.find (':');

            if (pos == ACE_CString::npos)
              {
                poa_name = arg;
              }
            else
              {
                poa_name = arg.substr (0, pos);

                ACE_CString arg_remainder =
                                   arg.substr (pos + 1, arg.length () - pos);

                ACE_CString num_thread_str;

                pos = arg_remainder.find (':');

                if (pos == ACE_CString::npos)
                  {
                    num_thread_str = arg_remainder;
                  }
                else
                  {
                    num_thread_str = arg_remainder.substr (0, pos);

                    ACE_CString off_str =
                                     arg_remainder.substr (pos + 1, arg.length () - pos);

                    // Case-insensitive string comparison.
                    if (ACE_OS::strcasecmp (off_str.c_str(), "OFF") == 0)
                      {
                        serialize_servants = false;
                      }
                  }

                num_threads = ACE_OS::strtoul (num_thread_str.c_str (), 0, 10);

                if (num_threads == 0)
                  {
                    // Minimum of 1 thread required.
                    num_threads = 1;
                  }
              }

            // Create the ThreadPool strategy for each named poa.
            TP_Strategy* strategy = 0;
            ACE_NEW_RETURN (strategy,
                            TP_Strategy (num_threads, serialize_servants),
                            -1);
            CSD_Framework::Strategy_var objref = strategy;

            TAO_CSD_Strategy_Repository *repo =
              ACE_Dynamic_Service<TAO_CSD_Strategy_Repository>::instance
              ("TAO_CSD_Strategy_Repository");

            if (repo == 0)
              {
                 TAO_CSD_ThreadPool::init ();
                 repo = ACE_Dynamic_Service<TAO_CSD_Strategy_Repository>::instance (
                            "TAO_CSD_Strategy_Repository"
                          );
              }


            repo->add_strategy (poa_name, strategy);
          }
      }
    else
      {
        if (TAO_debug_level > 0)
          {
            ACE_ERROR ((LM_ERROR,
                        ACE_TEXT("CSD_ORB_Loader: Unknown option ")
                        ACE_TEXT("<%s>.\n"),
                        argv[curarg]));
          }
      }


  return 0;
}


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