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.


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 argv[]
[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 ACE_ANY_EXCEPTION, ACE_Arg_Shifter, ACE_CATCHANY, ACE_DEBUG, ACE_ENDTRY, ACE_ENV_ARG_PARAMETER, ACE_ERROR, ACE_NEW_THROW_EX, ACE_PRINT_EXCEPTION, ACE_SCHED_FIFO, ACE_SCHED_OTHER, ACE_SCHED_RR, ACE_TCHAR, ACE_TEXT, ACE_Time_Value, ACE_TRACE, ACE_TRY_CHECK, ACE_TRY_NEW_ENV, ACE_OS::atoi(), LM_DEBUG, LM_ERROR, PortableInterceptor::register_orb_initializer(), ACE_OS::strcasecmp(), and TAO_debug_level.

00027 {
00028   ACE_TRACE ("TAO_RT_ORB_Loader::init");
00029 
00030   static bool initialized = false;
00031 
00032   // Only allow initialization once.
00033   if (initialized)
00034     return 0;
00035 
00036   initialized = true;
00037 
00038   // Set defaults.
00039   int priority_mapping_type =
00040     TAO_RT_ORBInitializer::TAO_PRIORITY_MAPPING_DIRECT;
00041   int network_priority_mapping_type =
00042     TAO_RT_ORBInitializer::TAO_NETWORK_PRIORITY_MAPPING_LINEAR;
00043   int ace_sched_policy = ACE_SCHED_OTHER;
00044   long sched_policy = THR_SCHED_DEFAULT;
00045   long scope_policy = THR_SCOPE_PROCESS;
00046   int curarg = 0;
00047   ACE_Time_Value dynamic_thread_idle_timeout;
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_idle_timeout = ACE_Time_Value (0, timeout);
00140           arg_shifter.consume_arg ();
00141         }
00142     else
00143       {
00144         arg_shifter.ignore_arg ();
00145         if (TAO_debug_level > 0)
00146         {
00147           ACE_ERROR ((LM_ERROR,
00148                       ACE_TEXT("RT_ORB_Loader: Unknown option ")
00149                       ACE_TEXT("<%s>.\n"),
00150                       argv[curarg]));
00151         }
00152       }
00153     }
00154 
00155   // Register the ORB initializer.
00156   ACE_TRY_NEW_ENV
00157     {
00158       PortableInterceptor::ORBInitializer_ptr temp_orb_initializer =
00159         PortableInterceptor::ORBInitializer::_nil ();
00160 
00161       /// Register the RTCORBA ORBInitializer.
00162       ACE_NEW_THROW_EX (temp_orb_initializer,
00163                         TAO_RT_ORBInitializer (priority_mapping_type,
00164                                                network_priority_mapping_type,
00165                                                ace_sched_policy,
00166                                                sched_policy,
00167                                                scope_policy,
00168                                                dynamic_thread_idle_timeout),
00169                         CORBA::NO_MEMORY (
00170                           CORBA::SystemException::_tao_minor_code (
00171                             TAO::VMCID,
00172                             ENOMEM),
00173                           CORBA::COMPLETED_NO));
00174       ACE_TRY_CHECK;
00175 
00176       PortableInterceptor::ORBInitializer_var orb_initializer;
00177       orb_initializer = temp_orb_initializer;
00178 
00179       PortableInterceptor::register_orb_initializer (orb_initializer.in ()
00180                                                      ACE_ENV_ARG_PARAMETER);
00181       ACE_TRY_CHECK;
00182     }
00183   ACE_CATCHANY
00184     {
00185       ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
00186                            "Unexpected exception caught while "
00187                            "initializing the RTORB");
00188       return 1;
00189     }
00190   ACE_ENDTRY;
00191 
00192   return 0;
00193 }


The documentation for this class was generated from the following files:
Generated on Thu Nov 9 12:59:37 2006 for TAO_RTCORBA by doxygen 1.3.6