An adaptive view mechanism can dynamically adapt to changing conditions and provide
the benefits of both optimistic and pessimistic notifications. This can, for example,
provide a consistent and jitter-free GUI to display the state of distributed replicated
data objects in the presence of concurrency control conflicts and losses. In a
Model-View-Controller architecture of building distributed collaborative applications
where model objects are replicated at distributed sites, adaptive views can dynamically
switch between behaving like pessimistic views and like optimistic views. When
the number of concurrent updates is low, the adaptive views can be made to operate
in an optimistic mode—providing good responsiveness to users. However, during
those periods of heavy activity, when the number of concurrent updates becomes
high, the adaptive view can be made to operate in a pessimistic manner—providing
more reliable response to users. For each adaptive view, a programmer can specify
a policy object that can monitor the prevailing conflict rate and loss rate as
if the adaptive view were behaving optimistically. Using these rates, the policy
object can apply arbitrary application logic or thresholds to determine whether
it is beneficial for the adaptive view to behave optimistically or pessimistically.
The policy object can then request the adaptive view to dynamically adapt its behavior
to the appropriate manner. In general however, the dynamic switching can be based
on any application specific request to switch modes. Distributed sites that have
replicated copies of the same model object can view the replica heterogeneously,
that is, pessimistically, optimistically, or adaptively, according to the user's requirements.