// = The RtecEventChannelAdmin::SupplierAdmin methods... RtecEventChannelAdmin::ProxyPushConsumer_ptr FTEC_Gateway_SupplierAdmin::obtain_push_consumer (void) { FtRtecEventComm::ObjectId** remote_proxy_oid_ptr; ACE_NEW_THROW_EX(remote_proxy_oid_ptr, FtRtecEventComm::ObjectId*, CORBA::NO_MEMORY()); FtRtecEventComm::ObjectId local_oid; local_oid.length(sizeof(remote_proxy_oid_ptr)); ACE_OS::memcpy(&local_oid[0], &remote_proxy_oid_ptr, sizeof(remote_proxy_oid_ptr)); RtecEventChannelAdmin::ProxyPushConsumer_ptr result; activate_object_with_id(result, impl_->poa.in(), &impl_->proxy_consumer_servant, local_oid); return result; }
/// Activate in the POA void TAO_FTEC_ProxyPushSupplier::activate ( RtecEventChannelAdmin::ProxyPushSupplier_ptr &result) { result = RtecEventChannelAdmin::ProxyPushSupplier::_nil(); try{ object_id_ = Request_Context_Repository().get_object_id(); PortableServer::POA_var poa = _default_POA(); activate_object_with_id(result, poa.in(), this, id()); } catch (const CORBA::Exception&) { // ignore exceptions } }
FtRtecEventChannelAdmin::EventChannel_ptr TAO_FTEC_Event_Channel::activate(TAO_FTEC_Event_Channel::MEMBERSHIP membership) { FTRTEC::Fault_Detector_Loader* detector_loader = ACE_Dynamic_Service<FTRTEC::Fault_Detector_Loader>::instance("FTRTEC_Fault_Detector"); detector_loader->init(0, 0); if (FTRTEC::Identification_Service::instance() == 0) ORBSVCS_ERROR_RETURN((LM_ERROR, "No Identification\n"), 0); // initialize naming_contex CosNaming::NamingContext_var naming_context = resolve_init<CosNaming::NamingContext>(orb_.in(), "NameService"); // initialize group info publisher GroupInfoPublisher::instance()->set_naming_context(naming_context); if (FTRTEC::Replication_Service::instance()->init(0,0) == -1) return 0; GroupInfoPublisher::instance()->subscribe(FTRTEC::Replication_Service::instance()); Request_Context_Repository().init(orb_.in()); // get POAManager PortableServer::POAManager_var mgr = poa_->the_POAManager(); TAO::Utils::PolicyList_Destroyer policy_list(2); persistent_poa_ = create_persistent_poa(poa_, mgr, "FTEC_Persistant_POA", policy_list); // Activate the Event channel implementation TAO_EC_Event_Channel_Attributes attr (persistent_poa_.in (), persistent_poa_.in ()); TAO_FTEC_Event_Channel_Impl* ec = 0; ACE_NEW_THROW_EX (ec, TAO_FTEC_Event_Channel_Impl (attr), CORBA::NO_MEMORY()); this->ec_impl_ = ec; const FtRtecEventComm::ObjectId& object_id = FTRTEC::Identification_Service::instance()->object_id(); FtRtecEventComm::ObjectId consumer_admin_object_id(object_id); consumer_admin_object_id[9]++; FtRtecEventComm::ObjectId supplier_admin_object_id(consumer_admin_object_id); supplier_admin_object_id[9]++; ec->activate_object(orb_, supplier_admin_object_id, consumer_admin_object_id); FtRtecEventChannelAdmin::EventChannel_var result; activate_object_with_id(result.out(), persistent_poa_.in(), this, object_id); setup_object_group(this, naming_context.in(), membership, result.in()); return result._retn(); }
RtecEventChannelAdmin::EventChannel_ptr FTEC_Gateway::activate(PortableServer::POA_ptr root_poa) { PortableServer::POA_var poa; PortableServer::POAManager_var mgr; if (impl_->local_orb) { int argc = 0; char** argv = 0; impl_->orb = CORBA::ORB_init(argc, argv, "FTEC_GatewayORB"); Interceptor_Destoryer::execute(impl_->orb.in()); poa = resolve_init<PortableServer::POA>(impl_->orb.in(), "RootPOA"); mgr = poa->the_POAManager(); mgr->activate(); } else { poa = PortableServer::POA::_duplicate(root_poa); mgr = poa->the_POAManager(); } PortableServer::IdUniquenessPolicy_var id_uniqueness_policy = poa->create_id_uniqueness_policy(PortableServer::MULTIPLE_ID); PortableServer::LifespanPolicy_var lifespan = poa->create_lifespan_policy(PortableServer::PERSISTENT); // create a USER_ID IdAssignmentPolicy object PortableServer::IdAssignmentPolicy_var assign = poa->create_id_assignment_policy(PortableServer::USER_ID); CORBA::PolicyList policy_list; policy_list.length(3); policy_list[0] = PortableServer::IdUniquenessPolicy::_duplicate( id_uniqueness_policy.in()); policy_list[1]= PortableServer::LifespanPolicy::_duplicate(lifespan.in()); policy_list[2]= PortableServer::IdAssignmentPolicy::_duplicate(assign.in()); impl_->poa = poa->create_POA("gateway_poa", mgr.in(), policy_list); id_uniqueness_policy->destroy(); lifespan->destroy(); assign->destroy(); FtRtecEventComm::ObjectId oid; oid.length(16); TAO_FtRt::UUID::create(oid.get_buffer()); RtecEventChannelAdmin::EventChannel_var gateway; activate_object_with_id(gateway.out(), impl_->poa.in(), this, oid); ++oid[9]; activate_object_with_id(impl_->consumer_admin.out(), impl_->poa.in(), &impl_->consumer_admin_servant, oid); ++oid[9]; activate_object_with_id(impl_->supplier_admin.out(), impl_->poa.in(), &impl_->supplier_admin_servant, oid); return gateway._retn(); }