#include <RT_ORB_Loader.h>
Inheritance diagram for TAO_RT_ORB_Loader:
Public Member Functions | |
virtual | ~TAO_RT_ORB_Loader (void) |
Destructor. | |
virtual int | init (int argc, ACE_TCHAR *[]) |
Initialize the RT ORB loader hooks. |
|
Destructor.
Definition at line 20 of file RT_ORB_Loader.cpp.
00021 { 00022 } |
|
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 } |