TAO_RT_ORB_Loader Class Reference

#include <RT_ORB_Loader.h>

Inheritance diagram for TAO_RT_ORB_Loader:

Inheritance graph
[legend]
Collaboration diagram for TAO_RT_ORB_Loader:

Collaboration graph
[legend]
List of all members.

Public Member Functions

virtual ~TAO_RT_ORB_Loader (void)
 Destructor.
virtual int init (int argc, ACE_TCHAR *[])
 Initialize the RT ORB loader hooks.

Detailed Description

Definition at line 36 of file RT_ORB_Loader.h.


Constructor & Destructor Documentation

TAO_BEGIN_VERSIONED_NAMESPACE_DECL TAO_RT_ORB_Loader::~TAO_RT_ORB_Loader ( void   )  [virtual]

Destructor.

Definition at line 20 of file RT_ORB_Loader.cpp.

00021 {
00022 }


Member Function Documentation

int TAO_RT_ORB_Loader::init ( int  argc,
ACE_TCHAR [] 
) [virtual]

Initialize the RT ORB loader hooks.

Register the RTCORBA ORBInitializer.

Reimplemented from ACE_Shared_Object.

Definition at line 25 of file RT_ORB_Loader.cpp.

References CORBA::SystemException::_tao_minor_code(), ACE_DEBUG, ACE_ERROR, ACE_NEW_THROW_EX, ACE_SCHED_FIFO, ACE_SCHED_OTHER, ACE_SCHED_RR, ACE_TEXT, ACE_TRACE, ACE_OS::atoi(), CORBA::COMPLETED_NO, ACE_Arg_Shifter_T< CHAR_TYPE >::consume_arg(), ACE_Arg_Shifter_T< CHAR_TYPE >::get_the_parameter(), ACE_Arg_Shifter_T< CHAR_TYPE >::ignore_arg(), ACE_Arg_Shifter_T< CHAR_TYPE >::is_anything_left(), LM_DEBUG, LM_ERROR, PortableInterceptor::register_orb_initializer(), ACE_OS::strcasecmp(), TAO_debug_level, TAO_RT_ORBInitializer::TAO_NETWORK_PRIORITY_MAPPING_LINEAR, TAO_RT_ORBInitializer::TAO_PRIORITY_MAPPING_CONTINUOUS, TAO_RT_ORBInitializer::TAO_PRIORITY_MAPPING_DIRECT, TAO_RT_ORBInitializer::TAO_PRIORITY_MAPPING_LINEAR, TAO_RT_ORBInitializer::TAO_RTCORBA_DT_FIXED, TAO_RT_ORBInitializer::TAO_RTCORBA_DT_IDLE, TAO_RT_ORBInitializer::TAO_RTCORBA_DT_INFINITIVE, THR_SCHED_DEFAULT, THR_SCHED_FIFO, THR_SCHED_RR, THR_SCOPE_PROCESS, THR_SCOPE_SYSTEM, and TAO::VMCID.

