You are developing an application for a distributed enterprise information system where desktop clients will access or modify shared resources (usually located within a passive1 database server). You have decided to design your application based on a two-tier distribution architecture (figure 1).
Figure 1 Problem
How can you ensure that each client has a consistent view of the current state of the shared passive resource so that all users are in sync while working with the shared information?
Passivity. Passive resources (e.g., traditional databases) can not inform their clients about changes of the information they hold.
Consistency. Clients that are sharing a passive resource have to update their views to consider the current state of the resource while performing their responsibilities. This may require continuous checking (i.e. polling) of the server to detect changes, resulting in extra network load (figure 2). Depending on the polling time-frame/frequency clients become temporarily inconsistent with the database or may be affected by network traffic problems.
Figure 2 Generalization & Reusability. To be independent from a specific resource and its API, a possible solution should be lightweight by having no interaction with the resource itself.