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