diff options
Diffstat (limited to 'TAO/orbsvcs/Notify_Service/Notify_Service.cpp')
-rw-r--r-- | TAO/orbsvcs/Notify_Service/Notify_Service.cpp | 47 |
1 files changed, 45 insertions, 2 deletions
diff --git a/TAO/orbsvcs/Notify_Service/Notify_Service.cpp b/TAO/orbsvcs/Notify_Service/Notify_Service.cpp index e7d95c4dd99..6ca69d871c5 100644 --- a/TAO/orbsvcs/Notify_Service/Notify_Service.cpp +++ b/TAO/orbsvcs/Notify_Service/Notify_Service.cpp @@ -24,6 +24,7 @@ TAO_Notify_Service_Driver::TAO_Notify_Service_Driver (void) , notify_channel_name_ (NOTIFY_CHANNEL_NAME) , register_event_channel_ (0) , nthreads_ (1) +, separate_dispatching_orb_ (false) { // No-Op. } @@ -73,6 +74,22 @@ TAO_Notify_Service_Driver::init_ORB (int& argc, ACE_TCHAR *argv [] } int +TAO_Notify_Service_Driver::init_dispatching_ORB (int& argc, ACE_TCHAR *argv [] + ACE_ENV_ARG_DECL) +{ + // Copy command line parameter. + ACE_Argv_Type_Converter command_line(argc, argv); + + this->dispatching_orb_ = CORBA::ORB_init (command_line.get_argc(), + command_line.get_ASCII_argv(), + "dispatcher" + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (-1); + + return 0; +} + +int TAO_Notify_Service_Driver::init (int argc, ACE_TCHAR *argv[] ACE_ENV_ARG_DECL) { @@ -97,8 +114,22 @@ TAO_Notify_Service_Driver::init (int argc, ACE_TCHAR *argv[] return -1; } - this->notify_service_->init_service (this->orb_.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (-1); + if (this->separate_dispatching_orb_) + { + if (this->init_dispatching_ORB (argc, argv + ACE_ENV_ARG_PARAMETER) != 0) + { + return -1; + } + + this->notify_service_->init_service2 (this->orb_.in (), this->dispatching_orb_.in() ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (-1); + } + else + { + this->notify_service_->init_service (this->orb_.in () ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (-1); + } if (this->nthreads_ > 0) // we have chosen to run in a thread pool. { @@ -303,6 +334,12 @@ TAO_Notify_Service_Driver::shutdown (ACE_ENV_SINGLE_ARG_DECL) // shutdown the ORB. if (!CORBA::is_nil (this->orb_.in ())) this->orb_->shutdown (); + + /// Release all the _vars as the ORB is gone now. + notify_factory_._retn (); + orb_._retn (); + poa_._retn (); + naming_._retn (); } int @@ -318,6 +355,12 @@ TAO_Notify_Service_Driver::parse_args (int &argc, ACE_TCHAR *argv[]) this->notify_factory_name_.set (ACE_TEXT_ALWAYS_CHAR(current_arg)); arg_shifter.consume_arg (); } + else if (arg_shifter.cur_arg_strncasecmp (ACE_TEXT("-UseSeparateDispatchingORB")) == 0) + { + ACE_DEBUG((LM_DEBUG, "Using separate dispatching ORB\n")); + this->separate_dispatching_orb_ = true; + arg_shifter.consume_arg (); + } else if (arg_shifter.cur_arg_strncasecmp (ACE_TEXT("-Boot")) == 0) { this->bootstrap_ = 1; |