本文整理汇总了C++中corba::Object_var::_is_collocated方法的典型用法代码示例。如果您正苦于以下问题:C++ Object_var::_is_collocated方法的具体用法?C++ Object_var::_is_collocated怎么用?C++ Object_var::_is_collocated使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类corba::Object_var
的用法示例。
在下文中一共展示了Object_var::_is_collocated方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: id
void
TAO_Storable_Naming_Context_ReaderWriter::write (TAO_Storable_Naming_Context & context)
{
TAO_NS_Persistence_Header header;
header.size (static_cast<unsigned int> (context.storable_context_->current_size()));
header.destroyed (context.destroyed_);
this->write_header(header);
if (0u == header.size ())
return;
ACE_Hash_Map_Iterator<TAO_Storable_ExtId,TAO_Storable_IntId,
ACE_Null_Mutex> it = context.storable_context_->map().begin();
ACE_Hash_Map_Iterator<TAO_Storable_ExtId,TAO_Storable_IntId,
ACE_Null_Mutex> itend = context.storable_context_->map().end();
ACE_Hash_Map_Entry<TAO_Storable_ExtId,TAO_Storable_IntId> ent = *it;
while (!(it == itend))
{
TAO_NS_Persistence_Record record;
ACE_CString name;
CosNaming::BindingType bt = (*it).int_id_.type_;
if (bt == CosNaming::ncontext)
{
CORBA::Object_var
obj = context.orb_->string_to_object ((*it).int_id_.ref_.in ());
if (obj->_is_collocated ())
{
// This is a local (i.e. non federated context) we therefore
// store only the ObjectID (persistence filename) for the object.
// The driving force behind storing ObjectIDs rather than IORs for
// local contexts is to provide for a redundant naming service.
// That is, a naming service that runs simultaneously on multiple
// machines sharing a file system. It allows multiple redundant
// copies to be started and stopped independently.
// The original target platform was Tru64 Clusters where there was
// a cluster address. In that scenario, clients may get different
// servers on each request, hence the requirement to keep
// synchronized to the disk. It also works on non-cluster system
// where the client picks one of the redundant servers and uses it,
// while other systems can pick different servers. (However in this
// scenario, if a server fails and a client must pick a new server,
// that client may not use any saved context IORs, instead starting
// from the root to resolve names. So this latter mode is not quite
// transparent to clients.) [Rich Seibel (seibel_r) of ociweb.com]
PortableServer::ObjectId_var
oid = context.poa_->reference_to_id (obj.in ());
CORBA::String_var
nm = PortableServer::ObjectId_to_string (oid.in ());
const char
*newname = nm.in ();
name.set (newname); // The local ObjectID (persistance filename)
record.type (TAO_NS_Persistence_Record::LOCAL_NCONTEXT);
}
else
{
// Since this is a foreign (federated) context, we can not store
// the objectID (because it isn't in our storage), if we did, when
// we restore, we would end up either not finding a permanent
// record (and thus ending up incorrectly assuming the context was
// destroyed) or loading another context altogether (just because
// the contexts shares its objectID filename which is very likely).
// [Simon Massey (sma) of prismtech.com]
name.set ((*it).int_id_.ref_.in ()); // The federated context IOR
record.type (TAO_NS_Persistence_Record::REMOTE_NCONTEXT);
}
}
else // if (bt == CosNaming::nobject) // shouldn't be any other, can there?
{
name.set ((*it).int_id_.ref_.in ()); // The non-context object IOR
record.type (TAO_NS_Persistence_Record::OBJREF);
}
record.ref(name);
const char *myid = (*it).ext_id_.id();
ACE_CString id(myid);
record.id(id);
const char *mykind = (*it).ext_id_.kind();
ACE_CString kind(mykind);
record.kind(kind);
write_record (record);
it.advance();
}
context.write_occurred_ = 1;
}