The Provisioning server stores all the information needed by the different components of the system and is responsible for maintaining the information needed to handle callbacks, redundancy, and data manipulation, such as searches, sorts, and batching of information for sending to the GUIs. The server is designed in a highly modular fashion—each module of the server can be removed and replaced with a different component to allow the end user maximum flexibility—and the user can simply define a new module and use that in place of the modules in place. This is accomplished via a compile-time mechanism.
The flow of data within the Provisioning server, as well as the basic structure of the server, is illustrated in Figure 19-2. This diagram shows the way that data in the system flows (not always the same as the call flow).
Figure 19-2. Provisioning server architecture
The server is composed of a number of pluggable modules, which could be overloaded and defined by the user, as well as a core server engine that drives these components. The component organization is shown in detail in the class diagram following these descriptions:
Responsible for communication with the outside world. This module is responsible for socket management, as well as transport-level protocol. In our implementation, we have derived an HTTP protocol module ...