void Notify_Sequence_Push_Consumer::_connect ( CosNotifyChannelAdmin::ConsumerAdmin_ptr consumer_admin) { CosNotifyComm::SequencePushConsumer_var objref = this->_this (); CosNotifyChannelAdmin::ProxySupplier_var proxysupplier = consumer_admin->obtain_notification_push_supplier ( CosNotifyChannelAdmin::SEQUENCE_EVENT, proxy_id_); this->proxy_ = CosNotifyChannelAdmin::SequenceProxyPushSupplier::_narrow ( proxysupplier.in ()); CosNotification::QoSProperties properties (1); properties.length (1); properties[0].name = CORBA::string_dup (CosNotification::PacingInterval); properties[0].value <<= PACING; this->proxy_->set_qos (properties); this->proxy_->connect_sequence_push_consumer (objref.in ()); // give ownership to POA this->_remove_ref (); }
void TAO_Notify_ThreadPool_Consumer::connect (void) { // Activate the consumer with the default_POA_ CosNotifyComm::StructuredPushConsumer_var objref = this->_this (); CosNotifyChannelAdmin::ProxySupplier_var proxysupplier; if (this->proxy_supplier_thread_count_ != 0) { // Narrow to the extended interface. NotifyExt::ConsumerAdmin_var admin_ext = NotifyExt::ConsumerAdmin::_narrow (this->admin_.in ()); NotifyExt::ThreadPoolParams tp_params = { NotifyExt::CLIENT_PROPAGATED, 0, 0, static_cast<CORBA::ULong> (this->proxy_supplier_thread_count_), 0, 0, 0, 0, 0 }; CosNotification::QoSProperties qos (1); qos.length (1); qos[0].name = CORBA::string_dup (NotifyExt::ThreadPool); qos[0].value <<= tp_params; // Obtain the proxy. The QoS is applied to the POA in which the Proxy is hosted. proxysupplier = admin_ext->obtain_notification_push_supplier_with_qos (CosNotifyChannelAdmin::STRUCTURED_EVENT , proxy_supplier_id_, qos); } else { proxysupplier = this->admin_->obtain_notification_push_supplier (CosNotifyChannelAdmin::STRUCTURED_EVENT , proxy_supplier_id_); } ACE_ASSERT (!CORBA::is_nil (proxysupplier.in ())); // narrow this->proxy_supplier_ = CosNotifyChannelAdmin::StructuredProxyPushSupplier::_narrow (proxysupplier.in ()); ACE_ASSERT (!CORBA::is_nil (proxy_supplier_.in ())); this->proxy_supplier_->connect_structured_push_consumer (objref.in ()); // Call subscription_change to inform the supplier that this consumer is available. CosNotification::EventTypeSeq added (1); CosNotification::EventTypeSeq removed; added.length (1); added[0].domain_name = CORBA::string_dup ("TEST_DOMAIN"); /* We generate a unique Id for the consumer type so that the supplier can distinguish between the consumers.*/ char type[BUFSIZ]; ACE_OS::sprintf (type, "TEST_TYPE_%d", this->proxy_supplier_id_); added[0].type_name = CORBA::string_dup (type); this->proxy_supplier_->subscription_change (added, removed); ACE_DEBUG ((LM_DEBUG, "(%P,%t) Created Consumer %d with %d threads at the ProxySupplier\n", proxy_supplier_id_, this->proxy_supplier_thread_count_)); }
CosNotifyChannelAdmin::ProxySupplier_ptr TAO_MonitorConsumerAdmin::obtain_notification_push_supplier ( CosNotifyChannelAdmin::ClientType ctype, CosNotifyChannelAdmin::ProxyID_out proxy_id) { // First, make sure we can get down to the real ec type. TAO_MonitorEventChannel* ec = dynamic_cast<TAO_MonitorEventChannel*> (this->ec_.get ()); if (ec == 0) { throw CORBA::INTERNAL (); } // Next, create the push consumer proxy. CosNotifyChannelAdmin::ProxySupplier_var proxy = this->TAO_Notify_ConsumerAdmin::obtain_notification_push_supplier ( ctype, proxy_id); // Next, map the proxy id to the name in the ec. char name[64]; ACE_OS::sprintf (name, "%d", proxy_id); ec->map_supplier_proxy (proxy_id, name); return proxy._retn (); }
void Notify_Structured_Push_Consumer::_connect ( CosNotifyChannelAdmin::ConsumerAdmin_ptr consumer_admin) { CosNotifyComm::StructuredPushConsumer_var objref = this->_this (); CosNotifyChannelAdmin::ProxySupplier_var proxysupplier = consumer_admin->obtain_notification_push_supplier ( CosNotifyChannelAdmin::STRUCTURED_EVENT, proxy_id_); this->proxy_ = CosNotifyChannelAdmin::StructuredProxyPushSupplier::_narrow ( proxysupplier.in ()); this->proxy_->connect_structured_push_consumer (objref.in ()); CosNotification::EventTypeSeq added (1); CosNotification::EventTypeSeq removed (1); added.length (1); removed.length (1); added[0].domain_name = CORBA::string_dup ("*"); added[0].type_name = CORBA::string_dup ("examples"); removed[0].domain_name = CORBA::string_dup ("*"); removed[0].type_name = CORBA::string_dup ("*"); this->subscription_change (added, removed); // give ownership to POA this->_remove_ref (); }
void Notify_Push_Consumer::_connect ( CosNotifyChannelAdmin::ConsumerAdmin_ptr consumer_admin, CosNotifyFilter::Filter_ptr filter) { CosNotifyComm::StructuredPushConsumer_var objref = this->_this (); CosNotifyChannelAdmin::ProxySupplier_var proxysupplier = consumer_admin->obtain_notification_push_supplier ( CosNotifyChannelAdmin::STRUCTURED_EVENT, proxy_id_); this->proxy_ = CosNotifyChannelAdmin::StructuredProxyPushSupplier::_narrow ( proxysupplier.in ()); CosNotification::QoSProperties properties (3); properties.length (3); properties[0].name = CORBA::string_dup (CosNotification::MaximumBatchSize); properties[0].value <<= (CORBA::Long) 3; properties[1].name = CORBA::string_dup (CosNotification::PacingInterval); properties[1].value <<= (TimeBase::TimeT) 1 * 1000 * 10000; this->proxy_->set_qos (properties); this->proxy_->add_filter (filter); this->proxy_->connect_structured_push_consumer (objref.in ()); // give ownership to POA this->_remove_ref (); }
CosNotifyChannelAdmin::ProxySupplier_ptr TAO_Notify_ConsumerAdmin::obtain_notification_push_supplier_with_qos (CosNotifyChannelAdmin::ClientType ctype, CosNotifyChannelAdmin::ProxyID_out proxy_id, const CosNotification::QoSProperties & initial_qos ) { CosNotifyChannelAdmin::ProxySupplier_var proxy = TAO_Notify_PROPERTIES::instance()->builder()->build_proxy (this , ctype , proxy_id , initial_qos); this->self_change (); return proxy._retn (); }
void Notify_Structured_Push_Consumer::_connect ( CosNotifyChannelAdmin::ConsumerAdmin_ptr consumer_admin) { #ifdef TEST_QOS_MAX_EVENTS_PER_CONSUMER CosNotification::QoSProperties properties (8); properties.length (2); CORBA::ULong idx = 0; properties[idx].name = CORBA::string_dup (CosNotification::DiscardPolicy); properties[idx].value <<= this->CosNotification::FifoOrder; idx += 1; properties[idx].name = CORBA::string_dup (CosNotification::MaxEventsPerConsumer); properties[idx].value <<= 500; idx += 1; ACE_OS::printf("Setting %d::%d QoS properties in Admin.\n", (int)idx, (int)properties.length()); consumer_admin->set_qos (properties); #endif // TEST_QOS_MAX_EVENTS_PER_CONSUMER CosNotifyComm::StructuredPushConsumer_var objref = this->_this (); CosNotifyChannelAdmin::ProxySupplier_var proxysupplier = consumer_admin->obtain_notification_push_supplier ( CosNotifyChannelAdmin::STRUCTURED_EVENT, proxy_id_); this->proxy_ = CosNotifyChannelAdmin::StructuredProxyPushSupplier::_narrow ( proxysupplier.in ()); this->proxy_->connect_structured_push_consumer (objref.in ()); CosNotification::EventTypeSeq added (1); CosNotification::EventTypeSeq removed (1); added.length (1); removed.length (1); added[0].domain_name = CORBA::string_dup ("*"); added[0].type_name = CORBA::string_dup ("examples"); removed[0].domain_name = CORBA::string_dup ("*"); removed[0].type_name = CORBA::string_dup ("*"); this->subscription_change (added, removed); // give ownership to POA this->_remove_ref (); }
void Notify_Structured_Push_Consumer::_connect ( CosNotifyChannelAdmin::ConsumerAdmin_ptr consumer_admin) { CosNotifyComm::StructuredPushConsumer_var objref = this->_this (); CosNotifyChannelAdmin::ProxySupplier_var proxysupplier = consumer_admin->obtain_notification_push_supplier ( CosNotifyChannelAdmin::STRUCTURED_EVENT, proxy_id_); this->proxy_ = CosNotifyChannelAdmin::StructuredProxyPushSupplier::_narrow ( proxysupplier.in ()); CosNotification::QoSProperties properties (2); properties.length (2); // The discard policy and admin properties tests already test using // the MaxQueueLength policy, so we'll use MEPC instead. It should // make no difference. // If the blocking timeout is less than CONSUMER_DELAY seconds, then // we want to ensure that exactly one event is discarded, so we set // the MEPC to expected_ - 1. If the supplier sends 20, then we expect 19, // and we set MEPC to 18. The first event will be dispatched at once, but // will block in the consumer. This will allow the queue in the notify svc // to fill up to 18. However, the blocking code will timeout before the // consumer finishes which will cause an event to be discarded. This will // allow the last event to be queued. Eventually the consumer will unblock // and receive the remaining events properties[0].name = CORBA::string_dup (CosNotification::MaxEventsPerConsumer); if (blocking_timeout_ < CONSUMER_DELAY * 1000 * 1000 * 10) properties[0].value <<= (CORBA::Long) expected_ - 1; else properties[0].value <<= (CORBA::Long) 10; properties[1].name = CORBA::string_dup (TAO_Notify_Extensions::BlockingPolicy); properties[1].value <<= this->blocking_timeout_; this->proxy_->set_qos (properties); this->proxy_->connect_structured_push_consumer (objref.in ()); // give ownership to POA this->_remove_ref (); }
void Notify_Push_Consumer::_connect (CosNotifyChannelAdmin::ConsumerAdmin_ptr consumer_admin, CosNotifyChannelAdmin::EventChannel_ptr) { CosNotifyComm::StructuredPushConsumer_var objref = this->_this (); CosNotifyChannelAdmin::ProxySupplier_var proxysupplier = consumer_admin->obtain_notification_push_supplier ( CosNotifyChannelAdmin::STRUCTURED_EVENT, proxy_id_); this->proxy_ = CosNotifyChannelAdmin::StructuredProxyPushSupplier::_narrow ( proxysupplier.in ()); this->proxy_->connect_structured_push_consumer (objref.in ()); // give ownership to POA this->_remove_ref (); }
void Filter_StructuredPushConsumer::connect (CosNotifyChannelAdmin::ConsumerAdmin_ptr consumer_admin) { // Activate the consumer with the default_POA_ CosNotifyComm::StructuredPushConsumer_var objref = this->_this (); CosNotifyChannelAdmin::ProxySupplier_var proxysupplier = consumer_admin->obtain_notification_push_supplier (CosNotifyChannelAdmin::STRUCTURED_EVENT, proxy_supplier_id_); ACE_ASSERT (!CORBA::is_nil (proxysupplier.in ())); // narrow this->proxy_supplier_ = CosNotifyChannelAdmin::StructuredProxyPushSupplier:: _narrow (proxysupplier.in ()); ACE_ASSERT (!CORBA::is_nil (proxy_supplier_.in ())); proxy_supplier_->connect_structured_push_consumer (objref.in ()); }
void Notify_Sequence_Push_Consumer::_connect ( CosNotifyChannelAdmin::ConsumerAdmin_ptr consumer_admin) { CosNotifyComm::SequencePushConsumer_var objref = this->_this (); CosNotifyChannelAdmin::ProxySupplier_var proxysupplier = consumer_admin->obtain_notification_push_supplier ( CosNotifyChannelAdmin::SEQUENCE_EVENT, proxy_id_); this->proxy_ = CosNotifyChannelAdmin::SequenceProxyPushSupplier::_narrow ( proxysupplier.in ()); CosNotification::QoSProperties properties (3); properties.length (3); properties[0].name = CORBA::string_dup (CosNotification::MaximumBatchSize); properties[0].value <<= (CORBA::Long) BATCH_SIZE; properties[1].name = CORBA::string_dup (CosNotification::PacingInterval); properties[1].value <<= (TimeBase::TimeT) (1000 * 10000); // 1 secs if (use_ordering_) { properties[2].name = CORBA::string_dup (CosNotification::OrderPolicy); properties[2].value <<= this->order_policy_; } else { properties.length(2); } this->proxy_->set_qos (properties); this->proxy_->connect_sequence_push_consumer (objref.in ()); // give ownership to POA this->_remove_ref (); }
void Notify_Sequence_Push_Consumer::_connect ( CosNotifyChannelAdmin::ConsumerAdmin_ptr consumer_admin) { CosNotifyComm::SequencePushConsumer_var consumer = this->_this (); CosNotifyChannelAdmin::ProxySupplier_var proxysupplier = consumer_admin->obtain_notification_push_supplier ( CosNotifyChannelAdmin::SEQUENCE_EVENT, proxy_id_); this->proxy_ = CosNotifyChannelAdmin::SequenceProxyPushSupplier::_narrow ( proxysupplier.in ()); CosNotification::QoSProperties properties (4); properties.length (4); CORBA::ULong idx = 0; properties[idx].name = CORBA::string_dup (CosNotification::MaximumBatchSize); properties[idx].value <<= BATCH_SIZE; properties[++idx].name = CORBA::string_dup (CosNotification::PacingInterval); properties[idx].value <<= PACING; properties[++idx].name = CORBA::string_dup (CosNotification::DiscardPolicy); properties[idx].value <<= this->discard_policy_; properties[++idx].name = CORBA::string_dup (CosNotification::MaxEventsPerConsumer); // We set this equal to the batch size so that we conveniently always receive // one more batch after the first. properties[idx].value <<= BATCH_SIZE; this->proxy_->set_qos (properties); this->proxy_->connect_sequence_push_consumer (consumer.in ()); // give ownership to POA this->_remove_ref (); }
int ACE_TMAIN (int argc, ACE_TCHAR* argv[]) { #if defined (TAO_HAS_MONITOR_FRAMEWORK) && (TAO_HAS_MONITOR_FRAMEWORK == 1) try { CORBA::ORB_var orb = CORBA::ORB_init (argc, argv); CORBA::Object_var obj = orb->resolve_initial_references ("RootPOA"); PortableServer::POA_var poa = PortableServer::POA::_narrow (obj.in ()); PortableServer::POAManager_var poa_manager = poa->the_POAManager (); poa_manager->activate (); TAO_Notify_Service* notify_service = TAO_Notify_Service::load_default (); if (notify_service == 0) { error ("Unable to load the Notify Service"); } notify_service->init_service (orb.in ()); ACE_OS::sleep (1); const ACE_CString ecf_name ("MonitoringEventChannelFactory"); CosNotifyChannelAdmin::EventChannelFactory_var ecf = notify_service->create (poa.in (), ecf_name.c_str ()); NotifyMonitoringExt::EventChannelFactory_var monitor_ec_factory = NotifyMonitoringExt::EventChannelFactory::_narrow (ecf.in ()); if (CORBA::is_nil (monitor_ec_factory.in ())) { error ("Unable to create the Monitoring Event Channel Factory"); } CosNotification::QoSProperties qos_prop; CosNotification::AdminProperties admin_prop; CosNotifyChannelAdmin::ChannelID id; const ACE_CString ec_name ("test1"); CosNotifyChannelAdmin::EventChannel_var ec = monitor_ec_factory->create_named_channel (qos_prop, admin_prop, id, ec_name.c_str ()); NotifyMonitoringExt::EventChannel_var mec = NotifyMonitoringExt::EventChannel::_narrow (ec.in ()); if (CORBA::is_nil (mec.in ())) { error ("Unable to narrow the event channel"); } try { CosNotifyChannelAdmin::ChannelID fake_id; CosNotifyChannelAdmin::EventChannel_var fake = monitor_ec_factory->create_named_channel (qos_prop, admin_prop, fake_id, "test1"); error ("Expected a NotifyMonitoringExt::" "NameAlreadyUsed exception"); } catch (const NotifyMonitoringExt::NameAlreadyUsed&) { // This is expected. } Monitor_Point_Registry* instance = Monitor_Point_Registry::instance (); ACE_CString stat_name = ecf_name + "/" + ACE_CString (NotifyMonitoringExt::InactiveEventChannelCount); Monitor_Base* stat = instance->get (stat_name); if (stat == 0) { error ("Could not find InactiveEventChannelCount statistic"); } stat->update (); double count = stat->last_sample (); if (!ACE::is_equal (count, 1.0)) { error ("Invalid inactive event channel count"); } stat_name = ecf_name + "/" + ACE_CString (NotifyMonitoringExt::ActiveEventChannelCount); stat = instance->get (stat_name); if (stat == 0) { error ("Could not find ActiveEventChannelCount statistic"); } stat->update (); count = stat->last_sample (); if (!ACE::is_equal (count, 0.0)) { error ("Invalid active event channel count"); } stat_name = ecf_name + "/" + ACE_CString (NotifyMonitoringExt::InactiveEventChannelNames); stat = instance->get (stat_name); if (stat == 0) { error ("Could not find InactiveEventChannels statistic"); } stat->update (); Monitor_Control_Types::NameList list = stat->get_list (); if (list.size () != 1) { error ("Invalid inactive event channel list"); } ACE_CString full_ec_name (ecf_name + "/" + ec_name); if (list[0] != full_ec_name) { error ("Wrong event channel name"); } CosNotifyChannelAdmin::AdminID aid; CosNotifyChannelAdmin::SupplierAdmin_var admin = mec->named_new_for_suppliers (CosNotifyChannelAdmin::AND_OP, aid, "TestSupplierAdmin"); try { admin = mec->named_new_for_suppliers (CosNotifyChannelAdmin::AND_OP, aid, "TestSupplierAdmin"); error ("Expected a SupplierAdmin " "NotifyMonitoringExt::NameAlreadyUsed exception"); } catch (const NotifyMonitoringExt::NameAlreadyUsed&) { // This is expected. }; // We should be able to create another one with the same name. admin->destroy (); admin = mec->named_new_for_suppliers (CosNotifyChannelAdmin::AND_OP, aid, "TestSupplierAdmin"); NotifyMonitoringExt::SupplierAdmin_var madmin = NotifyMonitoringExt::SupplierAdmin::_narrow (admin.in ()); if (CORBA::is_nil (madmin.in ())) { error ("Could not narrow the supplier admin"); } CosNotifyChannelAdmin::ProxyID pid; CosNotifyChannelAdmin::ProxyConsumer_var conproxy = madmin->obtain_named_notification_push_consumer ( CosNotifyChannelAdmin::STRUCTURED_EVENT, pid, "supplier"); try { CosNotifyChannelAdmin::ProxyConsumer_var fake = madmin->obtain_named_notification_push_consumer (CosNotifyChannelAdmin::STRUCTURED_EVENT, pid, "supplier"); error ("Expected a ProxyConsumer " "NotifyMonitoringExt::NameAlreadyUsed exception"); } catch (const NotifyMonitoringExt::NameAlreadyUsed&) { // This is expected. } stat_name = ecf_name + "/" + ec_name + "/" + ACE_CString (NotifyMonitoringExt::EventChannelSupplierCount); stat = instance->get (stat_name); if (stat == 0) { error ("Could not find the event channel suppliers statistic"); } stat->update (); count = stat->last_sample (); if (!ACE::is_equal (count, 1.0)) { error ("Invalid supplier count"); } CosNotifyChannelAdmin::StructuredProxyPushConsumer_var push_conproxy = CosNotifyChannelAdmin::StructuredProxyPushConsumer::_narrow ( conproxy.in ()); ACE_ASSERT (!CORBA::is_nil (push_conproxy.in ())); push_conproxy->disconnect_structured_push_consumer (); try { CosNotifyChannelAdmin::ProxyConsumer_var fake = madmin->obtain_named_notification_push_consumer ( CosNotifyChannelAdmin::STRUCTURED_EVENT, pid, "supplier"); } catch (const NotifyMonitoringExt::NameAlreadyUsed&) { error ("Unexpected ProxyConsumer " "NotifyMonitoringExt::NameAlreadyUsed exception"); } CosNotifyChannelAdmin::ConsumerAdmin_var cadmin = mec->named_new_for_consumers (CosNotifyChannelAdmin::AND_OP, aid, "TestConsumerAdmin"); try { cadmin = mec->named_new_for_consumers (CosNotifyChannelAdmin::AND_OP, aid, "TestConsumerAdmin"); error ("Expected a ConsumerAdmin " "NotifyMonitoringExt::NameAlreadyUsed exception"); } catch (const NotifyMonitoringExt::NameAlreadyUsed&) { // This is expected. }; // We should be able to create another one with the same name cadmin->destroy (); cadmin = mec->named_new_for_consumers (CosNotifyChannelAdmin::AND_OP, aid, "TestConsumerAdmin"); NotifyMonitoringExt::ConsumerAdmin_var mcadmin = NotifyMonitoringExt::ConsumerAdmin::_narrow (cadmin.in ()); if (CORBA::is_nil (mcadmin.in ())) { error ("Could not narrow the consumer admin"); } CosNotifyChannelAdmin::ProxySupplier_var supproxy = mcadmin->obtain_named_notification_push_supplier ( CosNotifyChannelAdmin::STRUCTURED_EVENT, pid, "consumer"); try { CosNotifyChannelAdmin::ProxySupplier_var fake = mcadmin->obtain_named_notification_push_supplier ( CosNotifyChannelAdmin::STRUCTURED_EVENT, pid, "consumer"); error ("Expected a ProxySupplier " "NotifyMonitoringExt::NameAlreadyUsed exception"); } catch (const NotifyMonitoringExt::NameAlreadyUsed&) { // This is expected. } stat_name = ecf_name + "/" + ec_name + "/" + ACE_CString (NotifyMonitoringExt::EventChannelConsumerCount); stat = instance->get (stat_name); if (stat == 0) { error ("Could not find the event channel consumers statistic"); } stat->update (); count = stat->last_sample (); if (!ACE::is_equal (count, 1.0)) { error ("Invalid consumer count"); } CosNotifyChannelAdmin::StructuredProxyPushSupplier_var push_supproxy = CosNotifyChannelAdmin::StructuredProxyPushSupplier::_narrow ( supproxy.in()); ACE_ASSERT (!CORBA::is_nil (push_supproxy.in ())); push_supproxy->disconnect_structured_push_supplier (); try { CosNotifyChannelAdmin::ProxySupplier_var fake = mcadmin->obtain_named_notification_push_supplier ( CosNotifyChannelAdmin::STRUCTURED_EVENT, pid, "consumer"); } catch (const NotifyMonitoringExt::NameAlreadyUsed&) { error ("Unexpected ProxySupplier " "NotifyMonitoringExt::NameAlreadyUsed exception"); } TAO_MonitorManager::shutdown (); orb->destroy (); } catch (const CORBA::Exception& ex) { ex._tao_print_exception ("MonitorControlExt: "); } catch (...) { error ("Caught an unexpected exception type"); } #else /* ACE_HAS_MONITOR_FRAMEWORK==1 */ ACE_UNUSED_ARG (argc); ACE_UNUSED_ARG (argv); #endif /* TAO_HAS_MONITOR_FRAMEWORK==1 */ return 0; }
//----------------------------------------------------------------------------- void Consumer::createConsumer() { ACS_TRACE("Consumer::createConsumer"); try { // Get ConsumerAdmin object //CosNotifyChannelAdmin::AdminID adminid; consumerAdmin_m = notifyChannel_m->new_for_consumers(ifgop_m, adminid); if(CORBA::is_nil(consumerAdmin_m.in()) == true) { CORBAProblemExImpl err = CORBAProblemExImpl(__FILE__,__LINE__,"nc::Consumer::createConsumer"); throw err.getCORBAProblemEx(); } // get the the proxySupplier (named if possible) bool isAdminExt = false; try { NotifyMonitoringExt::ConsumerAdmin_var consumerAdminExt = NotifyMonitoringExt::ConsumerAdmin::_narrow(consumerAdmin_m); isAdminExt = (consumerAdminExt != 0); } catch(...) {} CosNotifyChannelAdmin::ProxySupplier_var proxySupplier = 0; if( isAdminExt && (callback_m->services_ != 0) ) { std::string name(callback_m->services_->getName().c_str()); std::string proxyName(createRandomizedClientName(name)); NotifyMonitoringExt::ConsumerAdmin_var consumerAdminExt = NotifyMonitoringExt::ConsumerAdmin::_narrow(consumerAdmin_m); while( proxySupplier == 0 ) { try { proxySupplier = consumerAdminExt->obtain_named_notification_push_supplier(CosNotifyChannelAdmin::STRUCTURED_EVENT, proxySupplierID, proxyName.c_str()); //ACS_SHORT_LOG((LM_INFO,"Consumer::createConsumer Got named proxy supplier '%s' with proxyID %d", proxyName.c_str(), proxySupplierID)); } catch (NotifyMonitoringExt::NameAlreadyUsed &ex) { // If the original name is already in use, append "-<tries>" and try again // until we find a free name proxyName = createRandomizedClientName(name); } catch (...) { // If any unexpected problem appears, try the unnamed version proxySupplier = consumerAdmin_m->obtain_notification_push_supplier(CosNotifyChannelAdmin::STRUCTURED_EVENT, proxySupplierID); //ACS_SHORT_LOG((LM_INFO,"Consumer::createConsumer Created unnamed proxy supplier")); } } } else { // Just the unnamed version if we don't have the TAO extensions proxySupplier = consumerAdmin_m->obtain_notification_push_supplier(CosNotifyChannelAdmin::STRUCTURED_EVENT, proxySupplierID); //ACS_SHORT_LOG((LM_INFO,"Consumer::createConsumer Created unnamed proxy supplier")); } if(CORBA::is_nil(proxySupplier.in()) == true) { CORBAProblemExImpl err = CORBAProblemExImpl(__FILE__,__LINE__,"nc::Consumer::createConsumer"); throw err.getCORBAProblemEx(); } //narrow to a STRUCTURED proxy supplier proxySupplier_m = CosNotifyChannelAdmin::StructuredProxyPushSupplier::_narrow(proxySupplier.in()); } catch(CORBAProblemEx) { ACS_SHORT_LOG((LM_ERROR,"Consumer::createConsumer failed for the '%s' channel due to a nil pointer!", channelName_mp)); throw; } catch(...) { ACS_SHORT_LOG((LM_ERROR,"Consumer::createConsumer failed for the '%s' channel due to some unknown reason!", channelName_mp)); CORBAProblemExImpl err = CORBAProblemExImpl(__FILE__,__LINE__,"nc::Consumer::createConsumer"); throw err.getCORBAProblemEx(); } //now the developer must call consumerReady() to receive events. }