#include <Hash_Naming_Context.h>
Inheritance diagram for TAO_Hash_Naming_Context:
Public Member Functions | |
TAO_Hash_Naming_Context (PortableServer::POA_ptr poa, const char *poa_id) | |
Constructor. | |
void | interface (TAO_Naming_Context *i) |
Set our pointer. | |
virtual | ~TAO_Hash_Naming_Context (void) |
Destructor. | |
TAO_Naming_Context * | interface (void) |
Get the pointer to our . | |
int | root (void) |
int | destroyed (void) |
virtual void | bind (const CosNaming::Name &n, CORBA::Object_ptr obj) |
virtual void | rebind (const CosNaming::Name &n, CORBA::Object_ptr obj) |
virtual void | bind_context (const CosNaming::Name &n, CosNaming::NamingContext_ptr nc) |
virtual void | rebind_context (const CosNaming::Name &n, CosNaming::NamingContext_ptr nc) |
virtual CORBA::Object_ptr | resolve (const CosNaming::Name &n) |
virtual void | unbind (const CosNaming::Name &n) |
virtual CosNaming::NamingContext_ptr | bind_new_context (const CosNaming::Name &n) |
virtual void | destroy (void) |
virtual PortableServer::POA_ptr | _default_POA (void) |
Returns the Default POA of this Servant object. | |
Protected Member Functions | |
CosNaming::NamingContext_ptr | get_context (const CosNaming::Name &name) |
Protected Attributes | |
TAO_Bindings_Map * | context_ |
TAO_Naming_Context * | interface_ |
TAO_SYNCH_RECURSIVE_MUTEX | lock_ |
Lock used to serialize access to the underlying data structure. | |
int | destroyed_ |
PortableServer::POA_var | poa_ |
POA we are registered with. | |
ACE_CString | poa_id_ |
This class contains 'algorithm' code that is common to two hash-table-based implementations of the NamingContext: TAO_Transient_Naming_Context and TAO_Persistent_Naming_Context. To help achieve this 'templatization', we use the abstract base class TAO_Bindings_Map, which provides a common interface to the data structures used in TAO_Persistent_Namng_Context and TAO_Transient_Naming_Context.
Definition at line 116 of file Hash_Naming_Context.h.
|
Constructor.
Definition at line 31 of file Hash_Naming_Context.cpp.
00033 : context_ (0), 00034 interface_ (0), 00035 destroyed_ (0), 00036 poa_ (PortableServer::POA::_duplicate (poa)), 00037 poa_id_ (poa_id) 00038 { 00039 } |
|
Destructor.
Definition at line 47 of file Hash_Naming_Context.cpp.
00048 { 00049 delete context_; 00050 } |
|
Returns the Default POA of this Servant object.
Implements TAO_Naming_Context_Impl. Definition at line 53 of file Hash_Naming_Context.cpp. Referenced by TAO_Storable_Naming_Context::destroy(), and destroy().
00054 {
00055 return PortableServer::POA::_duplicate (this->poa_.in ());
00056 }
|
|
Create a binding for name and object in the naming context. Compound names are treated as follows: ctx->bind (<c1; c2; c3; cn>, obj) = (ctx->resolve (<c1; c2; cn-1>))->bind (, obj) if the there already exists a binding for the specified name, exception is thrown. Naming contexts should be bound using and in order to participate in name resolution later. Implements TAO_Naming_Context_Impl. Reimplemented in TAO_Storable_Naming_Context. Definition at line 107 of file Hash_Naming_Context.cpp. References ACE_GUARD_THROW_EX, TAO_Bindings_Map::bind(), get_context(), CosNaming::Name, and TAO_SYNCH_RECURSIVE_MUTEX.
00108 { 00109 ACE_GUARD_THROW_EX (TAO_SYNCH_RECURSIVE_MUTEX, 00110 ace_mon, this->lock_, 00111 CORBA::INTERNAL ()); 00112 00113 // Check to make sure this object didn't have <destroy> method 00114 // invoked on it. 00115 if (this->destroyed_) 00116 throw CORBA::OBJECT_NOT_EXIST (); 00117 00118 // Get the length of the name. 00119 CORBA::ULong const name_len = n.length (); 00120 00121 // Check for invalid name. 00122 if (name_len == 0) 00123 throw CosNaming::NamingContext::InvalidName(); 00124 00125 // If we received compound name, resolve it to get the context in 00126 // which the binding should take place, then perform the binding on 00127 // target context. 00128 if (name_len > 1) 00129 { 00130 CosNaming::NamingContext_var context = this->get_context (n); 00131 00132 CosNaming::Name simple_name; 00133 simple_name.length (1); 00134 simple_name[0] = n[name_len - 1]; 00135 try 00136 { 00137 context->bind (simple_name, obj); 00138 } 00139 catch (const CORBA::SystemException&) 00140 { 00141 throw CosNaming::NamingContext::CannotProceed( 00142 context.in (), simple_name); 00143 } 00144 } 00145 // If we received a simple name, we need to bind it in this context. 00146 else 00147 { 00148 // Try binding the name. 00149 int result = this->context_->bind (n[0].id, 00150 n[0].kind, 00151 obj, 00152 CosNaming::nobject); 00153 if (result == 1) 00154 throw CosNaming::NamingContext::AlreadyBound(); 00155 00156 // Something went wrong with the internal structure 00157 else if (result == -1) 00158 throw CORBA::INTERNAL (); 00159 } 00160 } |
|
This is the version of specifically for binding naming contexts, so that they will participate in name resolution when compound names are passed to be resolved. Implements TAO_Naming_Context_Impl. Reimplemented in TAO_Storable_Naming_Context. Definition at line 221 of file Hash_Naming_Context.cpp. References ACE_GUARD_THROW_EX, TAO_Bindings_Map::bind(), get_context(), CORBA::is_nil(), CosNaming::Name, and TAO_SYNCH_RECURSIVE_MUTEX. Referenced by bind_new_context().
00223 { 00224 ACE_GUARD_THROW_EX (TAO_SYNCH_RECURSIVE_MUTEX, ace_mon, 00225 this->lock_, 00226 CORBA::INTERNAL ()); 00227 00228 // Check to make sure this object didn't have <destroy> method 00229 // invoked on it. 00230 if (this->destroyed_) 00231 throw CORBA::OBJECT_NOT_EXIST (); 00232 00233 // Do not allow binding of nil context reference. 00234 if (CORBA::is_nil (nc)) 00235 throw CORBA::BAD_PARAM (); 00236 00237 // Get the length of the name. 00238 CORBA::ULong const name_len = n.length (); 00239 00240 // Check for invalid name. 00241 if (name_len == 0) 00242 throw CosNaming::NamingContext::InvalidName(); 00243 00244 // If we received compound name, resolve it to get the context in 00245 // which the binding should take place, then perform the binding on 00246 // target context. 00247 if (name_len > 1) 00248 { 00249 CosNaming::NamingContext_var context = get_context (n); 00250 00251 CosNaming::Name simple_name; 00252 simple_name.length (1); 00253 simple_name[0] = n[name_len - 1]; 00254 try 00255 { 00256 context->bind_context (simple_name, nc); 00257 } 00258 catch (const CORBA::SystemException&) 00259 { 00260 throw CosNaming::NamingContext::CannotProceed( 00261 context.in (), simple_name); 00262 } 00263 } 00264 // If we received a simple name, we need to bind it in this context. 00265 else 00266 { 00267 // Try binding the name. 00268 int result = this->context_->bind (n[0].id, 00269 n[0].kind, 00270 nc, 00271 CosNaming::ncontext); 00272 if (result == 1) 00273 throw CosNaming::NamingContext::AlreadyBound(); 00274 00275 // Something went wrong with the internal structure 00276 else if (result == -1) 00277 throw CORBA::INTERNAL (); 00278 } 00279 } |
|
This operation creates a new context and binds it to the name supplied as an argument. The newly-created context is implemented by the same server as the context in which it was bound (the name argument excluding the last component). Implements TAO_Naming_Context_Impl. Reimplemented in TAO_Storable_Naming_Context. Definition at line 482 of file Hash_Naming_Context.cpp. References ACE_GUARD_THROW_EX, bind_context(), get_context(), CosNaming::Name, TAO_Naming_Context_Impl::new_context(), and TAO_SYNCH_RECURSIVE_MUTEX.
00483 { 00484 ACE_GUARD_THROW_EX (TAO_SYNCH_RECURSIVE_MUTEX, 00485 ace_mon, 00486 this->lock_, 00487 CORBA::INTERNAL ()); 00488 00489 // Check to make sure this object didn't have <destroy> method 00490 // invoked on it. 00491 if (this->destroyed_) 00492 throw CORBA::OBJECT_NOT_EXIST (); 00493 00494 // Get the length of the name. 00495 CORBA::ULong name_len = n.length (); 00496 00497 // Check for invalid name. 00498 if (name_len == 0) 00499 throw CosNaming::NamingContext::InvalidName(); 00500 00501 // If we received compound name, resolve it to get the context in 00502 // which the binding should take place, then perform the operation on 00503 // target context. 00504 if (name_len > 1) 00505 { 00506 CosNaming::NamingContext_var context = 00507 get_context (n); 00508 00509 CosNaming::Name simple_name; 00510 simple_name.length (1); 00511 simple_name[0] = n[name_len - 1]; 00512 return context->bind_new_context (simple_name); 00513 } 00514 00515 // If we received a simple name, we need to bind it in this context. 00516 00517 // Stores our new Naming Context. 00518 CosNaming::NamingContext_var result = 00519 CosNaming::NamingContext::_nil (); 00520 00521 // Create new context. 00522 result = new_context (); 00523 00524 // Bind the new context to the name. 00525 try 00526 { 00527 bind_context (n, result.in ()); 00528 } 00529 catch (const CORBA::Exception&) 00530 { 00531 // If the bind() operation fails we must destroy the recently 00532 // created context, should any exceptions be raised by the 00533 // destroy() operation we want to ignore them. 00534 { 00535 try 00536 { 00537 result->destroy (); 00538 } 00539 catch (const CORBA::Exception&) 00540 { 00541 } 00542 } 00543 // Re-raise the exception in bind_context() 00544 throw; 00545 } 00546 return result._retn (); 00547 } |
|
Delete the naming context. The user should take care to any bindings in which the given context is bound to some names, to avoid dangling references when invoking operation. NOTE: is a no-op on the root context. NOTE: after is invoked on a Naming Context, all BindingIterators associated with that Naming Context are also destroyed. Implements TAO_Naming_Context_Impl. Reimplemented in TAO_Storable_Naming_Context. Definition at line 550 of file Hash_Naming_Context.cpp. References _default_POA(), ACE_GUARD_THROW_EX, TAO_Bindings_Map::current_size(), poa_id_, root(), and TAO_SYNCH_RECURSIVE_MUTEX.
00551 { 00552 ACE_GUARD_THROW_EX (TAO_SYNCH_RECURSIVE_MUTEX, 00553 ace_mon, 00554 this->lock_, 00555 CORBA::INTERNAL ()); 00556 00557 // Check to make sure this object didn't have <destroy> method 00558 // invoked on it. 00559 if (this->destroyed_) 00560 throw CORBA::OBJECT_NOT_EXIST (); 00561 00562 if (this->context_->current_size () != 0) 00563 throw CosNaming::NamingContext::NotEmpty(); 00564 00565 // Destroy is a no-op on a root context. 00566 if (root ()) 00567 return; 00568 00569 else 00570 { 00571 this->destroyed_ = 2; 00572 00573 // Remove self from POA. Because of reference counting, the POA 00574 // will automatically delete the servant when all pending requests 00575 // on this servant are complete. 00576 00577 PortableServer::POA_var poa = 00578 this->_default_POA (); 00579 00580 PortableServer::ObjectId_var id = 00581 PortableServer::string_to_ObjectId (poa_id_.fast_rep ()); 00582 00583 poa->deactivate_object (id.in ()); 00584 } 00585 } |
|
Returns true if this context had operation invoked on it, and false otherwise. Definition at line 595 of file Hash_Naming_Context.cpp. Referenced by TAO_Bindings_Iterator< ITERATOR, TABLE_ENTRY >::next_n(), and TAO_Bindings_Iterator< ITERATOR, TABLE_ENTRY >::next_one().
00596 { 00597 return this->destroyed_; 00598 } |
|
is used by methods that need to resolve a compound name before performing the actual operation (e.g., bind, unbind, etc.) takes a full name (including the last component that doesn't need to be resolved), and returns a pointer to the target context. Definition at line 59 of file Hash_Naming_Context.cpp. References CORBA::is_nil(), CosNaming::Name, and resolve(). Referenced by TAO_Storable_Naming_Context::bind(), bind(), TAO_Storable_Naming_Context::bind_context(), bind_context(), TAO_Storable_Naming_Context::bind_new_context(), bind_new_context(), TAO_Storable_Naming_Context::rebind(), rebind(), TAO_Storable_Naming_Context::rebind_context(), rebind_context(), TAO_Storable_Naming_Context::unbind(), and unbind().
00060 { 00061 // Naming context we will return. 00062 CosNaming::NamingContext_var result = 00063 CosNaming::NamingContext::_nil (); 00064 00065 // Create compound name to be resolved, i.e., 00066 // (<name> - last component). To avoid copying, we can just reuse 00067 // <name>'s buffer, since we will not be modifying it. 00068 CORBA::ULong name_len = name.length (); 00069 CosNaming::Name comp_name (name.maximum (), 00070 name_len - 1, 00071 const_cast<CosNaming::NameComponent*> (name.get_buffer ())); 00072 try 00073 { 00074 // Resolve the name. 00075 CORBA::Object_var context = resolve (comp_name); 00076 00077 // Try narrowing object reference to the NamingContext type. 00078 result = CosNaming::NamingContext::_narrow (context.in ()); 00079 } 00080 catch (CosNaming::NamingContext::NotFound& ex) 00081 { 00082 // Add the last component of the name, which was stripped before 00083 // the call to resolve. 00084 CORBA::ULong rest_len = ex.rest_of_name.length () + 1; 00085 ex.rest_of_name.length (rest_len); 00086 ex.rest_of_name[rest_len - 1] = name[name_len - 1]; 00087 00088 throw; 00089 } 00090 00091 if (CORBA::is_nil (result.in ())) 00092 { 00093 CosNaming::Name rest; 00094 rest.length (2); 00095 rest[0] = name[name_len - 2]; 00096 rest[1] = name[name_len - 1]; 00097 throw CosNaming::NamingContext::NotFound( 00098 CosNaming::NamingContext::not_context, 00099 rest); 00100 } 00101 // Finally, if everything went smoothly, just return the resolved 00102 // context. 00103 return result._retn (); 00104 } |
|
Get the pointer to our .
Definition at line 601 of file Hash_Naming_Context.cpp. References interface_.
00602 { 00603 return this->interface_; 00604 } |
|
Set our pointer.
Definition at line 42 of file Hash_Naming_Context.cpp. References interface_. Referenced by TAO_Bindings_Iterator< ITERATOR, TABLE_ENTRY >::~TAO_Bindings_Iterator().
00043 { 00044 this->interface_ = i; 00045 } |
|
This is similar to operation above, except for when the binding for the specified name already exists in the specified context. In that case, the existing binding is replaced with the new one. Implements TAO_Naming_Context_Impl. Reimplemented in TAO_Storable_Naming_Context. Definition at line 163 of file Hash_Naming_Context.cpp. References ACE_GUARD_THROW_EX, get_context(), CosNaming::Name, TAO_Bindings_Map::rebind(), and TAO_SYNCH_RECURSIVE_MUTEX.
00165 { 00166 ACE_GUARD_THROW_EX (TAO_SYNCH_RECURSIVE_MUTEX, ace_mon, 00167 this->lock_, 00168 CORBA::INTERNAL ()); 00169 00170 // Check to make sure this object didn't have <destroy> method 00171 // invoked on it. 00172 if (this->destroyed_) 00173 throw CORBA::OBJECT_NOT_EXIST (); 00174 00175 // Get the length of the name. 00176 CORBA::ULong const name_len = n.length (); 00177 00178 // Check for invalid name. 00179 if (name_len == 0) 00180 throw CosNaming::NamingContext::InvalidName(); 00181 00182 // If we received compound name, resolve it to get the context in 00183 // which the rebinding should take place, then perform the rebinding 00184 // on target context. 00185 if (name_len > 1) 00186 { 00187 CosNaming::NamingContext_var context = get_context (n); 00188 00189 CosNaming::Name simple_name; 00190 simple_name.length (1); 00191 simple_name[0] = n[name_len - 1]; 00192 try 00193 { 00194 context->rebind (simple_name, obj); 00195 } 00196 catch (const CORBA::SystemException&) 00197 { 00198 throw CosNaming::NamingContext::CannotProceed( 00199 context.in (), simple_name); 00200 } 00201 } 00202 else 00203 // If we received a simple name, we need to rebind it in this 00204 // context. 00205 { 00206 int result = this->context_->rebind (n[0].id, 00207 n[0].kind, 00208 obj, 00209 CosNaming::nobject); 00210 // Check for error conditions. 00211 if (result == -1) 00212 throw CORBA::INTERNAL (); 00213 00214 else if (result == -2) 00215 throw CosNaming::NamingContext::NotFound( 00216 CosNaming::NamingContext::not_object, n); 00217 } 00218 } |
|
This is a version of specifically for naming contexts, so that they can participate in name resolution when compound names are passed. Implements TAO_Naming_Context_Impl. Reimplemented in TAO_Storable_Naming_Context. Definition at line 282 of file Hash_Naming_Context.cpp. References ACE_GUARD_THROW_EX, get_context(), CosNaming::Name, TAO_Bindings_Map::rebind(), and TAO_SYNCH_RECURSIVE_MUTEX.
00284 { 00285 ACE_GUARD_THROW_EX (TAO_SYNCH_RECURSIVE_MUTEX, ace_mon, 00286 this->lock_, 00287 CORBA::INTERNAL ()); 00288 00289 // Check to make sure this object didn't have <destroy> method 00290 // invoked on it. 00291 if (this->destroyed_) 00292 throw CORBA::OBJECT_NOT_EXIST (); 00293 00294 // Get the length of the name. 00295 CORBA::ULong const name_len = n.length (); 00296 00297 // Check for invalid name. 00298 if (name_len == 0) 00299 throw CosNaming::NamingContext::InvalidName(); 00300 00301 // If we received compound name, resolve it to get the context in 00302 // which the rebinding should take place, then perform the rebinding 00303 // on target context. 00304 if (name_len > 1) 00305 { 00306 CosNaming::NamingContext_var context = 00307 get_context (n); 00308 00309 CosNaming::Name simple_name; 00310 simple_name.length (1); 00311 simple_name[0] = n[name_len - 1]; 00312 try 00313 { 00314 context->rebind_context (simple_name, nc); 00315 } 00316 catch (const CORBA::SystemException&) 00317 { 00318 throw CosNaming::NamingContext::CannotProceed( 00319 context.in (), simple_name); 00320 } 00321 } 00322 else 00323 // If we received a simple name, we need to rebind it in this 00324 // context. 00325 { 00326 int result = this->context_->rebind (n[0].id, 00327 n[0].kind, 00328 nc, 00329 CosNaming::ncontext); 00330 // Check for error conditions. 00331 if (result == -1) 00332 throw CORBA::INTERNAL (); 00333 00334 else if (result == -2) 00335 throw CosNaming::NamingContext::NotFound( 00336 CosNaming::NamingContext::not_context, 00337 n); 00338 } 00339 } |
|
Return object reference that is bound to the name. Compound name resolve is defined as follows: ctx->resolve (<c1; c2; cn>) = ctx->resolve (<c1; c2 cn-1>)->resolve () The naming service does not return the type of the object. Clients are responsible for "narrowing" the object to the appropriate type. Implements TAO_Naming_Context_Impl. Reimplemented in TAO_Storable_Naming_Context. Definition at line 342 of file Hash_Naming_Context.cpp. References ACE_GUARD_THROW_EX, TAO_Bindings_Map::find(), CORBA::is_nil(), CosNaming::Name, and TAO_SYNCH_RECURSIVE_MUTEX. Referenced by get_context().
00343 { 00344 ACE_GUARD_THROW_EX (TAO_SYNCH_RECURSIVE_MUTEX, ace_mon, this->lock_, 00345 CORBA::INTERNAL ()); 00346 00347 // Check to make sure this object didn't have <destroy> method 00348 // invoked on it. 00349 if (this->destroyed_) 00350 throw CORBA::OBJECT_NOT_EXIST (); 00351 00352 // Get the length of the name. 00353 CORBA::ULong const name_len = n.length (); 00354 00355 // Check for invalid name. 00356 if (name_len == 0) 00357 throw CosNaming::NamingContext::InvalidName(); 00358 00359 // Resolve the first component of the name. 00360 00361 // Stores the binding type for the first name component. 00362 CosNaming::BindingType type; 00363 00364 // Stores the object reference bound to the first name component. 00365 CORBA::Object_var result; 00366 00367 if (this->context_->find (n[0].id, 00368 n[0].kind, 00369 result.out (), 00370 type) == -1) 00371 throw CosNaming::NamingContext::NotFound( 00372 CosNaming::NamingContext::missing_node, 00373 n); 00374 00375 // If the name we have to resolve is a compound name, we need to 00376 // resolve it recursively. 00377 if (name_len > 1) 00378 { 00379 CosNaming::NamingContext_var context = 00380 CosNaming::NamingContext::_nil (); 00381 00382 if (type == CosNaming::ncontext) 00383 { 00384 // Narrow to NamingContext. 00385 context = CosNaming::NamingContext::_narrow (result.in ()); 00386 } 00387 else 00388 // The first name component wasn't bound to a NamingContext. 00389 throw CosNaming::NamingContext::NotFound( 00390 CosNaming::NamingContext::not_context, 00391 n); 00392 00393 // If narrow failed... 00394 if (CORBA::is_nil (context.in ())) 00395 throw CosNaming::NamingContext::NotFound( 00396 CosNaming::NamingContext::not_context, 00397 n); 00398 else 00399 { 00400 // Successfully resolved the first name component, need to 00401 // recursively call resolve on <n> without the first component. 00402 00403 // We need a name just like <n> but without the first 00404 // component. Instead of copying data we can reuse <n>'s 00405 // buffer since we will only be using it for 'in' parameters 00406 // (no modifications). 00407 CosNaming::Name rest_of_name 00408 (n.maximum () - 1, 00409 n.length () - 1, 00410 const_cast<CosNaming::NameComponent*> (n.get_buffer ()) 00411 + 1); 00412 00413 // If there are any exceptions, they will propagate up. 00414 try 00415 { 00416 CORBA::Object_ptr resolved_ref; 00417 resolved_ref = context->resolve (rest_of_name); 00418 return resolved_ref; 00419 } 00420 catch (const CORBA::SystemException&) 00421 { 00422 throw CosNaming::NamingContext::CannotProceed( 00423 context.in (), rest_of_name); 00424 } 00425 } 00426 } 00427 // If the name we had to resolve was simple, we just need to return 00428 // the result. 00429 return result._retn (); 00430 } |
|
Returns true if this Naming Context is a root Naming Context for the server, and false otherwise. Definition at line 588 of file Hash_Naming_Context.cpp. References ACE_OS::strcmp(), and TAO_ROOT_NAMING_CONTEXT. Referenced by TAO_Storable_Naming_Context::destroy(), and destroy().
00589 { 00590 return (ACE_OS::strcmp (this->poa_id_.fast_rep (), 00591 TAO_ROOT_NAMING_CONTEXT) == 0); 00592 } |
|
Remove the name binding from the context. When compound names are used, unbind is defined as follows: ctx->unbind (<c1; c2; cn>) = (ctx->resolve (<c1; c2; cn-1>))->unbind () Implements TAO_Naming_Context_Impl. Reimplemented in TAO_Storable_Naming_Context. Definition at line 433 of file Hash_Naming_Context.cpp. References ACE_GUARD_THROW_EX, get_context(), CosNaming::Name, TAO_SYNCH_RECURSIVE_MUTEX, and TAO_Bindings_Map::unbind().
00434 { 00435 ACE_GUARD_THROW_EX (TAO_SYNCH_RECURSIVE_MUTEX, ace_mon, 00436 this->lock_, 00437 CORBA::INTERNAL ()); 00438 00439 // Check to make sure this object didn't have <destroy> method 00440 // invoked on it. 00441 if (this->destroyed_) 00442 throw CORBA::OBJECT_NOT_EXIST (); 00443 00444 // Get the length of the name. 00445 CORBA::ULong const name_len = n.length (); 00446 00447 // Check for invalid name. 00448 if (name_len == 0) 00449 throw CosNaming::NamingContext::InvalidName(); 00450 00451 // If we received compound name, resolve it to get the context in 00452 // which the unbinding should take place, then perform the unbinding 00453 // on target context. 00454 if (name_len > 1) 00455 { 00456 CosNaming::NamingContext_var context = 00457 get_context (n); 00458 00459 CosNaming::Name simple_name; 00460 simple_name.length (1); 00461 simple_name[0] = n[name_len - 1]; 00462 try 00463 { 00464 context->unbind (simple_name); 00465 } 00466 catch (const CORBA::SystemException&) 00467 { 00468 throw CosNaming::NamingContext::CannotProceed( 00469 context.in (), simple_name); 00470 } 00471 } 00472 // If we received a simple name, we need to unbind it in this 00473 // context. 00474 else 00475 if (this->context_->unbind (n[0].id, 00476 n[0].kind) == -1) 00477 throw CosNaming::NamingContext::NotFound( 00478 CosNaming::NamingContext::missing_node, n); 00479 } |
|
Pointer to the data structure used to store this Naming Context's bindings. is initialized with a concrete data structure by subclasses, which know which data structure to use. Definition at line 236 of file Hash_Naming_Context.h. Referenced by TAO_Storable_Naming_Context::new_context(), and TAO_Storable_Naming_Context::recreate_all(). |
|
Flag indicating whether this Naming Context is no longer valid. This flag is necessary because immediate destruction might not be possible if there are pending requests on this servant in the POA. Definition at line 255 of file Hash_Naming_Context.h. |
|
Pointer to the object for which we serve as a , i.e., the object that delegates to us all client CosNaming::NamingContext CORBA calls. We need this pointer for reference counting. Definition at line 244 of file Hash_Naming_Context.h. Referenced by interface(). |
|
Lock used to serialize access to the underlying data structure.
Definition at line 247 of file Hash_Naming_Context.h. |
|
POA we are registered with.
Reimplemented in TAO_Storable_Naming_Context. Definition at line 258 of file Hash_Naming_Context.h. |
|
ID with which we are registered with . Note, if is equivalent to TAO_ROOT_NAMING_CONTEXT, then this Naming Context is the root Naming Context for the server, i.e., it is un<destroy>able. Definition at line 265 of file Hash_Naming_Context.h. Referenced by destroy(), and TAO_Persistent_Naming_Context::make_new_context(). |