#include <Persistent_Context_Index.h>
Public Types | |
typedef ACE_Hash_Map_With_Allocator < TAO_Persistent_Index_ExtId, TAO_Persistent_Index_IntId > | CONTEXT_INDEX |
Hash map in which we will store info about each Persistent Naming Context. | |
typedef ACE_Hash_Map_With_Allocator < TAO_Persistent_ExtId, TAO_Persistent_IntId > | CONTEXT |
Hash map used by Persistent Naming Context to keep its state. | |
typedef ACE_Allocator_Adapter < ACE_Malloc < ACE_MMAP_MEMORY_POOL, TAO_SYNCH_MUTEX > > | ALLOCATOR |
Allocator we will be using to make the Naming Service persistent. | |
Public Member Functions | |
TAO_Persistent_Context_Index (CORBA::ORB_ptr orb, PortableServer::POA_ptr poa) | |
Constructor. | |
int | open (const ACE_TCHAR *file_name, void *base_address=TAO_NAMING_BASE_ADDR) |
int | init (size_t context_size) |
~TAO_Persistent_Context_Index (void) | |
int | bind (const char *poa_id, ACE_UINT32 *&counter, CONTEXT *hash_map) |
int | unbind (const char *poa_id) |
ACE_Allocator * | allocator (void) |
Return allocator. | |
CORBA::ORB_ptr | orb (void) |
Return orb pointer. | |
CosNaming::NamingContext_ptr | root_context (void) |
Private Member Functions | |
int | recreate_all (void) |
int | create_index (void) |
Helper for the <open> method. | |
int | create_index_helper (void *buffer) |
Private Attributes | |
TAO_SYNCH_MUTEX | lock_ |
ALLOCATOR * | allocator_ |
CONTEXT_INDEX * | index_ |
const ACE_TCHAR * | index_file_ |
Name of the memory-mapped file used by <allocator_>. | |
void * | base_address_ |
Base address for the memory-mapped file. | |
CORBA::ORB_var | orb_ |
PortableServer::POA_var | poa_ |
CosNaming::NamingContext_var | root_context_ |
The reference to the root Naming Context. |
This class creates a memory-mapped file, allocates a hash table from that file, and uses the hash table to store POA id, and table and counter pointers for each Persistent Naming Context. There are methods for adding and deleting entries from this hash table as new Persistent Naming Contexts are created and old ones are destroyed. This hash table facilitates Persistent Naming Context servant initialization upon Naming Server start-up.
typedef ACE_Hash_Map_With_Allocator<TAO_Persistent_Index_ExtId, TAO_Persistent_Index_IntId> TAO_Persistent_Context_Index::CONTEXT_INDEX |
Hash map in which we will store info about each Persistent Naming Context.
typedef ACE_Hash_Map_With_Allocator<TAO_Persistent_ExtId, TAO_Persistent_IntId> TAO_Persistent_Context_Index::CONTEXT |
Hash map used by Persistent Naming Context to keep its state.
typedef ACE_Allocator_Adapter<ACE_Malloc <ACE_MMAP_MEMORY_POOL, TAO_SYNCH_MUTEX> > TAO_Persistent_Context_Index::ALLOCATOR |
Allocator we will be using to make the Naming Service persistent.
TAO_Persistent_Context_Index::TAO_Persistent_Context_Index | ( | CORBA::ORB_ptr | orb, | |
PortableServer::POA_ptr | poa | |||
) |
Constructor.
TAO_Persistent_Context_Index::~TAO_Persistent_Context_Index | ( | void | ) |
Destructor. The memory mapped file that was opened/created is not deleted, since we want it to keep the state of the Naming Service until the next run.
int TAO_Persistent_Context_Index::open | ( | const ACE_TCHAR * | file_name, | |
void * | base_address = TAO_NAMING_BASE_ADDR | |||
) |
Create ACE_Allocator, open/create memory-mapped file with the specified file name/base address. Find or allocate <index_>. Return 0 on success or -1 on failure.
int TAO_Persistent_Context_Index::init | ( | size_t | context_size | ) |
If <index_> contains no entries (i.e., was just created), create a root Persistent Naming Context servant with table of size <context_size>, and make an entry for it in the <index_>. If <index_> contains entries, create a Persistent Naming Context servant for each entry. Return 0 on success and -1 on failure.
int TAO_Persistent_Context_Index::bind | ( | const char * | poa_id, | |
ACE_UINT32 *& | counter, | |||
TAO_Persistent_Context_Index::CONTEXT * | hash_map | |||
) |
Create an entry for a Persistent Naming Context in <index_>, i.e., a context with <poa_id>, <counter> and <hash_map> has just been created, and is registering with us.
TAO_BEGIN_VERSIONED_NAMESPACE_DECL int TAO_Persistent_Context_Index::unbind | ( | const char * | poa_id | ) |
Remove an entry for the Persistent Naming Context with <poa_id> from <index_> (i.e., this context has just been destroyed).
ACE_Allocator * TAO_Persistent_Context_Index::allocator | ( | void | ) |
Return allocator.
CORBA::ORB_ptr TAO_Persistent_Context_Index::orb | ( | void | ) |
Return orb pointer.
CosNaming::NamingContext_ptr TAO_Persistent_Context_Index::root_context | ( | void | ) |
Return a pointer to the root Naming Context (returns a copy - must be deallocated by the user).
int TAO_Persistent_Context_Index::recreate_all | ( | void | ) | [private] |
Helper for the <init> method. Iterates over <index_>, and creates a servant for each entry.
int TAO_Persistent_Context_Index::create_index | ( | void | ) | [private] |
Helper for the <open> method.
int TAO_Persistent_Context_Index::create_index_helper | ( | void * | buffer | ) | [private] |
Helper for <create_index> method: places hash table into an allocated space.
TAO_SYNCH_MUTEX TAO_Persistent_Context_Index::lock_ [private] |
Lock to prevent multiple threads from modifying entries in the <index_> simultanneously.
Allocator that deals out memory from a memory-mapped file. We use it here, and in TAO_Persistent_Naming_Context, whenever we deal with data that should be kept in persistent store.
Hash map where we keep entries for all Persistent Naming Contexts.
const ACE_TCHAR* TAO_Persistent_Context_Index::index_file_ [private] |
Name of the memory-mapped file used by <allocator_>.
void* TAO_Persistent_Context_Index::base_address_ [private] |
Base address for the memory-mapped file.
ORB. We use it for several object_to_string conversions, and keep it around for Persistent Naming Contexts' use.
PortableServer::POA_var TAO_Persistent_Context_Index::poa_ [private] |
POA under which to register Persistent Naming Context servants during start-up.
CosNaming::NamingContext_var TAO_Persistent_Context_Index::root_context_ [private] |
The reference to the root Naming Context.