ACE_Service_Gestalt Class Reference

Supplies common server operations for dynamic and static configuration of services. More...

#include <Service_Gestalt.h>

Inheritance diagram for ACE_Service_Gestalt:

Inheritance graph
[legend]
Collaboration diagram for ACE_Service_Gestalt:

Collaboration graph
[legend]
List of all members.

Public Types

 MAX_SERVICES = ACE_DEFAULT_SERVICE_REPOSITORY_SIZE
enum  { MAX_SERVICES = ACE_DEFAULT_SERVICE_REPOSITORY_SIZE }

Public Member Functions

 ACE_Service_Gestalt (size_t size, bool svc_repo_is_owned=true, bool no_static_svcs=true)
virtual ~ACE_Service_Gestalt (void)
void dump (void) const
 Dump the state of an object.
int open (const ACE_TCHAR program_name[], const ACE_TCHAR *logger_key=ACE_DEFAULT_LOGGER_KEY, bool ignore_static_svcs=true, bool ignore_default_svc_conf_file=false, bool ignore_debug_flag=false)
int open (int argc, ACE_TCHAR *argv[], const ACE_TCHAR *logger_key=ACE_DEFAULT_LOGGER_KEY, bool ignore_static_svcs=true, bool ignore_default_svc_conf_file=false, bool ignore_debug_flag=false)
int is_opened (void)
int process_directive (const ACE_TCHAR directive[])
int process_directive (const ACE_Static_Svc_Descriptor &ssd, int force_replace=0)
 Process one static service definition.
int process_file (const ACE_TCHAR file[])
int find (const ACE_TCHAR name[], const ACE_Service_Type **srp=0, int ignore_suspended=1) const
 Searches for a service object declaration in the local repo, only.
int parse_args (int, ACE_TCHAR *argv[])
int process_directives (void)
int close (void)
int insert (ACE_Static_Svc_Descriptor *stsd)
int initialize (const ACE_Service_Type_Factory *, const ACE_TCHAR *parameters)
int initialize (const ACE_Service_Type *, const ACE_TCHAR *parameters)
int initialize (const ACE_TCHAR *svc_name, const ACE_TCHAR *parameters)
 Initialize and activate a statically svc_name service.
int resume (const ACE_TCHAR svc_name[])
int suspend (const ACE_TCHAR svc_name[])
int remove (const ACE_TCHAR svc_name[])
int find_static_svc_descriptor (const ACE_TCHAR *name, ACE_Static_Svc_Descriptor **ssd=0) const
 Find a static service descriptor by name.

Public Attributes

 ACE_ALLOC_HOOK_DECLARE
 Declare the dynamic allocation hooks.

Protected Types

typedef ACE_Unbounded_Queue<
ACE_TString
ACE_SVC_QUEUE
typedef ACE_Unbounded_Queue_Iterator<
ACE_TString
ACE_SVC_QUEUE_ITERATOR
typedef ACE_Unbounded_Set<
ACE_Static_Svc_Descriptor * > 
ACE_STATIC_SVCS
typedef ACE_Unbounded_Set_Iterator<
ACE_Static_Svc_Descriptor * > 
ACE_STATIC_SVCS_ITERATOR
typedef ACE_Unbounded_Set<
Processed_Static_Svc * > 
ACE_PROCESSED_STATIC_SVCS
typedef ACE_Unbounded_Set_Iterator<
Processed_Static_Svc * > 
ACE_PROCESSED_STATIC_SVCS_ITERATOR

Protected Member Functions

virtual int parse_args_i (int, ACE_TCHAR *argv[])
virtual int open_i (const ACE_TCHAR program_name[], const ACE_TCHAR *logger_key=ACE_DEFAULT_LOGGER_KEY, bool ignore_static_svcs=true, bool ignore_default_svc_conf_file=false, bool ignore_debug_flag=false)
int init_svc_conf_file_queue (void)
 Initialize the <svc_conf_file_queue_> if necessary.
