Event driven services are different than other Haystack services in two ways. Services that extend the HaystackEventService class will also implement the interface HaystackEventListener and/or ObjectEventListener. The functions defined by each of these ``handle'' the events generated by the HDM. We also impose the invariant that any service modifying a piece of data in HDM must lock the HDM object first in the HsResourceControlService. This prevents a number of race conditions, and allows us to decide when an object has reached stable state (when it hasn't been locked for a long time).