As illustrated in Figure 4.4 on page 39, the interface between the WBEM server and its providers is implemented as a Provider Protocol Adaptor. In the early days of WBEM/CIM these adaptors were not seen as plug-in components and the interface at this point was defined by the particular WBEM server implementation. This led to fragmentation as WBEM servers implemented in Java could not interface with providers written in C++ and vice versa. This was particularly a problem with very small devices where it was necessary to write providers in C, memory being inadequate for either C++ or Java.
Gradually a specification, the Native Provider Interface (NPI), emerged to address the issue of interfacing with providers written in C, particularly from Java WBEM servers.
NPI is currently being superseded by the Common Manageability Programming Interface (CMPI). The CMPI specification can be found at http://www.wbemsource.org .
Both the openPegasus and OpenWBEM servers currently provide C++ interfaces which are different from the CMPI and each other; but both also now have CMPI adapters.
The CMPI specification includes the following requirements which it is intended to satisfy (my paraphrasing from the CMPI specification):
Reduce the complexity of writing Management Instrumentation (i.e., providers).
Allow providers to be written without having to include libraries specific to the WBEM server being used ”a C header file being all that is needed.
Provide support for providers remote from the WBEM server.
Place no requirement on the providers to maintain state between calls so that providers implemented as simple scripts can be supported.
Allow multithreading of providers by making the interface thread-safe.
Support any number of providers in the same library module.
The WBEM server/provider interface works generically on the principle, illustrated in Figure 11.1, of a client/server relationship, with the WBEM server being the client (sic) requesting services of the provider, acting as the server.
In its non-CMPI implementation, the openPegasus extends this client-server model and makes the WBEM server and the provider more independent by supporting the interfaces shown in Figure 11.2. The WBEM server loads the provider when it is first required and invokes the provider by giving it a call-back address of a handler. The provider does its work and makes calls to the handler to answer the request. This interaction, sophisticated enough to allow the provider to return its information incrementally, is illustrated in the example in Chapter 12. In principle, incremental delivery from the Provider to the WBEM server allows the WBEM server also to deliver the response to the WBEM client incrementally, using the HTTP "chunked transfer" feature. Unfortunately, because the CMPI specification does not support incremental delivery from the provider to the WBEM server, this rather attractive openPegasus feature is not available in the CMPI implementation.