int load_static_svcs (void)
int process_commandline_directives (void)
int process_directive_i (const ACE_Static_Svc_Descriptor &ssd, int force_replace=0)
int process_directives_i (ACE_Svc_Conf_Param *param)
int initialize_i (const ACE_Service_Type *sr, const ACE_TCHAR *parameters)
const ACE_Static_Svc_Descriptorfind_processed_static_svc (const ACE_TCHAR *)
void add_processed_static_svc (const ACE_Static_Svc_Descriptor *)
 Captures a list of the direcives processed (explicitely) for this Gestalt so that services can be replicated in other repositories upon their first initialization.
int init_i (void)

Protected Attributes

bool svc_repo_is_owned_
size_t svc_repo_size_
int is_opened_
const ACE_TCHARlogger_key_
bool no_static_svcs_
 Should we avoid loading the static services?
ACE_SVC_QUEUEsvc_queue_
 Queue of services specified on the command-line.
ACE_SVC_QUEUEsvc_conf_file_queue_
ACE_Service_Repositoryrepo_
 The service repository to hold the services.
ACE_STATIC_SVCSstatic_svcs_
 Repository of statically linked services.
ACE_PROCESSED_STATIC_SVCSprocessed_static_svcs_

Private Member Functions

 ACE_Service_Gestalt (const ACE_Service_Gestalt &)
ACE_Service_Gestaltoperator= (const ACE_Service_Gestalt &)

Friends

class ACE_Dynamic_Service_Base
class ACE_Service_Object
class ACE_Service_Config_Guard

Classes

struct  Processed_Static_Svc

Detailed Description

Supplies common server operations for dynamic and static configuration of services.

The Gestalt embodies the concept of configuration context. On one hand, it is a flat namespace, where names correspond to a Service Object instance. A Gestalt owns the Service Repository instance, which in turn owns the Service Object instances.

Another aspect of a Gestalt is its responsibility for record-keeping and accounting for the meta-data, necessary for locating, removing or instantiating a service.

A repository underlies an instance of a gestalt and its lifetime may or may not be bounded by the lifetime of the gestalt, that owns it. This feature is important for the derived classes and the Service Config in particular.


Member Typedef Documentation

typedef ACE_Unbounded_Set<Processed_Static_Svc *> ACE_Service_Gestalt::ACE_PROCESSED_STATIC_SVCS [protected]

typedef ACE_Unbounded_Set_Iterator<Processed_Static_Svc *> ACE_Service_Gestalt::ACE_PROCESSED_STATIC_SVCS_ITERATOR [protected]

typedef ACE_Unbounded_Set<ACE_Static_Svc_Descriptor *> ACE_Service_Gestalt::ACE_STATIC_SVCS [protected]

typedef ACE_Unbounded_Set_Iterator<ACE_Static_Svc_Descriptor *> ACE_Service_Gestalt::ACE_STATIC_SVCS_ITERATOR [protected]

typedef ACE_Unbounded_Queue<ACE_TString> ACE_Service_Gestalt::ACE_SVC_QUEUE [protected]

typedef ACE_Unbounded_Queue_Iterator<ACE_TString> ACE_Service_Gestalt::ACE_SVC_QUEUE_ITERATOR [protected]


Member Enumeration Documentation

anonymous enum

Enumerator:
MAX_SERVICES 


Constructor & Destructor Documentation

ACE_Service_Gestalt::ACE_Service_Gestalt ( const ACE_Service_Gestalt  )  [private]

Not implemented to enforce no copying

ACE_Service_Gestalt::ACE_Service_Gestalt ( size_t  size,
bool  svc_repo_is_owned = true,
bool  no_static_svcs = true 
)

Constructor either associates the instance with the process-wide singleton instance of ACE_Service_Repository, or creates and manages its own instance of the specified size.

ACE_Service_Gestalt::~ACE_Service_Gestalt ( void   )  [virtual]

Perform user-specified close activities and remove dynamic memory.


Member Function Documentation

void ACE_Service_Gestalt::add_processed_static_svc ( const ACE_Static_Svc_Descriptor assd  )  [protected]

Captures a list of the direcives processed (explicitely) for this Gestalt so that services can be replicated in other repositories upon their first initialization.

This is part of the mechanism ensuring distinct local instances for static service objects, loaded in another repository.

