HP WBEM Services Software Developer's Kit for HP-UX Provider and Client Developer's Guide A.01

Provider Implementation
Provider Design Considerations
Chapter 4 67
Use of Empty String Key Values
While the full set of keys is necessary to uniquely identify an instance
within a namespace, it is useful to allow clients to specify empty strings
for key values when there is no ambiguity. For example, when a client
submits a getInstance() operation to a CIM Server, it is clear that the
value of the SystemName key will normally be the same as the system to
which the client has connected. This is especially useful when managing
a multi-homed system (a system that may have more than one IP
address or DNS name), since the client need not guess the value of
SystemName when there can be several different hostnames for the same
system. Unless the provider has a reason to require a value for
SystemName, it should accept an empty string for this key without
returning an error. As a general rule, providers should accept empty
strings for any keys that they do not actually require to identify an
instance from among those they manage. However, the provider should
always supply values for all keys when returning data to the client.
Multi-Threading for Concurrent Requests
The CIM Server can process several client requests in different threads
concurrently in the same provider. Therefore, provider code must be
100% thread-reentrant and must avoid/prevent concurrent access of
any shared resources. If shared (global) resources are used, access must
be serialized by the use of a suitable semaphore (or mutex) to protect the
shared resource against modification that could lead to erroneous
behavior. This is particularly important in provider interface methods
that alter platform behavior, such as modifyInstance(),
createInstance(), and deleteInstance(), but applies to any code
that manipulates a globally accessible resource or may have a side effect.
Information on developing thread-safe applications can be found online
in documentation for the aCC C++ compiler at
http://www.docs.hp.com.
Global Symbols
While all providers implement functions of the same names (for example,
getInstance()), there is no duplication of symbol names for symbols
defined within a C++ provider classes. The C++ compiler generates