It is an emerging trend to build large information systems in a
component-based fashion where the components follow the concept of
object. Applications are constructed by organizing pre-built objects
such that they cooperate with each other to perform some task.
However, considerable programming effort is required to express
multi-object constraints in terms of the traditional message-passing
mechanism. This observation lead many authors to suggest
communication abstractions in object models. One promising approach
is to separate multi-object constraints from the objects and collect
them into a separate construct. We call this construct an alliance.
Unlike other approaches we allow alliances to involve large sets of
long-lived objects which may dynamically vary during the - also
potentially long - life-time of the alliance. Alliances are not only
visible at the specification level but are also computational
entities which enforce multi-object constraints at run-time.
They do so in an unreliable world, i.e., we do not assume that
objects will always meet their obligations in a cooperation.
Since objects may often be distributed across a network, we
demonstrate that alliances are an ideal place to deal with aspects
of distribution in an application-specific manner. We illustrate our
thesis by one of the key questions of distributed object management:
where shall objects be located and when shall they migrate to which
node? We show that alliances allow for customized distribution
policies which are neither "hardwired" into the objects nor
necessitate a centralized distribution control