When process_directive(Static_Svc_Descriptor&) is called, it associates a service object with the Gestalt and makes the resource (a Service Object) local to the repository. This is but the first step in using such SO. The next is the "initialization" step. It is typicaly done through a "static" service configuration directive.

In contrast a "dynamic" directive, when processed through the overloaded process_directives(string) both creates the SO locally and initializes it, where the statics directive must first locate the SO and then calls the init() method. This means that durig the "static" initialization there's no specific information about the hosting repository and the gestalt must employ some lookup strategy to find it elsewhere.

int ACE_Service_Gestalt::close ( void   ) 

Tidy up and perform last rites when ACE_Service_Config is shut down. This method calls <close_svcs>. Returns 0.

Reimplemented in ACE_Service_Config.

void ACE_Service_Gestalt::dump ( void   )  const

Dump the state of an object.

Reimplemented in ACE_Service_Config.

ACE_INLINE int ACE_Service_Gestalt::find ( const ACE_TCHAR  name[],
const ACE_Service_Type **  srp = 0,
int  ignore_suspended = 1 
) const

Searches for a service object declaration in the local repo, only.

Locate an entry with <name> in the table. If <ignore_suspended> is set then only consider services marked as resumed. If the caller wants the located entry, pass back a pointer to the located entry via <srp>. If <name> is not found, -1 is returned. If <name> is found, but it is suspended and the caller wants to ignore suspended services a -2 is returned.

const ACE_Static_Svc_Descriptor * ACE_Service_Gestalt::find_processed_static_svc ( const ACE_TCHAR  )  [protected]

int ACE_Service_Gestalt::find_static_svc_descriptor ( const ACE_TCHAR name,
ACE_Static_Svc_Descriptor **  ssd = 0 
) const

Find a static service descriptor by name.

Using the supplied name, finds and (if needed) returns a pointer to a static service descriptor. Returns 0 for success and -1 for failure

int ACE_Service_Gestalt::init_i ( void   )  [protected]

Performs the common initialization tasks for a new or previously closed instance. Must not be virtual, as it is called from the constructor.

int ACE_Service_Gestalt::init_svc_conf_file_queue ( void   )  [protected]

Initialize the <svc_conf_file_queue_> if necessary.

int ACE_Service_Gestalt::initialize ( const ACE_TCHAR svc_name,
const ACE_TCHAR parameters 
)

Initialize and activate a statically svc_name service.

If initialization fails ...

Reimplemented in ACE_Service_Config.

int ACE_Service_Gestalt::initialize ( const ACE_Service_Type ,
const ACE_TCHAR parameters 
)

Reimplemented in ACE_Service_Config.

int ACE_Service_Gestalt::initialize ( const ACE_Service_Type_Factory *  ,
const ACE_TCHAR parameters 
)

Dynamically link the shared object file and retrieve a pointer to the designated shared object in this file. Also account for the possiblity to have static services registered when loading the DLL, by ensuring that the dynamic sevice is registered before any of its subordibnate static services. Thus avoiding any finalization order problems.

int ACE_Service_Gestalt::initialize_i ( const ACE_Service_Type sr,
const ACE_TCHAR parameters 
) [protected]

int ACE_Service_Gestalt::insert ( ACE_Static_Svc_Descriptor stsd  ) 

Queues static service object descriptor which, during open() will be given to process_directive() to create the Service Object. Normally, only called from static initializers, prior to calling open().

Reimplemented in ACE_Service_Config.

int ACE_Service_Gestalt::is_opened ( void   ) 

Has it been opened? Returns the difference between the times open and close have been called on this instance

int ACE_Service_Gestalt::load_static_svcs ( void   )  [protected]

Add the default statically-linked services to the ACE_Service_Repository.

Reimplemented in ACE_Service_Config.

ACE_INLINE int ACE_Service_Gestalt::open ( int  argc,
ACE_TCHAR argv[],
const ACE_TCHAR logger_key = ACE_DEFAULT_LOGGER_KEY,
bool  ignore_static_svcs = true,
bool  ignore_default_svc_conf_file = false,
bool  ignore_debug_flag = false 
)