00026 {
00027   ACE_TRACE ("TAO_RT_ORB_Loader::init");
00028 
00029   static bool initialized = false;
00030 
00031   // Only allow initialization once.
00032   if (initialized)
00033     return 0;
00034 
00035   initialized = true;
00036 
00037   // Set defaults.
00038   int priority_mapping_type =
00039     TAO_RT_ORBInitializer::TAO_PRIORITY_MAPPING_DIRECT;
00040   int network_priority_mapping_type =
00041     TAO_RT_ORBInitializer::TAO_NETWORK_PRIORITY_MAPPING_LINEAR;
00042   int ace_sched_policy = ACE_SCHED_OTHER;
00043   long sched_policy = THR_SCHED_DEFAULT;
00044   long scope_policy = THR_SCOPE_PROCESS;
00045   int curarg = 0;
00046   ACE_Time_Value dynamic_thread_time;
00047   TAO_RT_ORBInitializer::TAO_RTCORBA_DT_LifeSpan lifespan = TAO_RT_ORBInitializer::TAO_RTCORBA_DT_INFINITIVE;
00048 
00049   ACE_Arg_Shifter arg_shifter (argc, argv);
00050 
00051   // Parse any service configurator parameters.
00052   while (arg_shifter.is_anything_left ())
00053     {
00054       const ACE_TCHAR *current_arg = 0;
00055       if (0 != (current_arg = arg_shifter.get_the_parameter
00056                   (ACE_TEXT("-ORBPriorityMapping"))))
00057         {
00058           const ACE_TCHAR *name = current_arg;
00059           if (ACE_OS::strcasecmp (name,
00060                                   ACE_TEXT("continuous")) == 0)
00061             priority_mapping_type =
00062               TAO_RT_ORBInitializer::TAO_PRIORITY_MAPPING_CONTINUOUS;
00063           else if (ACE_OS::strcasecmp (name,
00064                                        ACE_TEXT("linear")) == 0)
00065             priority_mapping_type =
00066               TAO_RT_ORBInitializer::TAO_PRIORITY_MAPPING_LINEAR;
00067           else if (ACE_OS::strcasecmp (name,
00068                                        ACE_TEXT("direct")) == 0)
00069             priority_mapping_type =
00070               TAO_RT_ORBInitializer::TAO_PRIORITY_MAPPING_DIRECT;
00071           else
00072             ACE_DEBUG ((LM_DEBUG,
00073                         ACE_TEXT("RT_ORB_Loader - unknown argument")
00074                         ACE_TEXT(" <%s> for -ORBPriorityMapping\n"),
00075                         name));
00076           arg_shifter.consume_arg ();
00077         }
00078       else if (0 != (current_arg = arg_shifter.get_the_parameter
00079                                  (ACE_TEXT("-ORBSchedPolicy"))))
00080         {
00081           const ACE_TCHAR *name = current_arg;
00082           if (ACE_OS::strcasecmp (name,
00083                                   ACE_TEXT("SCHED_OTHER")) == 0)
00084             {
00085               ace_sched_policy = ACE_SCHED_OTHER;
00086               sched_policy = THR_SCHED_DEFAULT;
00087             }
00088           else if (ACE_OS::strcasecmp (name,
00089                                        ACE_TEXT("SCHED_FIFO")) == 0)
00090             {
00091               ace_sched_policy = ACE_SCHED_FIFO;
00092               sched_policy = THR_SCHED_FIFO;
00093             }
00094           else if (ACE_OS::strcasecmp (name,
00095                                        ACE_TEXT("SCHED_RR")) == 0)
00096             {
00097               ace_sched_policy = ACE_SCHED_RR;
00098               sched_policy = THR_SCHED_RR;
00099             }
00100           else
00101             ACE_DEBUG ((LM_DEBUG,
00102                         ACE_TEXT("RT_ORB_Loader - unknown argument")
00103                         ACE_TEXT(" <%s> for -ORBSchedPolicy\n"),
00104                         name));
00105           arg_shifter.consume_arg ();
00106         }
00107       else if (0 != (current_arg = arg_shifter.get_the_parameter
00108                                  (ACE_TEXT("-ORBScopePolicy"))))
00109         {
00110           const ACE_TCHAR *name = current_arg;
00111           if (ACE_OS::strcasecmp (name,
00112                                   ACE_TEXT("SYSTEM")) == 0)
00113             scope_policy = THR_SCOPE_SYSTEM;
00114           else if (ACE_OS::strcasecmp (name,
00115                                        ACE_TEXT("PROCESS")) == 0)
00116             scope_policy = THR_SCOPE_PROCESS;
00117           else
00118             ACE_DEBUG ((LM_DEBUG,
00119                         ACE_TEXT("RT_ORB_Loader - unknown argument")
00120                         ACE_TEXT(" <%s> for -ORBScopePolicy\n"),
00121                         name));
00122           arg_shifter.consume_arg ();
00123         }
00124       else if (0 != (current_arg = arg_shifter.get_the_parameter
00125                                  (ACE_TEXT("-RTORBNetworkPriorityMapping"))))
00126         {
00127           const ACE_TCHAR *name = current_arg;
00128           if (ACE_OS::strcasecmp (name,
00129                                   ACE_TEXT("linear")) == 0)
00130               network_priority_mapping_type =
00131                 TAO_RT_ORBInitializer::TAO_NETWORK_PRIORITY_MAPPING_LINEAR;
00132           arg_shifter.consume_arg ();
00133         }
00134       else if (0 != (current_arg = arg_shifter.get_the_parameter
00135                                    (ACE_TEXT("-RTORBDynamicThreadIdleTimeout"))))
00136         {
00137           const ACE_TCHAR *name = current_arg;
00138           int timeout = ACE_OS::atoi (name);
00139           dynamic_thread_time = ACE_Time_Value (0, timeout);
00140           lifespan = TAO_RT_ORBInitializer::TAO_RTCORBA_DT_IDLE;
00141           arg_shifter.consume_arg ();
00142         }
00143       else if (0 != (current_arg = arg_shifter.get_the_parameter
00144                                    (ACE_TEXT("-RTORBDynamicThreadRunTime"))))
00145         {
00146           const ACE_TCHAR *name = current_arg;
00147           int timeout = ACE_OS::atoi (name);
00148           dynamic_thread_time = ACE_Time_Value (0, timeout);
00149           lifespan = TAO_RT_ORBInitializer::TAO_RTCORBA_DT_FIXED;
00150           arg_shifter.consume_arg ();
00151         }
00152     else
00153       {
00154         arg_shifter.ignore_arg ();
00155         if (TAO_debug_level > 0)
00156         {
00157           ACE_ERROR ((LM_ERROR,
00158                       ACE_TEXT("RT_ORB_Loader: Unknown option ")
00159                       ACE_TEXT("<%s>.\n"),
00160                       argv[curarg]));
00161         }
00162       }
00163     }
00164 
00165   // Register the ORB initializer.
00166   try
00167     {
00168       PortableInterceptor::ORBInitializer_ptr temp_orb_initializer =
00169         PortableInterceptor::ORBInitializer::_nil ();
00170 
00171       /// Register the RTCORBA ORBInitializer.
00172       ACE_NEW_THROW_EX (temp_orb_initializer,
00173                         TAO_RT_ORBInitializer (priority_mapping_type,
00174                                                network_priority_mapping_type,
00175                                                ace_sched_policy,
00176                                                sched_policy,
00177                                                scope_policy,
00178                                                lifespan,
00179                                                dynamic_thread_time),
00180                         CORBA::NO_MEMORY (
00181                           CORBA::SystemException::_tao_minor_code (
00182                             TAO::VMCID,
00183                             ENOMEM),
00184                           CORBA::COMPLETED_NO));
00185 
00186       PortableInterceptor::ORBInitializer_var orb_initializer;
00187       orb_initializer = temp_orb_initializer;
00188 
00189       PortableInterceptor::register_orb_initializer (orb_initializer.in ());
00190     }
00191   catch (const ::CORBA::Exception& ex)
00192     {
00193       ex._tao_print_exception (
00194         "Unexpected exception caught while "
00195         "initializing the RTORB");
00196       return 1;
00197     }
00198 
00199   return 0;
00200 }


The documentation for this class was generated from the following files:
Generated on Tue Feb 2 17:43:00 2010 for TAO_RTCORBA by  doxygen 1.4.7