The growing requirements of persistent application systems challenge software engineers to provide the appropriate architectural infrastructure. Where the structure of the data is simple, file systems and operating systems are sufficient to supply the infrastructure for the storage and use of data and the execution of programs. When the structure of the data becomes more sophisticated, data models, and in particular object-oriented models, implemented in databases may be used. The contribution of orthogonal persistence is to integrate the notions of long- and short-term data, and to allow programs to be treated as first class data objects. As the application system evolves, more data, meta-data, programs and users are accumulated and must be accommodated by a further step in architectural design. While process modelling systems provide the conceptual support for this evolutionary style, there is no agreed software architecture to supply these needs.
The challenge in supporting process modelling systems is in efficiently providing the radically varying facilities required by different process models. When implemented on a conventional software architecture, there is often a repetition and duplication of both mechanisms and policy in different architectural components which conflict with each other and add complexity to the overall system. The repetition occurs when the same policies/mechanisms are implemented in different components, and duplication occurs when the policies/mechanisms in different components are radically different and may interact in an undesirable manner. This complexity makes it difficult to predict how the system will perform, particularly in terms of failure semantics and run-time efficiency. Process modelling systems may be seen as archetypal data intensive applications systems, sometimes referred to as Persistent Application Systems (PASs). They are potentially long-lived, concurrently accessed and consist of large bodies of programs and data. In particular, process models evolve frequently, and therefore must accommodate dynamic change within the application domain. Thus, the architectural problems encountered in implementing process modelling systems are similar to, if not the same as, those investigated by the persistent programming community over many years.
Compliance is a new architectural approach to the construction of persistent systems that accommodates the needs of particular applications. We describe this as being compliant to these needs. The architecture takes advantage of the fact that persistent systems are well structured to discover the dynamically changing demands of applications; since they define precisely the extent to which they are open, the computation which takes place within the persistent environment may be relatively easily tracked.
The novelty of a compliant architecture is that the components are designed, top down, with the philosophy of fitting the architecture to the needs of the particular application. This contrasts with the more traditional, bottom up, approach to providing static abstract components or layers designed to meet the predicted needs of the majority of applications. The key scientific advance, in our approach, is to separate mechanism and policy, a technique that has been used before but not all at once, and consistently, on every component of the architecture.