This is the primary entry point into the ACE_Service_Config (the constructor just handles simple initializations). It parses arguments passed in from argc and argv parameters. The arguments that are valid in a call to this method include:

Parameters:
argc The number of commandline arguments.
argv The array with commandline arguments
logger_key Indicates where to write the logging output, which is typically either a STREAM pipe or a socket address.
ignore_static_svcs If true then static services are not loaded, otherwise, they are loaded.
ignore_default_svc_conf_file If false then the svc.conf configuration file will be ignored.
ignore_debug_flag If false then the application is responsible for setting the ACE_Log_Msg::priority_mask appropriately.
Return values:
-1 The configuration file is not found or cannot be opened (errno is set accordingly).
0 Success.
>0 The number of errors encountered while processing the service configuration file(s).

Reimplemented in ACE_Service_Config.

ACE_BEGIN_VERSIONED_NAMESPACE_DECL ACE_INLINE int ACE_Service_Gestalt::open ( const ACE_TCHAR  program_name[],
const ACE_TCHAR logger_key = ACE_DEFAULT_LOGGER_KEY,
bool  ignore_static_svcs = true,
bool  ignore_default_svc_conf_file = false,
bool  ignore_debug_flag = false 
)

Performs an open without parsing command-line arguments. The logger_key indicates where to write the logging output, which is typically either a STREAM pipe or a socket address. If ignore_static_svcs is 1 then static services are not loaded, otherwise, they are loaded. If ignore_default_svc_conf_file is non-0 then the <svc.conf> configuration file will be ignored. Returns zero upon success, -1 if the file is not found or cannot be opened (errno is set accordingly), otherwise returns the number of errors encountered loading the services in the specified svc.conf configuration file. If ignore_debug_flag is non-0 then the application is responsible for setting the <ACE_Log_Msg::priority_mask> appropriately.

Reimplemented in ACE_Service_Config.

int ACE_Service_Gestalt::open_i ( const ACE_TCHAR  program_name[],
const ACE_TCHAR logger_key = ACE_DEFAULT_LOGGER_KEY,
bool  ignore_static_svcs = true,
bool  ignore_default_svc_conf_file = false,
bool  ignore_debug_flag = false 
) [protected, virtual]

Performs an open without parsing command-line arguments. The logger_key indicates where to write the logging output, which is typically either a STREAM pipe or a socket address. If ignore_default_svc_conf_file is non-0 then the "svc.conf" file will be ignored. If ignore_debug_flag is non-0 then the application is responsible for setting the ACE_Log_Msg::priority_mask() appropriately. Returns number of errors that occurred on failure and 0 otherwise.

Reimplemented in ACE_Service_Config.

ACE_Service_Gestalt& ACE_Service_Gestalt::operator= ( const ACE_Service_Gestalt  )  [private]

int ACE_Service_Gestalt::parse_args ( int  ,
ACE_TCHAR argv[] 
)

Handle the command-line options intended for the <ACE_Service_Gestalt>. Note that <argv[0]> is assumed to be the program name.

The arguments that are valid in a call to this method are

Reimplemented in ACE_Service_Config.

int ACE_Service_Gestalt::parse_args_i ( int  ,
ACE_TCHAR argv[] 
) [protected, virtual]

Reimplemented in ACE_Service_Config.

int ACE_Service_Gestalt::process_commandline_directives ( void   )  [protected]

Process service configuration requests that were provided on the command-line. Returns the number of errors that occurred.

Reimplemented in ACE_Service_Config.

int ACE_Service_Gestalt::process_directive ( const ACE_Static_Svc_Descriptor ssd,
int  force_replace = 0 
)

Process one static service definition.

Load a new static service.

Parameters:
ssd Service descriptor, see the document of ACE_Static_Svc_Descriptor for more details.
force_replace If set the new service descriptor replaces any previous instance in the repository.
Returns:
Returns -1 if the service cannot be 'loaded'.

Reimplemented in ACE_Service_Config.

int ACE_Service_Gestalt::process_directive ( const ACE_TCHAR  directive[]  ) 

Process one service configuration directive, which is passed as a string. Returns the number of errors that occurred.

Reimplemented in ACE_Service_Config.

