RT_ORB_Loader.cpp

Go to the documentation of this file.
00001 #include "tao/RTCORBA/RT_ORB_Loader.h"
00002 
00003 #if defined (TAO_HAS_CORBA_MESSAGING) && TAO_HAS_CORBA_MESSAGING != 0
00004 
00005 #include "tao/RTCORBA/RT_ORBInitializer.h"
00006 
00007 #include "tao/debug.h"
00008 #include "tao/ORB_Constants.h"
00009 #include "tao/ORBInitializer_Registry.h"
00010 #include "tao/SystemException.h"
00011 #include "ace/OS_NS_strings.h"
00012 #include "ace/Arg_Shifter.h"
00013 
00014 ACE_RCSID (RTCORBA,
00015            RT_ORB_Loader,
00016            "RT_ORB_Loader.cpp,v 1.25 2006/03/16 15:53:36 sjiang Exp")
00017 
00018 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00019 
00020 TAO_RT_ORB_Loader::~TAO_RT_ORB_Loader (void)
00021 {
00022 }
00023 
00024 int
00025 TAO_RT_ORB_Loader::init (int argc,
00026                          ACE_TCHAR* argv[])
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 }
00194 
00195 TAO_END_VERSIONED_NAMESPACE_DECL
00196 
00197 /////////////////////////////////////////////////////////////////////
00198 
00199 ACE_FACTORY_DEFINE (TAO_RTCORBA, TAO_RT_ORB_Loader)
00200 ACE_STATIC_SVC_DEFINE (TAO_RT_ORB_Loader,
00201                        ACE_TEXT ("RT_ORB_Loader"),
00202                        ACE_SVC_OBJ_T,
00203                        &ACE_SVC_NAME (TAO_RT_ORB_Loader),
00204                        ACE_Service_Type::DELETE_THIS
00205                        | ACE_Service_Type::DELETE_OBJ,
00206                        0)
00207 
00208 #endif /* TAO_HAS_CORBA_MESSAGING && TAO_HAS_CORBA_MESSAGING != 0 */

Generated on Thu Nov 9 12:58:01 2006 for TAO_RTCORBA by doxygen 1.3.6