The bulk of functionality within Haystack is implemented by objects in
the Haystack Service Model (HSM). Abstractly, Haystack can be viewed
as standard three-tiered architecture consisting of three different
layers, a user interface layer (the client), a server/service layer,
and a database. Figure represented the layers (and
components within the layers) graphically.
This chapter primarily concerns itself with components of the service layer. The Haystack service layer consists of a number of services and the Haystack Data Model (HDM) objects running within one HaystackRootServer.
Figure: Abstract inter-service communication model
Figure illustrates some of the relationships between
services in Haystack. As stated previously, services run within the
context of one HaystackRootServer. There are services that
provide interfaces between the user and the indexing and archiving
subsystems. There are services that provide utility functions for
other services. For example, a name service allows for communication
between other services, and a resource control service provides the
mechanism for the locking of arbitrary named resources. There are
services within the HaystackRootServer that ``listen'' for
changes in the HDM. When those changes happen, the services are
notified and they act upon the data.