int ACE_Service_Gestalt::process_directive_i ( const ACE_Static_Svc_Descriptor ssd,
int  force_replace = 0 
) [protected]

Process a static directive without also inserting its descriptor the global table. This avoids multiple additions when processing directives in non-global gestalts.

int ACE_Service_Gestalt::process_directives ( void   ) 

Process (or re-process) service configuration requests that are provided in the svc.conf file(s). Returns the number of errors that occurred.

Reimplemented in ACE_Service_Config.

int ACE_Service_Gestalt::process_directives_i ( ACE_Svc_Conf_Param param  )  [protected]

This is the implementation function that process_directives() and process_directive() both call. Returns the number of errors that occurred.

Reimplemented in ACE_Service_Config.

int ACE_Service_Gestalt::process_file ( const ACE_TCHAR  file[]  ) 

Process a file containing a list of service configuration directives.

Reimplemented in ACE_Service_Config.

int ACE_Service_Gestalt::remove ( const ACE_TCHAR  svc_name[]  ) 

Totally remove svc_name from the daemon by removing it from the ACE_Reactor, and unlinking it if necessary.

Reimplemented in ACE_Service_Config.

int ACE_Service_Gestalt::resume ( const ACE_TCHAR  svc_name[]  ) 

Resume a svc_name that was previously suspended or has not yet been resumed (e.g., a static service).

Reimplemented in ACE_Service_Config.

int ACE_Service_Gestalt::suspend ( const ACE_TCHAR  svc_name[]  ) 

Suspend svc_name. Note that this will not unlink the service from the daemon if it was dynamically linked, it will mark it as being suspended in the Service Repository and call the <suspend> member function on the appropriate <ACE_Service_Object>. A service can be resumed later on by calling the <RESUME> member function...

Reimplemented in ACE_Service_Config.


Friends And Related Function Documentation

friend class ACE_Dynamic_Service_Base [friend]

friend class ACE_Service_Config_Guard [friend]

Reimplemented in ACE_Service_Config.

friend class ACE_Service_Object [friend]


Member Data Documentation

ACE_Service_Gestalt::ACE_ALLOC_HOOK_DECLARE

Declare the dynamic allocation hooks.

Reimplemented in ACE_Service_Config.

int ACE_Service_Gestalt::is_opened_ [protected]

Keep track of the number of times the instance has been initialized (opened). "If so, we can't allow <yyparse> to be called since it's not reentrant" is the original motivation, but that does not seem to be the case anymore. This variable is incremented by the <ACE_Service_Gestalt::open> method and decremented by the <ACE_Service_Gestalt::close> method.

const ACE_TCHAR* ACE_Service_Gestalt::logger_key_ [protected]

Indicates where to write the logging output. This is typically either a STREAM pipe or a socket

bool ACE_Service_Gestalt::no_static_svcs_ [protected]

Should we avoid loading the static services?

ACE_PROCESSED_STATIC_SVCS* ACE_Service_Gestalt::processed_static_svcs_ [protected]

Repository of statically linked services for which process directive was called, but the service is not already a member of the static_svcs_ list.

ACE_Service_Repository* ACE_Service_Gestalt::repo_ [protected]

The service repository to hold the services.

ACE_STATIC_SVCS* ACE_Service_Gestalt::static_svcs_ [protected]

Repository of statically linked services.

ACE_SVC_QUEUE* ACE_Service_Gestalt::svc_conf_file_queue_ [protected]

Queue of svc.conf files specified on the command-line. @ This should probably be made to handle unicode filenames...

ACE_SVC_QUEUE* ACE_Service_Gestalt::svc_queue_ [protected]

Queue of services specified on the command-line.

bool ACE_Service_Gestalt::svc_repo_is_owned_ [protected]

Do we own the service repository instance, or have only been given a ptr to the singleton?

size_t ACE_Service_Gestalt::svc_repo_size_ [protected]

Repository size is necessary, so that we can close (which may destroy the repository instance), and then re-open again.


The documentation for this class was generated from the following files:
Generated on Tue Jan 30 13:43:19 2007 for ACE by  doxygen 1.4.7-1