#include <Storable_Naming_Context_Activator.h>
Collaboration diagram for TAO_Storable_Naming_Context_Activator:
Public Member Functions | |
TAO_Storable_Naming_Context_Activator (CORBA::ORB_ptr orb, TAO_Naming_Service_Persistence_Factory *factory, const ACE_TCHAR *persistence_directory, size_t context_size) | |
virtual | ~TAO_Storable_Naming_Context_Activator () |
virtual PortableServer::Servant | incarnate (const PortableServer::ObjectId &oid, PortableServer::POA_ptr poa) |
virtual void | etherealize (const PortableServer::ObjectId &oid, PortableServer::POA_ptr adapter, PortableServer::Servant servant, CORBA::Boolean cleanup_in_progress, CORBA::Boolean remaining_activations) |
Private Attributes | |
CORBA::ORB_ptr | orb_ |
TAO_Naming_Service_Persistence_Factory * | factory_ |
const ACE_TCHAR * | persistence_directory_ |
size_t | context_size_ |
Definition at line 37 of file Storable_Naming_Context_Activator.h.
|
The constructor takes arguments needed to create a TAO_Storable_Naming_Context and TAO_Naming_Context on demand. Definition at line 22 of file Storable_Naming_Context_Activator.cpp.
00027 : orb_(orb), 00028 factory_(factory), 00029 persistence_directory_(persistence_directory), 00030 context_size_(context_size) 00031 { 00032 } |
|
Definition at line 34 of file Storable_Naming_Context_Activator.cpp.
00035 { 00036 delete factory_; 00037 } |
|
Used by the POA to delete the servant created from a call to incarnate. Definition at line 100 of file Storable_Naming_Context_Activator.cpp.
00106 { 00107 if (!remaining_activations) 00108 { 00109 delete servant; 00110 } 00111 } |
|
Create a TAO_Storable_Naming_Context and TAO_Naming_Context on demand if a request to a naming context CORBA reference is made and the servant implementing this reference does not yet exist. Definition at line 40 of file Storable_Naming_Context_Activator.cpp. References ACE_ASSERT, ACE_NEW_THROW_EX, ACE_TEXT, ACE_TEXT_ALWAYS_CHAR, ACE_TEXT_CHAR_TO_TCHAR, ACE_TString, TAO_Naming_Service_Persistence_Factory::create_stream(), TAO_Storable_Base::exists(), and ACE_Auto_Basic_Ptr< X >::release().
00043 { 00044 00045 // Make sure complete initialization has been done 00046 ACE_ASSERT (factory_ != 0); 00047 00048 CORBA::String_var poa_id = PortableServer::ObjectId_to_string (oid); 00049 00050 // The approached used is to simply verify that there is a 00051 // persistence element that exists that corresponds to the 00052 // poa_id. If so, an empty context is created. Later, when the 00053 // context is accessed it will be determined that the contents of 00054 // the persistence elment needs to be read in. 00055 00056 // Does this already exist on disk? 00057 ACE_TString file_name(persistence_directory_); 00058 file_name += ACE_TEXT("/"); 00059 file_name += ACE_TEXT_CHAR_TO_TCHAR(poa_id.in()); 00060 TAO_Storable_Base * fl = factory_->create_stream(ACE_TEXT_ALWAYS_CHAR(file_name.c_str()), ACE_TEXT("rw")); 00061 if (!fl->exists()) { 00062 throw CORBA::OBJECT_NOT_EXIST (); 00063 } 00064 00065 // Store the stub we will return here. 00066 CosNaming::NamingContext_var result (CosNaming::NamingContext::_nil()); 00067 00068 // Put together a servant for the new Naming Context. 00069 00070 TAO_Storable_Naming_Context *context_impl = 0; 00071 ACE_NEW_THROW_EX (context_impl, 00072 TAO_Storable_Naming_Context (orb_, 00073 poa, 00074 poa_id.in (), 00075 factory_, 00076 persistence_directory_, 00077 context_size_), 00078 CORBA::NO_MEMORY ()); 00079 00080 // Put <context_impl> into the auto pointer temporarily, in case next 00081 // allocation fails. 00082 ACE_Auto_Basic_Ptr<TAO_Storable_Naming_Context> temp (context_impl); 00083 00084 TAO_Naming_Context *context = 0; 00085 ACE_NEW_THROW_EX (context, 00086 TAO_Naming_Context (context_impl), 00087 CORBA::NO_MEMORY ()); 00088 00089 // Let <implementation> know about it's <interface>. 00090 context_impl->interface (context); 00091 00092 // Release auto pointer, and start using reference counting to 00093 // control our servant. 00094 temp.release (); 00095 00096 return context; 00097 } |
|
Definition at line 75 of file Storable_Naming_Context_Activator.h. |
|
Definition at line 73 of file Storable_Naming_Context_Activator.h. |
|
Definition at line 72 of file Storable_Naming_Context_Activator.h. |
|
Definition at line 74 of file Storable_Naming_Context_Activator.h. |