00001
00002
00003 #include "orbsvcs/Event/EC_Default_Factory.h"
00004 #include "orbsvcs/Event/EC_Reactive_Dispatching.h"
00005 #include "orbsvcs/Event/EC_MT_Dispatching.h"
00006 #include "orbsvcs/Event/EC_Basic_Filter_Builder.h"
00007 #include "orbsvcs/Event/EC_Prefix_Filter_Builder.h"
00008 #include "orbsvcs/Event/EC_ConsumerAdmin.h"
00009 #include "orbsvcs/Event/EC_SupplierAdmin.h"
00010 #include "orbsvcs/Event/EC_Default_ProxyConsumer.h"
00011 #include "orbsvcs/Event/EC_Default_ProxySupplier.h"
00012 #include "orbsvcs/Event/EC_Trivial_Supplier_Filter.h"
00013 #include "orbsvcs/Event/EC_Per_Supplier_Filter.h"
00014 #include "orbsvcs/Event/EC_ObserverStrategy.h"
00015 #include "orbsvcs/Event/EC_Null_Scheduling.h"
00016 #include "orbsvcs/Event/EC_Group_Scheduling.h"
00017 #include "orbsvcs/Event/EC_Reactive_Timeout_Generator.h"
00018 #include "orbsvcs/Event/EC_Event_Channel_Base.h"
00019 #include "orbsvcs/Event/EC_Reactive_ConsumerControl.h"
00020 #include "orbsvcs/Event/EC_Reactive_SupplierControl.h"
00021 #include "orbsvcs/Event/EC_Thread_Flags.h"
00022
00023 #include "orbsvcs/ESF/ESF_Proxy_List.h"
00024 #include "orbsvcs/ESF/ESF_Proxy_RB_Tree.h"
00025 #include "orbsvcs/ESF/ESF_Immediate_Changes.h"
00026 #include "orbsvcs/ESF/ESF_Copy_On_Read.h"
00027 #include "orbsvcs/ESF/ESF_Copy_On_Write.h"
00028 #include "orbsvcs/ESF/ESF_Delayed_Changes.h"
00029 #include "orbsvcs/ESF/ESF_Delayed_Command.h"
00030
00031 #include "tao/ORB_Core.h"
00032
00033 #include "ace/Arg_Shifter.h"
00034 #include "ace/Sched_Params.h"
00035 #include "ace/OS_NS_strings.h"
00036 #include "ace/Dynamic_Service.h"
00037
00038 #if ! defined (__ACE_INLINE__)
00039 #include "orbsvcs/Event/EC_Default_Factory.inl"
00040 #endif
00041
00042 ACE_RCSID(Event, EC_Default_Factory, "$Id: EC_Default_Factory.cpp 75279 2006-11-08 19:17:49Z cleeland $")
00043
00044 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00045
00046 TAO_EC_Default_Factory::~TAO_EC_Default_Factory (void)
00047 {
00048 }
00049
00050 int
00051 TAO_EC_Default_Factory::init_svcs (void)
00052 {
00053 TAO_EC_Simple_Queue_Full_Action::init_svcs();
00054 return ACE_Service_Config::static_svcs ()->
00055 insert (&ace_svc_desc_TAO_EC_Default_Factory);
00056 }
00057
00058 void
00059 TAO_EC_Default_Factory::unsupported_option_value (const char * option_name,
00060 const char * option_value)
00061 {
00062 ACE_ERROR ((LM_ERROR,
00063 "EC_Default_Factory - "
00064 "Unsupported <%s> option value: <%s>. "
00065 "Ignoring this option - using defaults instead.\n",
00066 option_name,
00067 option_value));
00068 }
00069
00070 int
00071 TAO_EC_Default_Factory::init (int argc, ACE_TCHAR* argv[])
00072 {
00073 ACE_Arg_Shifter arg_shifter (argc, argv);
00074
00075 int priority =
00076 (ACE_Sched_Params::priority_min (ACE_SCHED_FIFO) +
00077 ACE_Sched_Params::priority_max (ACE_SCHED_FIFO)) / 2;
00078 this->dispatching_threads_priority_ =
00079 ACE_Sched_Params::next_priority (ACE_SCHED_FIFO, priority);
00080
00081 while (arg_shifter.is_anything_left ())
00082 {
00083 const ACE_TCHAR *arg = arg_shifter.get_current ();
00084
00085 if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECDispatching")) == 0)
00086 {
00087 arg_shifter.consume_arg ();
00088
00089 if (arg_shifter.is_parameter_next ())
00090 {
00091 const ACE_TCHAR* opt = arg_shifter.get_current ();
00092 if (ACE_OS::strcasecmp (opt, ACE_TEXT("reactive")) == 0)
00093 this->dispatching_ = 0;
00094 else if (ACE_OS::strcasecmp (opt, ACE_TEXT("mt")) == 0)
00095 this->dispatching_ = 1;
00096 else
00097 this->unsupported_option_value ("-ECDispatching", opt);
00098 arg_shifter.consume_arg ();
00099 }
00100 }
00101 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECDispatchingThreadFlags")) == 0)
00102 {
00103 arg_shifter.consume_arg ();
00104
00105
00106 if (arg_shifter.is_parameter_next ())
00107 {
00108 const ACE_TCHAR* s = arg_shifter.get_current ();
00109
00110 ACE_TCHAR* opt = ACE_OS::strdup (s);
00111
00112 ACE_TCHAR* aux;
00113 ACE_TCHAR* flags = ACE_OS::strtok_r (opt, ACE_TEXT_CHAR_TO_TCHAR(":"), &aux);
00114
00115 TAO_EC_Thread_Flags tf(ACE_TEXT_ALWAYS_CHAR (flags));
00116 this->dispatching_threads_flags_ = tf.flags ();
00117
00118 ACE_TCHAR* arg = ACE_OS::strtok_r (0, ACE_TEXT_CHAR_TO_TCHAR(":"), &aux);
00119 if (arg)
00120 {
00121 long prio = ACE_OS::strtol (arg, 0, 0);
00122
00123 this->dispatching_threads_priority_ = prio;
00124 }
00125 else
00126 {
00127
00128 this->dispatching_threads_priority_ = tf.default_priority ();
00129 }
00130 ACE_OS::free (opt);
00131 arg_shifter.consume_arg ();
00132 }
00133 }
00134
00135 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECDispatchingThreads")) == 0)
00136 {
00137 arg_shifter.consume_arg ();
00138
00139 if (arg_shifter.is_parameter_next ())
00140 {
00141 const ACE_TCHAR* opt = arg_shifter.get_current ();
00142 this->dispatching_threads_ = ACE_OS::atoi (opt);
00143 arg_shifter.consume_arg ();
00144 }
00145 }
00146
00147 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECFiltering")) == 0)
00148 {
00149 arg_shifter.consume_arg ();
00150
00151 if (arg_shifter.is_parameter_next ())
00152 {
00153 const ACE_TCHAR* opt = arg_shifter.get_current ();
00154 if (ACE_OS::strcasecmp (opt, ACE_TEXT("null")) == 0)
00155 this->filtering_ = 0;
00156 else if (ACE_OS::strcasecmp (opt, ACE_TEXT("basic")) == 0)
00157 this->filtering_ = 1;
00158 else if (ACE_OS::strcasecmp (opt, ACE_TEXT("prefix")) == 0)
00159 this->filtering_ = 2;
00160 else
00161 this->unsupported_option_value ("-ECFiltering", opt);
00162 arg_shifter.consume_arg ();
00163 }
00164 }
00165
00166 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECSupplierFilter")) == 0
00167
00168 || ACE_OS::strcasecmp (arg, ACE_TEXT("-ECSupplierFiltering")) == 0)
00169 {
00170 arg_shifter.consume_arg ();
00171
00172 if (arg_shifter.is_parameter_next ())
00173 {
00174 const ACE_TCHAR* opt = arg_shifter.get_current ();
00175 if (ACE_OS::strcasecmp (opt, ACE_TEXT("null")) == 0)
00176 this->supplier_filtering_ = 0;
00177 else if (ACE_OS::strcasecmp (opt, ACE_TEXT("per-supplier")) == 0)
00178 this->supplier_filtering_ = 1;
00179 else
00180 this->unsupported_option_value ("-ECSupplierFilter", opt);
00181 arg_shifter.consume_arg ();
00182 }
00183 }
00184
00185 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECTimeout")) == 0)
00186 {
00187 arg_shifter.consume_arg ();
00188
00189 if (arg_shifter.is_parameter_next ())
00190 {
00191 const ACE_TCHAR* opt = arg_shifter.get_current ();
00192 if (ACE_OS::strcasecmp (opt, ACE_TEXT("reactive")) == 0)
00193 this->timeout_ = 0;
00194 else
00195 this->unsupported_option_value ("-ECTimeout", opt);
00196 arg_shifter.consume_arg ();
00197 }
00198 }
00199
00200 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECObserver")) == 0)
00201 {
00202 arg_shifter.consume_arg ();
00203
00204 if (arg_shifter.is_parameter_next ())
00205 {
00206 const ACE_TCHAR* opt = arg_shifter.get_current ();
00207 if (ACE_OS::strcasecmp (opt, ACE_TEXT("null")) == 0)
00208 this->observer_ = 0;
00209 else if (ACE_OS::strcasecmp (opt, ACE_TEXT("basic")) == 0)
00210 this->observer_ = 1;
00211 else if (ACE_OS::strcasecmp (opt, ACE_TEXT("reactive")) == 0)
00212 this->observer_ = 2;
00213 else
00214 this->unsupported_option_value ("-ECObserver", opt);
00215 arg_shifter.consume_arg ();
00216 }
00217 }
00218
00219 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECScheduling")) == 0)
00220 {
00221 arg_shifter.consume_arg ();
00222
00223 if (arg_shifter.is_parameter_next ())
00224 {
00225 const ACE_TCHAR* opt = arg_shifter.get_current ();
00226 if (ACE_OS::strcasecmp (opt, ACE_TEXT("null")) == 0)
00227 this->scheduling_ = 0;
00228 else if (ACE_OS::strcasecmp (opt, ACE_TEXT("group")) == 0)
00229 this->scheduling_ = 1;
00230 else
00231 this->unsupported_option_value ("-ECScheduling", opt);
00232 arg_shifter.consume_arg ();
00233 }
00234 }
00235
00236 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECProxyPushConsumerCollection")) == 0)
00237 {
00238 arg_shifter.consume_arg ();
00239
00240 if (arg_shifter.is_parameter_next ())
00241 {
00242 const ACE_TCHAR *current_arg = arg_shifter.get_current ();
00243 ACE_TCHAR *opt = ACE_OS::strdup (current_arg);
00244 int collection_type = 0;
00245 int synch_type = 0;
00246 int iteration_type = 0;
00247
00248 ACE_TCHAR* aux;
00249 for (ACE_TCHAR* arg = ACE_OS::strtok_r (opt, ACE_TEXT(":"), &aux);
00250 arg != 0;
00251 arg = ACE_OS::strtok_r (0, ACE_TEXT(":"), &aux))
00252 {
00253 if (ACE_OS::strcasecmp (arg, ACE_TEXT("mt")) == 0)
00254 synch_type = 0;
00255 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("st")) == 0)
00256 synch_type = 1;
00257 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("list")) == 0)
00258 collection_type = 0;
00259 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("rb_tree")) == 0)
00260 collection_type = 1;
00261 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("immediate")) == 0)
00262 iteration_type = 0;
00263 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("copy_on_read")) == 0)
00264 iteration_type = 1;
00265 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("copy_on_write")) == 0)
00266 iteration_type = 2;
00267 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("delayed")) == 0)
00268 iteration_type = 3;
00269 else
00270 ACE_ERROR ((LM_ERROR,
00271 "EC_Default_Factory - "
00272 "Unknown consumer collection modifier <%s>.\n", arg));
00273 }
00274 ACE_OS::free (opt);
00275 this->consumer_collection_ =
00276 (synch_type << 8) |(collection_type << 4) | iteration_type;
00277 arg_shifter.consume_arg ();
00278 }
00279 }
00280
00281 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECProxyPushSupplierCollection")) == 0)
00282 {
00283 arg_shifter.consume_arg ();
00284
00285 if (arg_shifter.is_parameter_next ())
00286 {
00287 const ACE_TCHAR* current_arg = arg_shifter.get_current();
00288 ACE_TCHAR* opt = ACE_OS::strdup(current_arg);
00289 int collection_type = 0;
00290 int synch_type = 0;
00291 int iteration_type = 0;
00292
00293 ACE_TCHAR* aux;
00294 for (ACE_TCHAR* arg = ACE_OS::strtok_r (opt, ACE_TEXT(":"), &aux);
00295 arg != 0;
00296 arg = ACE_OS::strtok_r (0, ACE_TEXT(":"), &aux))
00297 {
00298 if (ACE_OS::strcasecmp (arg, ACE_TEXT("mt")) == 0)
00299 synch_type = 0;
00300 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("st")) == 0)
00301 synch_type = 1;
00302 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("list")) == 0)
00303 collection_type = 0;
00304 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("rb_tree")) == 0)
00305 collection_type = 1;
00306 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("immediate")) == 0)
00307 iteration_type = 0;
00308 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("copy_on_read")) == 0)
00309 iteration_type = 1;
00310 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("copy_on_write")) == 0)
00311 iteration_type = 2;
00312 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("delayed")) == 0)
00313 iteration_type = 3;
00314 else
00315 ACE_ERROR ((LM_ERROR,
00316 "EC_Default_Factory - "
00317 "Unknown supplier collection modifier <%s>.\n", arg));
00318 }
00319 ACE_OS::free(opt);
00320 this->supplier_collection_ =
00321 (synch_type << 8) | (collection_type << 4) | iteration_type;
00322 arg_shifter.consume_arg ();
00323 }
00324 }
00325
00326 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECProxyConsumerLock")) == 0)
00327 {
00328 arg_shifter.consume_arg ();
00329
00330 if (arg_shifter.is_parameter_next ())
00331 {
00332 const ACE_TCHAR* opt = arg_shifter.get_current ();
00333 if (ACE_OS::strcasecmp (opt, ACE_TEXT("null")) == 0)
00334 this->consumer_lock_ = 0;
00335 else if (ACE_OS::strcasecmp (opt, ACE_TEXT("thread")) == 0)
00336 this->consumer_lock_ = 1;
00337 else if (ACE_OS::strcasecmp (opt, ACE_TEXT("recursive")) == 0)
00338 this->consumer_lock_ = 2;
00339 else
00340 this->unsupported_option_value ("-ECProxyConsumerLock", opt);
00341 arg_shifter.consume_arg ();
00342 }
00343 }
00344
00345 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECProxySupplierLock")) == 0)
00346 {
00347 arg_shifter.consume_arg ();
00348
00349 if (arg_shifter.is_parameter_next ())
00350 {
00351 const ACE_TCHAR* opt = arg_shifter.get_current ();
00352 if (ACE_OS::strcasecmp (opt, ACE_TEXT("null")) == 0)
00353 this->supplier_lock_ = 0;
00354 else if (ACE_OS::strcasecmp (opt, ACE_TEXT("thread")) == 0)
00355 this->supplier_lock_ = 1;
00356 else if (ACE_OS::strcasecmp (opt, ACE_TEXT("recursive")) == 0)
00357 this->supplier_lock_ = 2;
00358 else
00359 this->unsupported_option_value ("-ECProxySupplierLock", opt);
00360 arg_shifter.consume_arg ();
00361 }
00362 }
00363
00364 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECUseORBId")) == 0)
00365 {
00366 arg_shifter.consume_arg ();
00367
00368 if (arg_shifter.is_parameter_next ())
00369 {
00370
00371 this->orbid_ = ACE_TEXT_ALWAYS_CHAR(arg_shifter.get_current ());
00372 arg_shifter.consume_arg ();
00373 }
00374 }
00375
00376 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECConsumerControl")) == 0)
00377 {
00378 arg_shifter.consume_arg ();
00379
00380 if (arg_shifter.is_parameter_next ())
00381 {
00382 const ACE_TCHAR* opt = arg_shifter.get_current ();
00383 if (ACE_OS::strcasecmp (opt, ACE_TEXT("null")) == 0)
00384 this->consumer_control_ = 0;
00385 else if (ACE_OS::strcasecmp (opt, ACE_TEXT("reactive")) == 0)
00386 this->consumer_control_ = 1;
00387 else
00388 this->unsupported_option_value ("-ECConsumerControl", opt);
00389 arg_shifter.consume_arg ();
00390 }
00391 }
00392
00393 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECSupplierControl")) == 0)
00394 {
00395 arg_shifter.consume_arg ();
00396
00397 if (arg_shifter.is_parameter_next ())
00398 {
00399 const ACE_TCHAR* opt = arg_shifter.get_current ();
00400 if (ACE_OS::strcasecmp (opt, ACE_TEXT("null")) == 0)
00401 this->supplier_control_ = 0;
00402 else if (ACE_OS::strcasecmp (opt, ACE_TEXT("reactive")) == 0)
00403 this->supplier_control_ = 1;
00404 else
00405 this->unsupported_option_value ("-ECSupplierControl", opt);
00406 arg_shifter.consume_arg ();
00407 }
00408 }
00409
00410 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECConsumerControlPeriod")) == 0)
00411 {
00412 arg_shifter.consume_arg ();
00413
00414 if (arg_shifter.is_parameter_next ())
00415 {
00416 const ACE_TCHAR* opt = arg_shifter.get_current ();
00417 this->consumer_control_period_ = ACE_OS::atoi (opt);
00418 arg_shifter.consume_arg ();
00419 }
00420 }
00421
00422 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECSupplierControlPeriod")) == 0)
00423 {
00424 arg_shifter.consume_arg ();
00425
00426 if (arg_shifter.is_parameter_next ())
00427 {
00428 const ACE_TCHAR* opt = arg_shifter.get_current ();
00429 this->supplier_control_period_ = ACE_OS::atoi (opt);
00430 arg_shifter.consume_arg ();
00431 }
00432 }
00433
00434 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECConsumerControlTimeout")) == 0)
00435 {
00436 arg_shifter.consume_arg ();
00437
00438 if (arg_shifter.is_parameter_next ())
00439 {
00440 const ACE_TCHAR* opt = arg_shifter.get_current ();
00441 unsigned long timeout = ACE_OS::strtoul(opt, 0, 10);
00442 this->consumer_control_timeout_.usec(timeout);
00443 arg_shifter.consume_arg ();
00444 }
00445 }
00446
00447 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECSupplierControlTimeout")) == 0)
00448 {
00449 arg_shifter.consume_arg ();
00450
00451 if (arg_shifter.is_parameter_next ())
00452 {
00453 const ACE_TCHAR* opt = arg_shifter.get_current ();
00454 unsigned long timeout = ACE_OS::strtoul(opt, 0, 10);
00455 this->supplier_control_timeout_.usec(timeout);
00456 arg_shifter.consume_arg ();
00457 }
00458 }
00459
00460 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECConsumerValidateConnection")) == 0)
00461 {
00462 arg_shifter.consume_arg ();
00463
00464 if (arg_shifter.is_parameter_next ())
00465 {
00466 const ACE_TCHAR* opt = arg_shifter.get_current ();
00467 this->consumer_validate_connection_ = ACE_OS::atoi (opt);
00468 arg_shifter.consume_arg ();
00469 }
00470 }
00471
00472 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECPushSupplierSet")) == 0)
00473 {
00474 ACE_ERROR ((LM_ERROR,
00475 "EC_Default_Factory - "
00476 "obsolete option <%s>, ignored\n", arg));
00477 arg_shifter.consume_arg ();
00478 }
00479
00480 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECQueueFullServiceObject")) == 0)
00481 {
00482 arg_shifter.consume_arg ();
00483 if (arg_shifter.is_parameter_next ())
00484 {
00485 const char* opt = arg_shifter.get_current ();
00486 this->queue_full_service_object_name_.set(opt);
00487 arg_shifter.consume_arg ();
00488 }
00489 }
00490
00491 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECConsumerAdminLock")) == 0)
00492 {
00493 ACE_ERROR ((LM_ERROR,
00494 "EC_Default_Factory - "
00495 "obsolete option <%s>, ignored\n", arg));
00496 arg_shifter.consume_arg ();
00497 }
00498
00499 else if (ACE_OS::strcasecmp (arg, ACE_TEXT("-ECSupplierAdminLock")) == 0)
00500 {
00501 ACE_ERROR ((LM_ERROR,
00502 "EC_Default_Factory - "
00503 "obsolete option <%s>, ignored\n", arg));
00504 arg_shifter.consume_arg ();
00505 }
00506
00507 else if (ACE_OS::strncmp (arg, ACE_TEXT("-EC"), 3) == 0)
00508 {
00509 arg_shifter.consume_arg ();
00510 ACE_ERROR ((LM_ERROR,
00511 "EC_Default_Factory - "
00512 "unknown option <%s>\n",
00513 arg));
00514 }
00515 else
00516 {
00517 arg_shifter.consume_arg ();
00518 ACE_DEBUG ((LM_DEBUG,
00519 "EC_Default_Factory - "
00520 "ignoring option <%s>\n",
00521 arg));
00522 }
00523 }
00524 return 0;
00525 }
00526
00527 int
00528 TAO_EC_Default_Factory::fini (void)
00529 {
00530 return 0;
00531 }
00532
00533
00534
00535 TAO_EC_Queue_Full_Service_Object*
00536 TAO_EC_Default_Factory::find_service_object (const char* wanted,
00537 const char* fallback)
00538 {
00539 TAO_EC_Queue_Full_Service_Object* so = 0;
00540 so = ACE_Dynamic_Service<TAO_EC_Queue_Full_Service_Object>::instance (wanted);
00541 if (so != 0)
00542 return so;
00543
00544 ACE_ERROR ((LM_ERROR,
00545 "EC (%P|%t) EC_Default_Factory::find_service_object "
00546 "unable to find queue full service object '%s'; "
00547 "using '%s' instead\n",
00548 wanted,
00549 fallback));
00550
00551 so = ACE_Dynamic_Service<TAO_EC_Queue_Full_Service_Object>::instance (fallback);
00552 if (so != 0)
00553 return so;
00554
00555 ACE_ERROR ((LM_ERROR,
00556 "EC (%P|%t) EC_Default_Factory::find_service_object "
00557 "unable find default queue full service object '%s'; "
00558 "aborting.\n",
00559 fallback));
00560 ACE_OS::abort ();
00561 return 0;
00562 }
00563
00564 TAO_EC_Dispatching*
00565 TAO_EC_Default_Factory::create_dispatching (TAO_EC_Event_Channel_Base *)
00566 {
00567 if (this->dispatching_ == 0)
00568 return new TAO_EC_Reactive_Dispatching ();
00569 else if (this->dispatching_ == 1)
00570 {
00571 TAO_EC_Queue_Full_Service_Object* so =
00572 this->find_service_object (this->queue_full_service_object_name_.fast_rep(),
00573 TAO_EC_DEFAULT_QUEUE_FULL_SERVICE_OBJECT_NAME);
00574 return new TAO_EC_MT_Dispatching (this->dispatching_threads_,
00575 this->dispatching_threads_flags_,
00576 this->dispatching_threads_priority_,
00577 this->dispatching_threads_force_active_,
00578 so);
00579 }
00580 return 0;
00581 }
00582
00583 void
00584 TAO_EC_Default_Factory::destroy_dispatching (TAO_EC_Dispatching *x)
00585 {
00586 delete x;
00587 }
00588
00589 TAO_EC_Filter_Builder*
00590 TAO_EC_Default_Factory::create_filter_builder (TAO_EC_Event_Channel_Base *ec)
00591 {
00592 if (this->filtering_ == 0)
00593 return new TAO_EC_Null_Filter_Builder ();
00594 else if (this->filtering_ == 1)
00595 return new TAO_EC_Basic_Filter_Builder (ec);
00596 else if (this->filtering_ == 2)
00597 return new TAO_EC_Prefix_Filter_Builder (ec);
00598 return 0;
00599 }
00600
00601 void
00602 TAO_EC_Default_Factory::destroy_filter_builder (TAO_EC_Filter_Builder *x)
00603 {
00604 delete x;
00605 }
00606
00607 TAO_EC_Supplier_Filter_Builder*
00608 TAO_EC_Default_Factory::create_supplier_filter_builder (TAO_EC_Event_Channel_Base *ec)
00609 {
00610 if (this->supplier_filtering_ == 0)
00611 return new TAO_EC_Trivial_Supplier_Filter_Builder (ec);
00612 else if (this->supplier_filtering_ == 1)
00613 return new TAO_EC_Per_Supplier_Filter_Builder (ec);
00614 return 0;
00615 }
00616
00617 void
00618 TAO_EC_Default_Factory::destroy_supplier_filter_builder (TAO_EC_Supplier_Filter_Builder *x)
00619 {
00620 delete x;
00621 }
00622
00623 TAO_EC_ConsumerAdmin*
00624 TAO_EC_Default_Factory::create_consumer_admin (TAO_EC_Event_Channel_Base *ec)
00625 {
00626 return new TAO_EC_ConsumerAdmin (ec);
00627 }
00628
00629 void
00630 TAO_EC_Default_Factory::destroy_consumer_admin (TAO_EC_ConsumerAdmin *x)
00631 {
00632 delete x;
00633 }
00634
00635 TAO_EC_SupplierAdmin*
00636 TAO_EC_Default_Factory::create_supplier_admin (TAO_EC_Event_Channel_Base *ec)
00637 {
00638 return new TAO_EC_SupplierAdmin (ec);
00639 }
00640
00641 void
00642 TAO_EC_Default_Factory::destroy_supplier_admin (TAO_EC_SupplierAdmin *x)
00643 {
00644 delete x;
00645 }
00646
00647 TAO_EC_ProxyPushSupplier*
00648 TAO_EC_Default_Factory::create_proxy_push_supplier (TAO_EC_Event_Channel_Base *ec)
00649 {
00650 return new TAO_EC_Default_ProxyPushSupplier (ec, consumer_validate_connection_);
00651 }
00652
00653 void
00654 TAO_EC_Default_Factory::destroy_proxy_push_supplier (TAO_EC_ProxyPushSupplier *x)
00655 {
00656 delete x;
00657 }
00658
00659 TAO_EC_ProxyPushConsumer*
00660 TAO_EC_Default_Factory::create_proxy_push_consumer (TAO_EC_Event_Channel_Base *ec)
00661 {
00662 return new TAO_EC_Default_ProxyPushConsumer (ec);
00663 }
00664
00665 void
00666 TAO_EC_Default_Factory::destroy_proxy_push_consumer (TAO_EC_ProxyPushConsumer *x)
00667 {
00668 delete x;
00669 }
00670
00671 TAO_EC_Timeout_Generator*
00672 TAO_EC_Default_Factory::create_timeout_generator (TAO_EC_Event_Channel_Base *)
00673 {
00674 if (this->timeout_ == 0)
00675 {
00676 int argc = 0;
00677 char **argv = 0;
00678 CORBA::ORB_var orb =
00679 CORBA::ORB_init (argc, argv, this->orbid_.c_str ());
00680
00681 ACE_Reactor *reactor = orb->orb_core ()->reactor ();
00682 return new TAO_EC_Reactive_Timeout_Generator (reactor);
00683 }
00684 #if 0
00685 else if (this->timeout_ == 1)
00686 {
00687 }
00688 #endif
00689 return 0;
00690 }
00691
00692 void
00693 TAO_EC_Default_Factory::destroy_timeout_generator (TAO_EC_Timeout_Generator *x)
00694 {
00695 delete x;
00696 }
00697
00698 TAO_EC_ObserverStrategy*
00699 TAO_EC_Default_Factory::create_observer_strategy (TAO_EC_Event_Channel_Base *ec)
00700 {
00701 if (this->observer_ == 0)
00702 return new TAO_EC_Null_ObserverStrategy;
00703 else if (this->observer_ == 1)
00704 {
00705
00706 ACE_Lock* lock = 0;
00707 ACE_NEW_RETURN (lock, ACE_Lock_Adapter<TAO_SYNCH_MUTEX>, 0);
00708 return new TAO_EC_Basic_ObserverStrategy (ec, lock);
00709 }
00710 else if (this->observer_ == 2)
00711 {
00712
00713 ACE_Lock* lock = 0;
00714 ACE_NEW_RETURN (lock, ACE_Lock_Adapter<TAO_SYNCH_MUTEX>, 0);
00715 return new TAO_EC_Reactive_ObserverStrategy (ec, lock);
00716 }
00717 return 0;
00718 }
00719
00720 void
00721 TAO_EC_Default_Factory::destroy_observer_strategy (TAO_EC_ObserverStrategy *x)
00722 {
00723 delete x;
00724 }
00725
00726 TAO_EC_Scheduling_Strategy*
00727 TAO_EC_Default_Factory::create_scheduling_strategy (TAO_EC_Event_Channel_Base*)
00728 {
00729 if (this->scheduling_ == 0)
00730 return new TAO_EC_Null_Scheduling;
00731 else if (this->scheduling_ == 1)
00732 return new TAO_EC_Group_Scheduling;
00733 return 0;
00734 }
00735
00736 void
00737 TAO_EC_Default_Factory::destroy_scheduling_strategy (TAO_EC_Scheduling_Strategy* x)
00738 {
00739 delete x;
00740 }
00741
00742
00743 typedef
00744 TAO_ESF_Proxy_List<TAO_EC_ProxyPushConsumer>::Iterator
00745 TAO_EC_Consumer_List_Iterator;
00746 typedef
00747 TAO_ESF_Proxy_RB_Tree<TAO_EC_ProxyPushConsumer>::Iterator
00748 TAO_EC_Consumer_RB_Tree_Iterator;
00749 typedef
00750 TAO_ESF_Proxy_List<TAO_EC_ProxyPushSupplier>::Iterator
00751 TAO_EC_Supplier_List_Iterator;
00752 typedef
00753 TAO_ESF_Proxy_RB_Tree<TAO_EC_ProxyPushSupplier>::Iterator
00754 TAO_EC_Supplier_RB_Tree_Iterator;
00755
00756
00757 TAO_EC_ProxyPushConsumer_Collection*
00758 TAO_EC_Default_Factory::create_proxy_push_consumer_collection (TAO_EC_Event_Channel_Base *)
00759 {
00760 if (this->consumer_collection_ == 0x000)
00761 return new TAO_ESF_Immediate_Changes<TAO_EC_ProxyPushConsumer,
00762 TAO_ESF_Proxy_List<TAO_EC_ProxyPushConsumer>,
00763 TAO_EC_Consumer_List_Iterator,
00764 TAO_SYNCH_MUTEX> ();
00765 else if (this->consumer_collection_ == 0x001)
00766 return new TAO_ESF_Copy_On_Read<TAO_EC_ProxyPushConsumer,
00767 TAO_ESF_Proxy_List<TAO_EC_ProxyPushConsumer>,
00768 TAO_EC_Consumer_List_Iterator,
00769 TAO_SYNCH_MUTEX> ();
00770 else if (this->consumer_collection_ == 0x002)
00771 return new TAO_ESF_Copy_On_Write<TAO_EC_ProxyPushConsumer,
00772 TAO_ESF_Proxy_List<TAO_EC_ProxyPushConsumer>,
00773 TAO_EC_Consumer_List_Iterator,
00774 ACE_SYNCH> ();
00775 else if (this->consumer_collection_ == 0x003)
00776 return new TAO_ESF_Delayed_Changes<TAO_EC_ProxyPushConsumer,
00777 TAO_ESF_Proxy_List<TAO_EC_ProxyPushConsumer>,
00778 TAO_EC_Consumer_List_Iterator,
00779 ACE_SYNCH> ();
00780 else if (this->consumer_collection_ == 0x010)
00781 return new TAO_ESF_Immediate_Changes<TAO_EC_ProxyPushConsumer,
00782 TAO_ESF_Proxy_RB_Tree<TAO_EC_ProxyPushConsumer>,
00783 TAO_EC_Consumer_RB_Tree_Iterator,
00784 TAO_SYNCH_MUTEX> ();
00785 else if (this->consumer_collection_ == 0x011)
00786 return new TAO_ESF_Copy_On_Read<TAO_EC_ProxyPushConsumer,
00787 TAO_ESF_Proxy_RB_Tree<TAO_EC_ProxyPushConsumer>,
00788 TAO_EC_Consumer_RB_Tree_Iterator,
00789 TAO_SYNCH_MUTEX> ();
00790 else if (this->consumer_collection_ == 0x012)
00791 return new TAO_ESF_Copy_On_Write<TAO_EC_ProxyPushConsumer,
00792 TAO_ESF_Proxy_RB_Tree<TAO_EC_ProxyPushConsumer>,
00793 TAO_EC_Consumer_RB_Tree_Iterator,
00794 ACE_SYNCH> ();
00795 else if (this->consumer_collection_ == 0x013)
00796 return new TAO_ESF_Delayed_Changes<TAO_EC_ProxyPushConsumer,
00797 TAO_ESF_Proxy_RB_Tree<TAO_EC_ProxyPushConsumer>,
00798 TAO_EC_Consumer_RB_Tree_Iterator,
00799 ACE_SYNCH> ();
00800 else if (this->consumer_collection_ == 0x100)
00801 return new TAO_ESF_Immediate_Changes<TAO_EC_ProxyPushConsumer,
00802 TAO_ESF_Proxy_List<TAO_EC_ProxyPushConsumer>,
00803 TAO_EC_Consumer_List_Iterator,
00804 ACE_Null_Mutex> ();
00805 else if (this->consumer_collection_ == 0x101)
00806 return new TAO_ESF_Copy_On_Read<TAO_EC_ProxyPushConsumer,
00807 TAO_ESF_Proxy_List<TAO_EC_ProxyPushConsumer>,
00808 TAO_EC_Consumer_List_Iterator,
00809 ACE_Null_Mutex> ();
00810 else if (this->consumer_collection_ == 0x102)
00811 return new TAO_ESF_Copy_On_Write<TAO_EC_ProxyPushConsumer,
00812 TAO_ESF_Proxy_List<TAO_EC_ProxyPushConsumer>,
00813 TAO_EC_Consumer_List_Iterator,
00814 ACE_NULL_SYNCH> ();
00815 else if (this->consumer_collection_ == 0x103)
00816 return new TAO_ESF_Delayed_Changes<TAO_EC_ProxyPushConsumer,
00817 TAO_ESF_Proxy_List<TAO_EC_ProxyPushConsumer>,
00818 TAO_EC_Consumer_List_Iterator,
00819 ACE_NULL_SYNCH> ();
00820 else if (this->consumer_collection_ == 0x110)
00821 return new TAO_ESF_Immediate_Changes<TAO_EC_ProxyPushConsumer,
00822 TAO_ESF_Proxy_RB_Tree<TAO_EC_ProxyPushConsumer>,
00823 TAO_EC_Consumer_RB_Tree_Iterator,
00824 ACE_Null_Mutex> ();
00825 else if (this->consumer_collection_ == 0x111)
00826 return new TAO_ESF_Copy_On_Read<TAO_EC_ProxyPushConsumer,
00827 TAO_ESF_Proxy_RB_Tree<TAO_EC_ProxyPushConsumer>,
00828 TAO_EC_Consumer_RB_Tree_Iterator,
00829 ACE_Null_Mutex> ();
00830 else if (this->consumer_collection_ == 0x112)
00831 return new TAO_ESF_Copy_On_Write<TAO_EC_ProxyPushConsumer,
00832 TAO_ESF_Proxy_RB_Tree<TAO_EC_ProxyPushConsumer>,
00833 TAO_EC_Consumer_RB_Tree_Iterator,
00834 ACE_NULL_SYNCH> ();
00835 else if (this->consumer_collection_ == 0x113)
00836 return new TAO_ESF_Delayed_Changes<TAO_EC_ProxyPushConsumer,
00837 TAO_ESF_Proxy_RB_Tree<TAO_EC_ProxyPushConsumer>,
00838 TAO_EC_Consumer_RB_Tree_Iterator,
00839 ACE_NULL_SYNCH> ();
00840
00841 return 0;
00842 }
00843
00844 void
00845 TAO_EC_Default_Factory::destroy_proxy_push_consumer_collection (TAO_EC_ProxyPushConsumer_Collection *x)
00846 {
00847 delete x;
00848 }
00849
00850 TAO_EC_ProxyPushSupplier_Collection*
00851 TAO_EC_Default_Factory::create_proxy_push_supplier_collection (TAO_EC_Event_Channel_Base *)
00852 {
00853 if (this->supplier_collection_ == 0x000)
00854 return new TAO_ESF_Immediate_Changes<TAO_EC_ProxyPushSupplier,
00855 TAO_ESF_Proxy_List<TAO_EC_ProxyPushSupplier>,
00856 TAO_EC_Supplier_List_Iterator,
00857 TAO_SYNCH_MUTEX> ();
00858 else if (this->supplier_collection_ == 0x001)
00859 return new TAO_ESF_Copy_On_Read<TAO_EC_ProxyPushSupplier,
00860 TAO_ESF_Proxy_List<TAO_EC_ProxyPushSupplier>,
00861 TAO_EC_Supplier_List_Iterator,
00862 TAO_SYNCH_MUTEX> ();
00863 else if (this->supplier_collection_ == 0x002)
00864 return new TAO_ESF_Copy_On_Write<TAO_EC_ProxyPushSupplier,
00865 TAO_ESF_Proxy_List<TAO_EC_ProxyPushSupplier>,
00866 TAO_EC_Supplier_List_Iterator,
00867 ACE_SYNCH> ();
00868 else if (this->supplier_collection_ == 0x003)
00869 return new TAO_ESF_Delayed_Changes<TAO_EC_ProxyPushSupplier,
00870 TAO_ESF_Proxy_List<TAO_EC_ProxyPushSupplier>,
00871 TAO_EC_Supplier_List_Iterator,
00872 ACE_SYNCH> ();
00873 else if (this->supplier_collection_ == 0x010)
00874 return new TAO_ESF_Immediate_Changes<TAO_EC_ProxyPushSupplier,
00875 TAO_ESF_Proxy_RB_Tree<TAO_EC_ProxyPushSupplier>,
00876 TAO_EC_Supplier_RB_Tree_Iterator,
00877 TAO_SYNCH_MUTEX> ();
00878 else if (this->supplier_collection_ == 0x011)
00879 return new TAO_ESF_Copy_On_Read<TAO_EC_ProxyPushSupplier,
00880 TAO_ESF_Proxy_RB_Tree<TAO_EC_ProxyPushSupplier>,
00881 TAO_EC_Supplier_RB_Tree_Iterator,
00882 TAO_SYNCH_MUTEX> ();
00883 else if (this->supplier_collection_ == 0x012)
00884 return new TAO_ESF_Copy_On_Write<TAO_EC_ProxyPushSupplier,
00885 TAO_ESF_Proxy_RB_Tree<TAO_EC_ProxyPushSupplier>,
00886 TAO_EC_Supplier_RB_Tree_Iterator,
00887 ACE_SYNCH> ();
00888 else if (this->supplier_collection_ == 0x013)
00889 return new TAO_ESF_Delayed_Changes<TAO_EC_ProxyPushSupplier,
00890 TAO_ESF_Proxy_RB_Tree<TAO_EC_ProxyPushSupplier>,
00891 TAO_EC_Supplier_RB_Tree_Iterator,
00892 ACE_SYNCH> ();
00893 else if (this->supplier_collection_ == 0x100)
00894 return new TAO_ESF_Immediate_Changes<TAO_EC_ProxyPushSupplier,
00895 TAO_ESF_Proxy_List<TAO_EC_ProxyPushSupplier>,
00896 TAO_EC_Supplier_List_Iterator,
00897 ACE_Null_Mutex> ();
00898 else if (this->supplier_collection_ == 0x101)
00899 return new TAO_ESF_Copy_On_Read<TAO_EC_ProxyPushSupplier,
00900 TAO_ESF_Proxy_List<TAO_EC_ProxyPushSupplier>,
00901 TAO_EC_Supplier_List_Iterator,
00902 ACE_Null_Mutex> ();
00903 else if (this->supplier_collection_ == 0x102)
00904 return new TAO_ESF_Copy_On_Write<TAO_EC_ProxyPushSupplier,
00905 TAO_ESF_Proxy_List<TAO_EC_ProxyPushSupplier>,
00906 TAO_EC_Supplier_List_Iterator,
00907 ACE_NULL_SYNCH> ();
00908 else if (this->supplier_collection_ == 0x103)
00909 return new TAO_ESF_Delayed_Changes<TAO_EC_ProxyPushSupplier,
00910 TAO_ESF_Proxy_List<TAO_EC_ProxyPushSupplier>,
00911 TAO_EC_Supplier_List_Iterator,
00912 ACE_NULL_SYNCH> ();
00913 else if (this->supplier_collection_ == 0x110)
00914 return new TAO_ESF_Immediate_Changes<TAO_EC_ProxyPushSupplier,
00915 TAO_ESF_Proxy_RB_Tree<TAO_EC_ProxyPushSupplier>,
00916 TAO_EC_Supplier_RB_Tree_Iterator,
00917 ACE_Null_Mutex> ();
00918 else if (this->supplier_collection_ == 0x111)
00919 return new TAO_ESF_Copy_On_Read<TAO_EC_ProxyPushSupplier,
00920 TAO_ESF_Proxy_RB_Tree<TAO_EC_ProxyPushSupplier>,
00921 TAO_EC_Supplier_RB_Tree_Iterator,
00922 ACE_Null_Mutex> ();
00923 else if (this->supplier_collection_ == 0x112)
00924 return new TAO_ESF_Copy_On_Write<TAO_EC_ProxyPushSupplier,
00925 TAO_ESF_Proxy_RB_Tree<TAO_EC_ProxyPushSupplier>,
00926 TAO_EC_Supplier_RB_Tree_Iterator,
00927 ACE_NULL_SYNCH> ();
00928 else if (this->supplier_collection_ == 0x113)
00929 return new TAO_ESF_Delayed_Changes<TAO_EC_ProxyPushSupplier,
00930 TAO_ESF_Proxy_RB_Tree<TAO_EC_ProxyPushSupplier>,
00931 TAO_EC_Supplier_RB_Tree_Iterator,
00932 ACE_NULL_SYNCH> ();
00933
00934 return 0;
00935 }
00936
00937 void
00938 TAO_EC_Default_Factory::destroy_proxy_push_supplier_collection (TAO_EC_ProxyPushSupplier_Collection *x)
00939 {
00940 delete x;
00941 }
00942
00943 ACE_Lock*
00944 TAO_EC_Default_Factory::create_consumer_lock (void)
00945 {
00946 if (this->consumer_lock_ == 0)
00947 return new ACE_Lock_Adapter<ACE_Null_Mutex>;
00948 else if (this->consumer_lock_ == 1)
00949 return new ACE_Lock_Adapter<TAO_SYNCH_MUTEX> ();
00950 else if (this->consumer_lock_ == 2)
00951 return new ACE_Lock_Adapter<TAO_SYNCH_RECURSIVE_MUTEX> ();
00952 return 0;
00953 }
00954
00955 void
00956 TAO_EC_Default_Factory::destroy_consumer_lock (ACE_Lock* x)
00957 {
00958 delete x;
00959 }
00960
00961 ACE_Lock*
00962 TAO_EC_Default_Factory::create_supplier_lock (void)
00963 {
00964 if (this->supplier_lock_ == 0)
00965 return new ACE_Lock_Adapter<ACE_Null_Mutex>;
00966 else if (this->supplier_lock_ == 1)
00967 return new ACE_Lock_Adapter<TAO_SYNCH_MUTEX> ();
00968 else if (this->supplier_lock_ == 2)
00969 return new ACE_Lock_Adapter<TAO_SYNCH_RECURSIVE_MUTEX> ();
00970 return 0;
00971 }
00972
00973 void
00974 TAO_EC_Default_Factory::destroy_supplier_lock (ACE_Lock* x)
00975 {
00976 delete x;
00977 }
00978
00979 TAO_EC_ConsumerControl*
00980 TAO_EC_Default_Factory::create_consumer_control (TAO_EC_Event_Channel_Base* ec)
00981 {
00982 if (this->consumer_control_ == 0)
00983 return new TAO_EC_ConsumerControl ();
00984 else if (this->consumer_control_ == 1)
00985 {
00986 int argc = 0;
00987 char **argv = 0;
00988 CORBA::ORB_var orb =
00989 CORBA::ORB_init (argc, argv, this->orbid_.c_str ());
00990
00991 ACE_Time_Value rate (0, this->consumer_control_period_);
00992 return new TAO_EC_Reactive_ConsumerControl (rate, consumer_control_timeout_, ec, orb.in ());
00993 }
00994 return 0;
00995 }
00996
00997 void
00998 TAO_EC_Default_Factory::destroy_consumer_control (TAO_EC_ConsumerControl* x)
00999 {
01000 delete x;
01001 }
01002
01003 TAO_EC_SupplierControl*
01004 TAO_EC_Default_Factory::create_supplier_control (TAO_EC_Event_Channel_Base* ec)
01005 {
01006 if (this->supplier_control_ == 0)
01007 return new TAO_EC_SupplierControl ();
01008 else if (this->supplier_control_ == 1)
01009 {
01010 int argc = 0;
01011 char **argv = 0;
01012 CORBA::ORB_var orb =
01013 CORBA::ORB_init (argc, argv, this->orbid_.c_str ());
01014
01015 ACE_Time_Value rate (0, this->supplier_control_period_);
01016 return new TAO_EC_Reactive_SupplierControl (rate, supplier_control_timeout_, ec, orb.in ());
01017 }
01018 return 0;
01019 }
01020
01021 void
01022 TAO_EC_Default_Factory::destroy_supplier_control (TAO_EC_SupplierControl* x)
01023 {
01024 delete x;
01025 }
01026
01027 TAO_END_VERSIONED_NAMESPACE_DECL
01028
01029
01030
01031 ACE_STATIC_SVC_DEFINE (TAO_EC_Default_Factory,
01032 ACE_TEXT ("EC_Factory"),
01033 ACE_SVC_OBJ_T,
01034 &ACE_SVC_NAME (TAO_EC_Default_Factory),
01035 ACE_Service_Type::DELETE_THIS | ACE_Service_Type::DELETE_OBJ,
01036 0)
01037 ACE_FACTORY_DEFINE (TAO_RTEvent_Serv, TAO_EC_Default_Factory)